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 95cf06d5a576c061eda861c74f923de6c50b9eef..9ca0ddc3b6075bf78e7818a5ae2038742cb27e43 100644 |
--- a/base/trace_event/trace_event_impl.cc |
+++ b/base/trace_event/trace_event_impl.cc |
@@ -1908,11 +1908,13 @@ TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp( |
AutoThreadLocalBoolean thread_is_in_trace_event(&thread_is_in_trace_event_); |
DCHECK(name); |
+ DCHECK(!timestamp.is_null()); |
if (flags & TRACE_EVENT_FLAG_MANGLE_ID) |
id ^= process_id_hash_; |
- TimeTicks now = OffsetTimestamp(timestamp); |
+ TimeTicks offset_event_timestamp = OffsetTimestamp(timestamp); |
+ TimeTicks now = OffsetNow(); |
TimeTicks thread_now = ThreadNow(); |
ThreadLocalEventBuffer* thread_local_event_buffer = NULL; |
@@ -1985,8 +1987,8 @@ TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp( |
} |
if (trace_event) { |
- trace_event->Initialize(thread_id, now, thread_now, phase, |
- category_group_enabled, name, id, |
+ trace_event->Initialize(thread_id, offset_event_timestamp, thread_now, |
+ phase, category_group_enabled, name, id, |
num_args, arg_names, arg_types, arg_values, |
convertable_values, flags); |
@@ -2024,7 +2026,7 @@ TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp( |
EventCallback event_callback = reinterpret_cast<EventCallback>( |
subtle::NoBarrier_Load(&event_callback_)); |
if (event_callback) { |
- event_callback(now, |
+ event_callback(offset_event_timestamp, |
phase == TRACE_EVENT_PHASE_COMPLETE ? |
TRACE_EVENT_PHASE_BEGIN : phase, |
category_group_enabled, name, id, |
@@ -2033,6 +2035,9 @@ TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp( |
} |
} |
+ // Use |now| instead of |offset_event_timestamp| to compute overhead, because |
+ // event timestamp may be not the real time that we started to add the event |
+ // (e.g. event with zero timestamp or that was generated some time ago). |
if (thread_local_event_buffer) |
thread_local_event_buffer->ReportOverhead(now, thread_now); |