diff options
author | ssid <ssid@chromium.org> | 2015-04-14 09:55:39 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-14 16:55:58 +0000 |
commit | 4498d8f0a9d899c638eb2c8be25bcb33cc4a2082 (patch) | |
tree | 369c3a718f3e110bffcf15478e7c7cc845eb06a7 /base/trace_event | |
parent | 7dd3117470c1570c5873882a05bcf741431c6e7d (diff) | |
download | chromium_src-4498d8f0a9d899c638eb2c8be25bcb33cc4a2082.zip chromium_src-4498d8f0a9d899c638eb2c8be25bcb33cc4a2082.tar.gz chromium_src-4498d8f0a9d899c638eb2c8be25bcb33cc4a2082.tar.bz2 |
Generate globally (cross-process) unique IDs for memory tracing dumps
Refactoring the hashing code to use it in memory_dump_manager to make
the guid unique.
BUG=462931
Review URL: https://codereview.chromium.org/994133002
Cr-Commit-Position: refs/heads/master@{#325071}
Diffstat (limited to 'base/trace_event')
-rw-r--r-- | base/trace_event/memory_dump_manager.cc | 5 | ||||
-rw-r--r-- | base/trace_event/trace_event_impl.cc | 6 | ||||
-rw-r--r-- | base/trace_event/trace_event_impl.h | 2 |
3 files changed, 9 insertions, 4 deletions
diff --git a/base/trace_event/memory_dump_manager.cc b/base/trace_event/memory_dump_manager.cc index ec7651f..2c4b18e 100644 --- a/base/trace_event/memory_dump_manager.cc +++ b/base/trace_event/memory_dump_manager.cc @@ -115,9 +115,8 @@ void MemoryDumpManager::RequestGlobalDump( if (!UNLIKELY(subtle::NoBarrier_Load(&memory_tracing_enabled_))) return; - // TODO(primiano): Make guid actually unique (cross-process) by hashing it - // with the PID. See crbug.com/462931 for details. - const uint64 guid = g_next_guid.GetNext(); + const uint64 guid = + TraceLog::GetInstance()->MangleEventId(g_next_guid.GetNext()); // The delegate_ is supposed to be thread safe, immutable and long lived. // No need to keep the lock after we ensure that a delegate has been set. diff --git a/base/trace_event/trace_event_impl.cc b/base/trace_event/trace_event_impl.cc index 834f826e..f312c71 100644 --- a/base/trace_event/trace_event_impl.cc +++ b/base/trace_event/trace_event_impl.cc @@ -1921,7 +1921,7 @@ TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp( DCHECK(!timestamp.is_null()); if (flags & TRACE_EVENT_FLAG_MANGLE_ID) - id ^= process_id_hash_; + id = MangleEventId(id); TimeTicks offset_event_timestamp = OffsetTimestamp(timestamp); TimeTicks now = flags & TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP ? @@ -2190,6 +2190,10 @@ void TraceLog::CancelWatchEvent() { watch_event_callback_.Reset(); } +uint64 TraceLog::MangleEventId(uint64 id) { + return id ^ process_id_hash_; +} + void TraceLog::AddMetadataEventsWhileLocked() { lock_.AssertAcquired(); diff --git a/base/trace_event/trace_event_impl.h b/base/trace_event/trace_event_impl.h index c3da0b5e..1d00a71 100644 --- a/base/trace_event/trace_event_impl.h +++ b/base/trace_event/trace_event_impl.h @@ -603,6 +603,8 @@ class BASE_EXPORT TraceLog { int process_id() const { return process_id_; } + uint64 MangleEventId(uint64 id); + // Exposed for unittesting: void WaitSamplingEventForTesting(); |