| 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..2553806b0ee89b614a8b23f378e058b3e5dc10bc 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
|
| + 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
|
| + 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
|
| + 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
|
| + 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,
|
| + 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
|
| + static_cast<int>(base::PlatformThread::CurrentId()),
|
| + base::TraceTicks::Now(),
|
| + trace_event_internal::kZeroNumArgs,
|
| + nullptr,
|
| + nullptr,
|
| + nullptr,
|
| + nullptr,
|
| TRACE_EVENT_FLAG_NONE);
|
| }
|
| }
|
|
|