Commit 824aa1f1 authored by chiniforooshan's avatar chiniforooshan Committed by Commit bot

Binds two IDs together.

This macro provides a mechanism to tell trace consumers
that two different IDs are actually identical and they
refer to the same thing.

For more context:
https://docs.google.com/a/google.com/document/d/1s0DKjNJk85hDuRp5IqujwZvPML-MPsyAtDeksMwBw7s/edit?usp=sharing

BUG=catapult:#2465

Review-Url: https://codereview.chromium.org/2142023003
Cr-Commit-Position: refs/heads/master@{#406648}
parent f33ceec4
...@@ -1001,6 +1001,17 @@ ...@@ -1001,6 +1001,17 @@
INTERNAL_TRACE_EVENT_SCOPED_CONTEXT(category_group, name, \ INTERNAL_TRACE_EVENT_SCOPED_CONTEXT(category_group, name, \
TRACE_ID_DONT_MANGLE(context)) TRACE_ID_DONT_MANGLE(context))
// Macro to specify that two trace IDs are identical. For example,
// TRACE_BIND_IDS(
// "category", "name",
// TRACE_ID_WITH_SCOPE("net::URLRequest", 0x1000),
// TRACE_ID_WITH_SCOPE("blink::ResourceFetcher::FetchRequest", 0x2000))
// tells the trace consumer that events with ID ("net::URLRequest", 0x1000) from
// the current process have the same ID as events with ID
// ("blink::ResourceFetcher::FetchRequest", 0x2000).
#define TRACE_BIND_IDS(category_group, name, id, bind_id) \
INTERNAL_TRACE_EVENT_ADD_BIND_IDS(category_group, name, id, bind_id);
// Macro to efficiently determine if a given category group is enabled. // Macro to efficiently determine if a given category group is enabled.
#define TRACE_EVENT_CATEGORY_GROUP_ENABLED(category_group, ret) \ #define TRACE_EVENT_CATEGORY_GROUP_ENABLED(category_group, ret) \
do { \ do { \
...@@ -1066,6 +1077,7 @@ ...@@ -1066,6 +1077,7 @@
#define TRACE_EVENT_PHASE_CLOCK_SYNC ('c') #define TRACE_EVENT_PHASE_CLOCK_SYNC ('c')
#define TRACE_EVENT_PHASE_ENTER_CONTEXT ('(') #define TRACE_EVENT_PHASE_ENTER_CONTEXT ('(')
#define TRACE_EVENT_PHASE_LEAVE_CONTEXT (')') #define TRACE_EVENT_PHASE_LEAVE_CONTEXT (')')
#define TRACE_EVENT_PHASE_BIND_IDS ('=')
// Flags for changing the behavior of TRACE_EVENT_API_ADD_TRACE_EVENT. // Flags for changing the behavior of TRACE_EVENT_API_ADD_TRACE_EVENT.
#define TRACE_EVENT_FLAG_NONE (static_cast<unsigned int>(0)) #define TRACE_EVENT_FLAG_NONE (static_cast<unsigned int>(0))
......
...@@ -349,6 +349,31 @@ TRACE_EVENT_API_CLASS_EXPORT extern \ ...@@ -349,6 +349,31 @@ TRACE_EVENT_API_CLASS_EXPORT extern \
} \ } \
} while (0) } while (0)
// The trace ID and bind ID will never be mangled by this macro.
#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); \
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__); \
} 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(), \
"bind_scope", target_id.scope(), ##__VA_ARGS__); \
} \
} \
} while (0)
// Implementation detail: internal macro to create static category and add // Implementation detail: internal macro to create static category and add
// metadata event if the category is enabled. // metadata event if the category is enabled.
#define INTERNAL_TRACE_EVENT_METADATA_ADD(category_group, name, ...) \ #define INTERNAL_TRACE_EVENT_METADATA_ADD(category_group, name, ...) \
......
...@@ -368,7 +368,8 @@ void TraceEvent::AppendAsJSON( ...@@ -368,7 +368,8 @@ void TraceEvent::AppendAsJSON(
StringAppendF(out, ",\"bp\":\"e\""); StringAppendF(out, ",\"bp\":\"e\"");
if ((flags_ & TRACE_EVENT_FLAG_FLOW_OUT) || if ((flags_ & TRACE_EVENT_FLAG_FLOW_OUT) ||
(flags_ & TRACE_EVENT_FLAG_FLOW_IN)) { (flags_ & TRACE_EVENT_FLAG_FLOW_IN) ||
phase_ == TRACE_EVENT_PHASE_BIND_IDS) {
StringAppendF(out, ",\"bind_id\":\"0x%" PRIx64 "\"", StringAppendF(out, ",\"bind_id\":\"0x%" PRIx64 "\"",
static_cast<uint64_t>(bind_id_)); static_cast<uint64_t>(bind_id_));
} }
......
...@@ -517,6 +517,11 @@ void TraceWithAllMacroVariants(WaitableEvent* task_complete_event) { ...@@ -517,6 +517,11 @@ void TraceWithAllMacroVariants(WaitableEvent* task_complete_event) {
context_id); context_id);
TRACE_EVENT_SCOPED_CONTEXT("all", "TRACE_EVENT_SCOPED_CONTEXT call", TRACE_EVENT_SCOPED_CONTEXT("all", "TRACE_EVENT_SCOPED_CONTEXT call",
context_id); context_id);
TRACE_BIND_IDS("all", "TRACE_BIND_IDS simple call", 0x1000, 0x2000);
TRACE_BIND_IDS("all", "TRACE_BIND_IDS scoped call",
TRACE_ID_WITH_SCOPE("scope 1", 0x1000),
TRACE_ID_WITH_SCOPE("scope 2", 0x2000));
} // Scope close causes TRACE_EVENT0 etc to send their END events. } // Scope close causes TRACE_EVENT0 etc to send their END events.
if (task_complete_event) if (task_complete_event)
...@@ -957,6 +962,45 @@ void ValidateAllTraceMacrosCreatedData(const ListValue& trace_parsed) { ...@@ -957,6 +962,45 @@ void ValidateAllTraceMacrosCreatedData(const ListValue& trace_parsed) {
EXPECT_TRUE((item && item->GetString("id", &id))); EXPECT_TRUE((item && item->GetString("id", &id)));
EXPECT_EQ("0x20151021", id); EXPECT_EQ("0x20151021", id);
} }
EXPECT_FIND_("TRACE_BIND_IDS simple call");
{
std::string ph;
EXPECT_TRUE((item && item->GetString("ph", &ph)));
EXPECT_EQ("=", ph);
EXPECT_FALSE((item && item->HasKey("scope")));
std::string id;
EXPECT_TRUE((item && item->GetString("id", &id)));
EXPECT_EQ("0x1000", id);
EXPECT_FALSE((item && item->HasKey("args.bind_scope")));
std::string bind_id;
EXPECT_TRUE((item && item->GetString("bind_id", &id)));
EXPECT_EQ("0x2000", id);
}
EXPECT_FIND_("TRACE_BIND_IDS scoped call");
{
std::string ph;
EXPECT_TRUE((item && item->GetString("ph", &ph)));
EXPECT_EQ("=", ph);
std::string id_scope;
EXPECT_TRUE((item && item->GetString("scope", &id_scope)));
EXPECT_EQ("scope 1", id_scope);
std::string id;
EXPECT_TRUE((item && item->GetString("id", &id)));
EXPECT_EQ("0x1000", id);
std::string bind_scope;
EXPECT_TRUE((item && item->GetString("args.bind_scope", &bind_scope)));
EXPECT_EQ("scope 2", bind_scope);
std::string bind_id;
EXPECT_TRUE((item && item->GetString("bind_id", &id)));
EXPECT_EQ("0x2000", id);
}
} }
void TraceManyInstantEvents(int thread_id, int num_events, void TraceManyInstantEvents(int thread_id, int num_events,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment