summaryrefslogtreecommitdiffstats
path: root/base/trace_event
diff options
context:
space:
mode:
authorssid <ssid@chromium.org>2015-04-14 09:55:39 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-14 16:55:58 +0000
commit4498d8f0a9d899c638eb2c8be25bcb33cc4a2082 (patch)
tree369c3a718f3e110bffcf15478e7c7cc845eb06a7 /base/trace_event
parent7dd3117470c1570c5873882a05bcf741431c6e7d (diff)
downloadchromium_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.cc5
-rw-r--r--base/trace_event/trace_event_impl.cc6
-rw-r--r--base/trace_event/trace_event_impl.h2
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();