Index: base/trace_event/trace_event.h |
diff --git a/base/trace_event/trace_event.h b/base/trace_event/trace_event.h |
index ffc57639f8122cc67884a7b84afe1ac7ce8a8f8d..08576a88fe15766e6c8deb52d0312a38d411a971 100644 |
--- a/base/trace_event/trace_event.h |
+++ b/base/trace_event/trace_event.h |
@@ -28,13 +28,16 @@ |
#define TRACE_STR_COPY(str) \ |
trace_event_internal::TraceStringWithCopy(str) |
-// By default, uint64_t ID argument values are not mangled with the Process ID |
-// in TRACE_EVENT_ASYNC macros. Use this macro to force Process ID mangling. |
+// DEPRECATED: do not use: Consider using TRACE_ID_{GLOBAL, LOCAL} macros, |
+// instead. By default, uint64_t ID argument values are not mangled with the |
+// Process ID in TRACE_EVENT_ASYNC macros. Use this macro to force Process ID |
+// mangling. |
#define TRACE_ID_MANGLE(id) \ |
trace_event_internal::TraceID::ForceMangle(id) |
-// By default, pointers are mangled with the Process ID in TRACE_EVENT_ASYNC |
-// macros. Use this macro to prevent Process ID mangling. |
+// DEPRECATED: do not use: Consider using TRACE_ID_{GLOBAL, LOCAL} macros, |
+// instead. By default, pointers are mangled with the Process ID in |
+// TRACE_EVENT_ASYNC macros. Use this macro to prevent Process ID mangling. |
#define TRACE_ID_DONT_MANGLE(id) \ |
trace_event_internal::TraceID::DontMangle(id) |
@@ -43,6 +46,9 @@ |
#define TRACE_ID_WITH_SCOPE(scope, id) \ |
trace_event_internal::TraceID::WithScope(scope, id) |
+#define TRACE_ID_GLOBAL(id) trace_event_internal::TraceID::GlobalId(id) |
+#define TRACE_ID_LOCAL(id) trace_event_internal::TraceID::LocalId(id) |
+ |
// Sets the current sample state to the given category and name (both must be |
// constant strings). These states are intended for a sampling profiler. |
// Implementation note: we store category and name together because we don't |
@@ -292,38 +298,38 @@ TRACE_EVENT_API_CLASS_EXPORT extern \ |
INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, h); \ |
} |
-#define INTERNAL_TRACE_EVENT_ADD_SCOPED_WITH_FLOW( \ |
- category_group, name, bind_id, flow_flags, ...) \ |
- INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \ |
- trace_event_internal::ScopedTracer INTERNAL_TRACE_EVENT_UID(tracer); \ |
- if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \ |
- unsigned int trace_event_flags = flow_flags; \ |
- trace_event_internal::TraceID trace_event_bind_id(bind_id, \ |
- &trace_event_flags); \ |
- base::trace_event::TraceEventHandle h = \ |
- trace_event_internal::AddTraceEvent( \ |
- TRACE_EVENT_PHASE_COMPLETE, \ |
- INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, \ |
+#define INTERNAL_TRACE_EVENT_ADD_SCOPED_WITH_FLOW( \ |
+ category_group, name, bind_id, flow_flags, ...) \ |
+ INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \ |
+ trace_event_internal::ScopedTracer INTERNAL_TRACE_EVENT_UID(tracer); \ |
+ if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \ |
+ trace_event_internal::TraceID trace_event_bind_id((bind_id)); \ |
+ unsigned int trace_event_flags = flow_flags | \ |
+ trace_event_bind_id.id_flags(); \ |
+ base::trace_event::TraceEventHandle h = \ |
+ trace_event_internal::AddTraceEvent( \ |
+ TRACE_EVENT_PHASE_COMPLETE, \ |
+ INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, \ |
trace_event_internal::kGlobalScope, trace_event_internal::kNoId, \ |
trace_event_flags, trace_event_bind_id.raw_id(), ##__VA_ARGS__); \ |
- INTERNAL_TRACE_EVENT_UID(tracer).Initialize( \ |
- INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, h); \ |
+ INTERNAL_TRACE_EVENT_UID(tracer).Initialize( \ |
+ INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, h); \ |
} |
// Implementation detail: internal macro to create static category and add |
// event if the category is enabled. |
-#define INTERNAL_TRACE_EVENT_ADD_WITH_ID(phase, category_group, name, id, \ |
- flags, ...) \ |
- do { \ |
- INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \ |
- if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \ |
- unsigned int trace_event_flags = flags | TRACE_EVENT_FLAG_HAS_ID; \ |
- trace_event_internal::TraceID trace_event_trace_id( \ |
- id, &trace_event_flags); \ |
- trace_event_internal::AddTraceEvent( \ |
- phase, INTERNAL_TRACE_EVENT_UID(category_group_enabled), \ |
+#define INTERNAL_TRACE_EVENT_ADD_WITH_ID(phase, category_group, name, id, \ |
+ flags, ...) \ |
+ do { \ |
+ INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \ |
+ if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \ |
+ trace_event_internal::TraceID trace_event_trace_id((id)); \ |
+ unsigned int trace_event_flags = flags | \ |
+ trace_event_trace_id.id_flags(); \ |
+ trace_event_internal::AddTraceEvent( \ |
+ phase, INTERNAL_TRACE_EVENT_UID(category_group_enabled), \ |
name, trace_event_trace_id.scope(), trace_event_trace_id.raw_id(), \ |
- trace_event_flags, trace_event_internal::kNoId, ##__VA_ARGS__); \ |
+ trace_event_flags, trace_event_internal::kNoId, ##__VA_ARGS__); \ |
} \ |
} while (0) |
@@ -346,43 +352,44 @@ TRACE_EVENT_API_CLASS_EXPORT extern \ |
// Implementation detail: internal macro to create static category and add |
// event if the category is enabled. |
-#define INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ |
- phase, category_group, name, id, thread_id, timestamp, flags, ...) \ |
- do { \ |
- INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \ |
- if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \ |
- unsigned int trace_event_flags = flags | TRACE_EVENT_FLAG_HAS_ID; \ |
- trace_event_internal::TraceID trace_event_trace_id(id, \ |
- &trace_event_flags); \ |
- trace_event_internal::AddTraceEventWithThreadIdAndTimestamp( \ |
- phase, INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, \ |
- trace_event_trace_id.scope(), trace_event_trace_id.raw_id(), \ |
- thread_id, base::TimeTicks::FromInternalValue(timestamp), \ |
- trace_event_flags | TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP, \ |
- trace_event_internal::kNoId, ##__VA_ARGS__); \ |
- } \ |
+#define INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ |
+ phase, category_group, name, id, thread_id, timestamp, flags, ...) \ |
+ do { \ |
+ INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \ |
+ if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \ |
+ trace_event_internal::TraceID trace_event_trace_id((id)); \ |
+ unsigned int trace_event_flags = flags | \ |
+ trace_event_trace_id.id_flags(); \ |
+ trace_event_internal::AddTraceEventWithThreadIdAndTimestamp( \ |
+ phase, INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, \ |
+ trace_event_trace_id.scope(), trace_event_trace_id.raw_id(), \ |
+ thread_id, base::TimeTicks::FromInternalValue(timestamp), \ |
+ trace_event_flags | TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP, \ |
+ trace_event_internal::kNoId, ##__VA_ARGS__); \ |
+ } \ |
} while (0) |
-// The trace ID and bind ID will never be mangled by this macro. |
+// This macro ignores whether the bind_id is local, global, or mangled. |
#define INTERNAL_TRACE_EVENT_ADD_BIND_IDS(category_group, name, id, bind_id, \ |
...) \ |
do { \ |
INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \ |
if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \ |
- trace_event_internal::TraceID::DontMangle source_id(id); \ |
- trace_event_internal::TraceID::DontMangle target_id(bind_id); \ |
+ trace_event_internal::TraceID source_id((id)); \ |
+ unsigned int source_flags = source_id.id_flags(); \ |
+ trace_event_internal::TraceID target_id((bind_id)); \ |
if (target_id.scope() == trace_event_internal::kGlobalScope) { \ |
trace_event_internal::AddTraceEvent( \ |
TRACE_EVENT_PHASE_BIND_IDS, \ |
INTERNAL_TRACE_EVENT_UID(category_group_enabled), \ |
name, source_id.scope(), source_id.raw_id(), \ |
- TRACE_EVENT_FLAG_HAS_ID, target_id.raw_id(), ##__VA_ARGS__); \ |
+ source_flags, target_id.raw_id(), ##__VA_ARGS__); \ |
} else { \ |
trace_event_internal::AddTraceEvent( \ |
TRACE_EVENT_PHASE_BIND_IDS, \ |
INTERNAL_TRACE_EVENT_UID(category_group_enabled), \ |
name, source_id.scope(), source_id.raw_id(), \ |
- TRACE_EVENT_FLAG_HAS_ID, target_id.raw_id(), \ |
+ source_flags, target_id.raw_id(), \ |
"bind_scope", target_id.scope(), ##__VA_ARGS__); \ |
} \ |
} \ |
@@ -420,7 +427,7 @@ TRACE_EVENT_API_CLASS_EXPORT extern \ |
void operator=(const INTERNAL_TRACE_EVENT_UID(ScopedContext)&) {}; \ |
}; \ |
INTERNAL_TRACE_EVENT_UID(ScopedContext) \ |
- INTERNAL_TRACE_EVENT_UID(scoped_context)(context.raw_id()); |
+ INTERNAL_TRACE_EVENT_UID(scoped_context)(context); |
// Implementation detail: internal macro to trace a task execution with the |
// location where it was posted from. |
@@ -444,17 +451,46 @@ const unsigned long long kNoId = 0; |
// collide when the same pointer is used on different processes. |
class TraceID { |
public: |
+ // Can be combined with WithScope. |
+ class LocalId { |
+ public: |
+ explicit LocalId(unsigned long long raw_id) : raw_id_(raw_id) {} |
+ unsigned long long raw_id() const { return raw_id_; } |
+ private: |
+ unsigned long long raw_id_; |
+ }; |
+ |
+ // Can be combined with WithScope. |
+ class GlobalId { |
+ public: |
+ explicit GlobalId(unsigned long long raw_id) : raw_id_(raw_id) {} |
+ unsigned long long raw_id() const { return raw_id_; } |
+ private: |
+ unsigned long long raw_id_; |
+ }; |
+ |
class WithScope { |
public: |
WithScope(const char* scope, unsigned long long raw_id) |
: scope_(scope), raw_id_(raw_id) {} |
+ WithScope(const char* scope, LocalId local_id) |
+ : scope_(scope), raw_id_(local_id.raw_id()) { |
+ id_flags_ = TRACE_EVENT_FLAG_HAS_LOCAL_ID; |
+ } |
+ WithScope(const char* scope, GlobalId global_id) |
+ : scope_(scope), raw_id_(global_id.raw_id()) { |
+ id_flags_ = TRACE_EVENT_FLAG_HAS_GLOBAL_ID; |
+ } |
unsigned long long raw_id() const { return raw_id_; } |
const char* scope() const { return scope_; } |
+ unsigned int id_flags() const { return id_flags_; } |
private: |
const char* scope_ = nullptr; |
unsigned long long raw_id_; |
+ unsigned int id_flags_ = TRACE_EVENT_FLAG_HAS_ID; |
}; |
+ // DEPRECATED: consider using LocalId or GlobalId, instead. |
class DontMangle { |
public: |
explicit DontMangle(const void* raw_id) |
@@ -475,15 +511,12 @@ class TraceID { |
: raw_id_(static_cast<unsigned long long>(raw_id)) {} |
explicit DontMangle(signed char raw_id) |
: raw_id_(static_cast<unsigned long long>(raw_id)) {} |
- explicit DontMangle(WithScope scoped_id) |
- : scope_(scoped_id.scope()), raw_id_(scoped_id.raw_id()) {} |
- const char* scope() const { return scope_; } |
unsigned long long raw_id() const { return raw_id_; } |
private: |
- const char* scope_ = nullptr; |
unsigned long long raw_id_; |
}; |
+ // DEPRECATED: consider using LocalId or GlobalId, instead. |
class ForceMangle { |
public: |
explicit ForceMangle(unsigned long long raw_id) : raw_id_(raw_id) {} |
@@ -505,51 +538,47 @@ class TraceID { |
private: |
unsigned long long raw_id_; |
}; |
- TraceID(const void* raw_id, unsigned int* flags) |
- : raw_id_(static_cast<unsigned long long>( |
- reinterpret_cast<uintptr_t>(raw_id))) { |
- *flags |= TRACE_EVENT_FLAG_MANGLE_ID; |
- } |
- TraceID(ForceMangle raw_id, unsigned int* flags) : raw_id_(raw_id.raw_id()) { |
- *flags |= TRACE_EVENT_FLAG_MANGLE_ID; |
- } |
- TraceID(DontMangle maybe_scoped_id, unsigned int* flags) |
- : scope_(maybe_scoped_id.scope()), raw_id_(maybe_scoped_id.raw_id()) { |
- } |
- TraceID(unsigned long long raw_id, unsigned int* flags) : raw_id_(raw_id) { |
- (void)flags; |
- } |
- TraceID(unsigned long raw_id, unsigned int* flags) : raw_id_(raw_id) { |
- (void)flags; |
+ |
+ TraceID(const void* raw_id) : raw_id_(static_cast<unsigned long long>( |
+ reinterpret_cast<uintptr_t>(raw_id))) { |
+ id_flags_ = TRACE_EVENT_FLAG_HAS_ID | TRACE_EVENT_FLAG_MANGLE_ID; |
} |
- TraceID(unsigned int raw_id, unsigned int* flags) : raw_id_(raw_id) { |
- (void)flags; |
+ TraceID(ForceMangle raw_id) : raw_id_(raw_id.raw_id()) { |
+ id_flags_ = TRACE_EVENT_FLAG_HAS_ID | TRACE_EVENT_FLAG_MANGLE_ID; |
} |
- TraceID(unsigned short raw_id, unsigned int* flags) : raw_id_(raw_id) { |
- (void)flags; |
+ TraceID(DontMangle raw_id) : raw_id_(raw_id.raw_id()) {} |
+ TraceID(unsigned long long raw_id) : raw_id_(raw_id) {} |
+ TraceID(unsigned long raw_id) : raw_id_(raw_id) {} |
+ TraceID(unsigned int raw_id) : raw_id_(raw_id) {} |
+ TraceID(unsigned short raw_id) : raw_id_(raw_id) {} |
+ TraceID(unsigned char raw_id) : raw_id_(raw_id) {} |
+ TraceID(long long raw_id) |
+ : raw_id_(static_cast<unsigned long long>(raw_id)) {} |
+ TraceID(long raw_id) |
+ : raw_id_(static_cast<unsigned long long>(raw_id)) {} |
+ TraceID(int raw_id) |
+ : raw_id_(static_cast<unsigned long long>(raw_id)) {} |
+ TraceID(short raw_id) |
+ : raw_id_(static_cast<unsigned long long>(raw_id)) {} |
+ TraceID(signed char raw_id) |
+ : raw_id_(static_cast<unsigned long long>(raw_id)) {} |
+ TraceID(LocalId raw_id) : raw_id_(raw_id.raw_id()) { |
+ id_flags_ = TRACE_EVENT_FLAG_HAS_LOCAL_ID; |
} |
- TraceID(unsigned char raw_id, unsigned int* flags) : raw_id_(raw_id) { |
- (void)flags; |
+ TraceID(GlobalId raw_id) : raw_id_(raw_id.raw_id()) { |
+ id_flags_ = TRACE_EVENT_FLAG_HAS_GLOBAL_ID; |
} |
- TraceID(long long raw_id, unsigned int* flags) |
- : raw_id_(static_cast<unsigned long long>(raw_id)) { (void)flags; } |
- TraceID(long raw_id, unsigned int* flags) |
- : raw_id_(static_cast<unsigned long long>(raw_id)) { (void)flags; } |
- TraceID(int raw_id, unsigned int* flags) |
- : raw_id_(static_cast<unsigned long long>(raw_id)) { (void)flags; } |
- TraceID(short raw_id, unsigned int* flags) |
- : raw_id_(static_cast<unsigned long long>(raw_id)) { (void)flags; } |
- TraceID(signed char raw_id, unsigned int* flags) |
- : raw_id_(static_cast<unsigned long long>(raw_id)) { (void)flags; } |
- TraceID(WithScope scoped_id, unsigned int* flags) |
- : scope_(scoped_id.scope()), raw_id_(scoped_id.raw_id()) {} |
+ TraceID(WithScope scoped_id) : scope_(scoped_id.scope()), |
+ raw_id_(scoped_id.raw_id()), id_flags_(scoped_id.id_flags()) {} |
unsigned long long raw_id() const { return raw_id_; } |
const char* scope() const { return scope_; } |
+ unsigned int id_flags() const { return id_flags_; } |
private: |
const char* scope_ = nullptr; |
unsigned long long raw_id_; |
+ unsigned int id_flags_ = TRACE_EVENT_FLAG_HAS_ID; |
}; |
// Simple union to store various types as unsigned long long. |