Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Unified Diff: base/trace_event/trace_event_impl.cc

Issue 1239593002: Implement a new flow event API that allows binding flow events and regular events. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add a flag for FLOW_OPTIONAL. Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/trace_event/trace_event_impl.cc
diff --git a/base/trace_event/trace_event_impl.cc b/base/trace_event/trace_event_impl.cc
index 6e1f276a2d566b41fb03cfa4126aba12d75cd3d0..148fabcf8fe0f5b068ca530fc3f3338c490a05b2 100644
--- a/base/trace_event/trace_event_impl.cc
+++ b/base/trace_event/trace_event_impl.cc
@@ -408,10 +408,21 @@ void InitializeMetadataEvent(TraceEvent* trace_event,
unsigned long long arg_value;
::trace_event_internal::SetTraceValue(value, &arg_type, &arg_value);
trace_event->Initialize(
- thread_id, TraceTicks(), ThreadTicks(), TRACE_EVENT_PHASE_METADATA,
- &g_category_group_enabled[g_category_metadata], metadata_name,
- trace_event_internal::kNoId, trace_event_internal::kNoId, num_args,
- &arg_name, &arg_type, &arg_value, NULL, TRACE_EVENT_FLAG_NONE);
+ thread_id,
+ TraceTicks(),
+ ThreadTicks(),
+ TRACE_EVENT_PHASE_METADATA,
+ &g_category_group_enabled[g_category_metadata],
+ metadata_name,
+ trace_event_internal::kNoId, // id
+ trace_event_internal::kNoId, // context_id
+ trace_event_internal::kNoId, // bind_id
+ num_args,
+ &arg_name,
+ &arg_type,
+ &arg_value,
+ nullptr,
+ TRACE_EVENT_FLAG_NONE);
}
class AutoThreadLocalBoolean {
@@ -592,6 +603,7 @@ void TraceEvent::Initialize(
const char* name,
unsigned long long id,
unsigned long long context_id,
+ unsigned long long bind_id,
int num_args,
const char** arg_names,
const unsigned char* arg_types,
@@ -608,6 +620,7 @@ void TraceEvent::Initialize(
thread_id_ = thread_id;
phase_ = phase;
flags_ = flags;
+ bind_id_ = bind_id;
// Clamp num_args since it may have been set by a third_party library.
num_args = (num_args > kTraceMaxNumArgs) ? kTraceMaxNumArgs : num_args;
@@ -849,6 +862,18 @@ void TraceEvent::AppendAsJSON(
if (flags_ & TRACE_EVENT_FLAG_BIND_TO_ENCLOSING)
StringAppendF(out, ",\"bp\":\"e\"");
+ if ((flags_ & TRACE_EVENT_FLAG_FLOW_OUT) ||
+ (flags_ & TRACE_EVENT_FLAG_FLOW_IN)) {
+ StringAppendF(out, ",\"bind_id\":\"0x%" PRIx64 "\"",
+ static_cast<uint64>(bind_id_));
+ }
+
+ if (flags_ & TRACE_EVENT_FLAG_FLOW_IN)
+ StringAppendF(out, ",\"flow_in\":true");
+
+ if (flags_ & TRACE_EVENT_FLAG_FLOW_OUT)
+ StringAppendF(out, ",\"flow_out\":true");
+
// Similar to id_, print the context_id as hex if present.
if (flags_ & TRACE_EVENT_FLAG_HAS_CONTEXT_ID)
StringAppendF(out, ",\"cid\":\"0x%" PRIx64 "\"",
@@ -1214,12 +1239,21 @@ void TraceLog::ThreadLocalEventBuffer::ReportOverhead(
TraceEvent* trace_event = AddTraceEvent(NULL);
if (trace_event) {
trace_event->Initialize(
- static_cast<int>(PlatformThread::CurrentId()), event_timestamp,
- event_thread_timestamp, TRACE_EVENT_PHASE_COMPLETE,
+ static_cast<int>(PlatformThread::CurrentId()),
+ event_timestamp,
+ event_thread_timestamp,
+ TRACE_EVENT_PHASE_COMPLETE,
&g_category_group_enabled[g_category_trace_event_overhead],
- "overhead", ::trace_event_internal::kNoId,
- ::trace_event_internal::kNoId, ::trace_event_internal::kZeroNumArgs,
- NULL, NULL, NULL, NULL, 0);
+ "overhead",
+ trace_event_internal::kNoId, // id
+ trace_event_internal::kNoId, // context_id
+ trace_event_internal::kNoId, // bind_id
beaudoin 2015/07/27 18:34:13 NIT: 2 spaces before EOL comment.
+ trace_event_internal::kZeroNumArgs,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ TRACE_EVENT_FLAG_NONE);
trace_event->UpdateDuration(now, thread_now);
}
}
@@ -2018,9 +2052,20 @@ TraceEventHandle TraceLog::AddTraceEvent(
int thread_id = static_cast<int>(base::PlatformThread::CurrentId());
base::TraceTicks now = base::TraceTicks::Now();
return AddTraceEventWithThreadIdAndTimestamp(
- phase, category_group_enabled, name, id, ::trace_event_internal::kNoId,
- thread_id, now, num_args, arg_names, arg_types, arg_values,
- convertable_values, flags);
+ phase,
+ category_group_enabled,
+ name,
+ id,
+ trace_event_internal::kNoId, // context_id
+ trace_event_internal::kNoId, // bind_id
beaudoin 2015/07/27 18:34:13 NIT: 2 spaces before EOL comment.
+ thread_id,
+ now,
+ num_args,
+ arg_names,
+ arg_types,
+ arg_values,
+ convertable_values,
+ flags);
}
TraceEventHandle TraceLog::AddTraceEventWithContextId(
@@ -2038,17 +2083,62 @@ TraceEventHandle TraceLog::AddTraceEventWithContextId(
int thread_id = static_cast<int>(base::PlatformThread::CurrentId());
base::TraceTicks now = base::TraceTicks::Now();
return AddTraceEventWithThreadIdAndTimestamp(
- phase, category_group_enabled, name, id, context_id, thread_id, now,
- num_args, arg_names, arg_types, arg_values, convertable_values,
+ phase,
+ category_group_enabled,
+ name,
+ id,
+ context_id,
+ trace_event_internal::kNoId, // bind_id
beaudoin 2015/07/27 18:34:14 NIT: 2 spaces before EOL comment.
+ thread_id,
+ now,
+ num_args,
+ arg_names,
+ arg_types,
+ arg_values,
+ convertable_values,
flags | TRACE_EVENT_FLAG_HAS_CONTEXT_ID);
}
+// Handle legacy calls to AddTraceEventWithThreadIdAndTimestamp
+// with kNoId as bind_id
+TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp(
+ char phase,
+ const unsigned char* category_group_enabled,
+ const char* name,
+ unsigned long long id,
+ unsigned long long context_id,
+ int thread_id,
+ const TraceTicks& timestamp,
+ int num_args,
+ const char** arg_names,
+ const unsigned char* arg_types,
+ const unsigned long long* arg_values,
+ const scoped_refptr<ConvertableToTraceFormat>* convertable_values,
+ unsigned int flags) {
+ return AddTraceEventWithThreadIdAndTimestamp(
+ phase,
+ category_group_enabled,
+ name,
+ id,
+ context_id,
+ trace_event_internal::kNoId, // bind_id
beaudoin 2015/07/27 18:34:13 NIT: 2 spaces before EOL comment.
+ thread_id,
+ timestamp,
+ num_args,
+ arg_names,
+ arg_types,
+ arg_values,
+ convertable_values,
+ flags);
+}
+
TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp(
char phase,
const unsigned char* category_group_enabled,
const char* name,
unsigned long long id,
unsigned long long context_id,
+ unsigned long long bind_id,
int thread_id,
const TraceTicks& timestamp,
int num_args,
@@ -2072,8 +2162,12 @@ TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp(
DCHECK(name);
DCHECK(!timestamp.is_null());
- if (flags & TRACE_EVENT_FLAG_MANGLE_ID)
+ if (flags & TRACE_EVENT_FLAG_MANGLE_ID) {
+ if ((flags & TRACE_EVENT_FLAG_FLOW_IN) ||
+ (flags & TRACE_EVENT_FLAG_FLOW_OUT))
+ bind_id = MangleEventId(bind_id);
id = MangleEventId(id);
+ }
TraceTicks offset_event_timestamp = OffsetTimestamp(timestamp);
TraceTicks now = flags & TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP ?
@@ -2147,10 +2241,21 @@ TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp(
}
if (trace_event) {
- trace_event->Initialize(thread_id, offset_event_timestamp, thread_now,
- phase, category_group_enabled, name, id,
- context_id, num_args, arg_names, arg_types,
- arg_values, convertable_values, flags);
+ trace_event->Initialize(thread_id,
+ offset_event_timestamp,
+ thread_now,
+ phase,
+ category_group_enabled,
+ name,
+ id,
+ context_id,
+ bind_id,
+ num_args,
+ arg_names,
+ arg_types,
+ arg_values,
+ convertable_values,
+ flags);
#if defined(OS_ANDROID)
trace_event->SendToATrace();
@@ -2313,9 +2418,16 @@ void TraceLog::UpdateTraceEventDuration(
EventCallback event_callback = reinterpret_cast<EventCallback>(
subtle::NoBarrier_Load(&event_callback_));
if (event_callback) {
- event_callback(now, TRACE_EVENT_PHASE_END, category_group_enabled, name,
- trace_event_internal::kNoId, trace_event_internal::kNoId,
- NULL, NULL, NULL, TRACE_EVENT_FLAG_NONE);
+ event_callback(now,
+ TRACE_EVENT_PHASE_END,
+ category_group_enabled,
+ name,
+ trace_event_internal::kNoId,
+ trace_event_internal::kNoId,
beaudoin 2015/07/27 18:34:13 EOL comments?
beaudoin 2015/07/29 18:55:43 Not done?
yuhaoz 2015/07/29 19:09:39 Done. Following the format of the code at line 229
+ NULL,
+ NULL,
+ NULL,
+ TRACE_EVENT_FLAG_NONE);
}
}
}
@@ -2538,9 +2650,18 @@ ScopedTraceBinaryEfficient::ScopedTraceBinaryEfficient(
if (*category_group_enabled_) {
event_handle_ =
TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_THREAD_ID_AND_TIMESTAMP(
- TRACE_EVENT_PHASE_COMPLETE, category_group_enabled_, name, kNoId,
- kNoId, static_cast<int>(base::PlatformThread::CurrentId()),
- base::TraceTicks::Now(), 0, NULL, NULL, NULL, NULL,
+ TRACE_EVENT_PHASE_COMPLETE,
+ category_group_enabled_,
+ name,
+ trace_event_internal::kNoId, // id
+ trace_event_internal::kNoId, // context_id
beaudoin 2015/07/27 18:34:13 NIT: 2 spaces before EOL comment.
+ static_cast<int>(base::PlatformThread::CurrentId()),
+ base::TraceTicks::Now(),
+ trace_event_internal::kZeroNumArgs,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
TRACE_EVENT_FLAG_NONE);
}
}

Powered by Google App Engine
This is Rietveld 408576698