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

Side by Side Diff: base/trace_event/trace_event_impl.cc

Issue 1121463005: Fixit: Split base::TimeTicks --> TimeTicks + ThreadTicks + TraceTicks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More Windows compile fixes. Created 5 years, 7 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 unified diff | Download patch
« no previous file with comments | « base/trace_event/trace_event_impl.h ('k') | base/trace_event/trace_event_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/trace_event/trace_event_impl.h" 5 #include "base/trace_event/trace_event_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/base_switches.h" 10 #include "base/base_switches.h"
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 const int g_num_builtin_categories = 5; 117 const int g_num_builtin_categories = 5;
118 // Skip default categories. 118 // Skip default categories.
119 base::subtle::AtomicWord g_category_index = g_num_builtin_categories; 119 base::subtle::AtomicWord g_category_index = g_num_builtin_categories;
120 120
121 // The name of the current thread. This is used to decide if the current 121 // The name of the current thread. This is used to decide if the current
122 // thread name has changed. We combine all the seen thread names into the 122 // thread name has changed. We combine all the seen thread names into the
123 // output name for the thread. 123 // output name for the thread.
124 LazyInstance<ThreadLocalPointer<const char> >::Leaky 124 LazyInstance<ThreadLocalPointer<const char> >::Leaky
125 g_current_thread_name = LAZY_INSTANCE_INITIALIZER; 125 g_current_thread_name = LAZY_INSTANCE_INITIALIZER;
126 126
127 TimeTicks ThreadNow() { 127 ThreadTicks ThreadNow() {
128 return TimeTicks::IsThreadNowSupported() ? 128 return ThreadTicks::IsSupported() ? ThreadTicks::Now() : ThreadTicks();
129 TimeTicks::ThreadNow() : TimeTicks();
130 } 129 }
131 130
132 class TraceBufferRingBuffer : public TraceBuffer { 131 class TraceBufferRingBuffer : public TraceBuffer {
133 public: 132 public:
134 TraceBufferRingBuffer(size_t max_chunks) 133 TraceBufferRingBuffer(size_t max_chunks)
135 : max_chunks_(max_chunks), 134 : max_chunks_(max_chunks),
136 recyclable_chunks_queue_(new size_t[queue_capacity()]), 135 recyclable_chunks_queue_(new size_t[queue_capacity()]),
137 queue_head_(0), 136 queue_head_(0),
138 queue_tail_(max_chunks), 137 queue_tail_(max_chunks),
139 current_iteration_index_(0), 138 current_iteration_index_(0),
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 const char* metadata_name, const char* arg_name, 375 const char* metadata_name, const char* arg_name,
377 const T& value) { 376 const T& value) {
378 if (!trace_event) 377 if (!trace_event)
379 return; 378 return;
380 379
381 int num_args = 1; 380 int num_args = 1;
382 unsigned char arg_type; 381 unsigned char arg_type;
383 unsigned long long arg_value; 382 unsigned long long arg_value;
384 ::trace_event_internal::SetTraceValue(value, &arg_type, &arg_value); 383 ::trace_event_internal::SetTraceValue(value, &arg_type, &arg_value);
385 trace_event->Initialize(thread_id, 384 trace_event->Initialize(thread_id,
386 TimeTicks(), TimeTicks(), TRACE_EVENT_PHASE_METADATA, 385 TraceTicks(), ThreadTicks(),
386 TRACE_EVENT_PHASE_METADATA,
387 &g_category_group_enabled[g_category_metadata], 387 &g_category_group_enabled[g_category_metadata],
388 metadata_name, ::trace_event_internal::kNoEventId, 388 metadata_name, ::trace_event_internal::kNoEventId,
389 num_args, &arg_name, &arg_type, &arg_value, NULL, 389 num_args, &arg_name, &arg_type, &arg_value, NULL,
390 TRACE_EVENT_FLAG_NONE); 390 TRACE_EVENT_FLAG_NONE);
391 } 391 }
392 392
393 class AutoThreadLocalBoolean { 393 class AutoThreadLocalBoolean {
394 public: 394 public:
395 explicit AutoThreadLocalBoolean(ThreadLocalBoolean* thread_local_boolean) 395 explicit AutoThreadLocalBoolean(ThreadLocalBoolean* thread_local_boolean)
396 : thread_local_boolean_(thread_local_boolean) { 396 : thread_local_boolean_(thread_local_boolean) {
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 for (int i = 0; i < kTraceMaxNumArgs; ++i) { 521 for (int i = 0; i < kTraceMaxNumArgs; ++i) {
522 arg_names_[i] = other.arg_names_[i]; 522 arg_names_[i] = other.arg_names_[i];
523 arg_types_[i] = other.arg_types_[i]; 523 arg_types_[i] = other.arg_types_[i];
524 arg_values_[i] = other.arg_values_[i]; 524 arg_values_[i] = other.arg_values_[i];
525 convertable_values_[i] = other.convertable_values_[i]; 525 convertable_values_[i] = other.convertable_values_[i];
526 } 526 }
527 } 527 }
528 528
529 void TraceEvent::Initialize( 529 void TraceEvent::Initialize(
530 int thread_id, 530 int thread_id,
531 TimeTicks timestamp, 531 TraceTicks timestamp,
532 TimeTicks thread_timestamp, 532 ThreadTicks thread_timestamp,
533 char phase, 533 char phase,
534 const unsigned char* category_group_enabled, 534 const unsigned char* category_group_enabled,
535 const char* name, 535 const char* name,
536 unsigned long long id, 536 unsigned long long id,
537 int num_args, 537 int num_args,
538 const char** arg_names, 538 const char** arg_names,
539 const unsigned char* arg_types, 539 const unsigned char* arg_types,
540 const unsigned long long* arg_values, 540 const unsigned long long* arg_values,
541 const scoped_refptr<ConvertableToTraceFormat>* convertable_values, 541 const scoped_refptr<ConvertableToTraceFormat>* convertable_values,
542 unsigned char flags) { 542 unsigned char flags) {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 615
616 void TraceEvent::Reset() { 616 void TraceEvent::Reset() {
617 // Only reset fields that won't be initialized in Initialize(), or that may 617 // Only reset fields that won't be initialized in Initialize(), or that may
618 // hold references to other objects. 618 // hold references to other objects.
619 duration_ = TimeDelta::FromInternalValue(-1); 619 duration_ = TimeDelta::FromInternalValue(-1);
620 parameter_copy_storage_ = NULL; 620 parameter_copy_storage_ = NULL;
621 for (int i = 0; i < kTraceMaxNumArgs; ++i) 621 for (int i = 0; i < kTraceMaxNumArgs; ++i)
622 convertable_values_[i] = NULL; 622 convertable_values_[i] = NULL;
623 } 623 }
624 624
625 void TraceEvent::UpdateDuration(const TimeTicks& now, 625 void TraceEvent::UpdateDuration(const TraceTicks& now,
626 const TimeTicks& thread_now) { 626 const ThreadTicks& thread_now) {
627 DCHECK_EQ(duration_.ToInternalValue(), -1); 627 DCHECK_EQ(duration_.ToInternalValue(), -1);
628 duration_ = now - timestamp_; 628 duration_ = now - timestamp_;
629 thread_duration_ = thread_now - thread_timestamp_; 629 thread_duration_ = thread_now - thread_timestamp_;
630 } 630 }
631 631
632 // static 632 // static
633 void TraceEvent::AppendValueAsJSON(unsigned char type, 633 void TraceEvent::AppendValueAsJSON(unsigned char type,
634 TraceEvent::TraceValue value, 634 TraceEvent::TraceValue value,
635 std::string* out) { 635 std::string* out) {
636 switch (type) { 636 switch (type) {
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
1037 //////////////////////////////////////////////////////////////////////////////// 1037 ////////////////////////////////////////////////////////////////////////////////
1038 1038
1039 class TraceLog::ThreadLocalEventBuffer 1039 class TraceLog::ThreadLocalEventBuffer
1040 : public MessageLoop::DestructionObserver { 1040 : public MessageLoop::DestructionObserver {
1041 public: 1041 public:
1042 ThreadLocalEventBuffer(TraceLog* trace_log); 1042 ThreadLocalEventBuffer(TraceLog* trace_log);
1043 ~ThreadLocalEventBuffer() override; 1043 ~ThreadLocalEventBuffer() override;
1044 1044
1045 TraceEvent* AddTraceEvent(TraceEventHandle* handle); 1045 TraceEvent* AddTraceEvent(TraceEventHandle* handle);
1046 1046
1047 void ReportOverhead(const TimeTicks& event_timestamp, 1047 void ReportOverhead(const TraceTicks& event_timestamp,
1048 const TimeTicks& event_thread_timestamp); 1048 const ThreadTicks& event_thread_timestamp);
1049 1049
1050 TraceEvent* GetEventByHandle(TraceEventHandle handle) { 1050 TraceEvent* GetEventByHandle(TraceEventHandle handle) {
1051 if (!chunk_ || handle.chunk_seq != chunk_->seq() || 1051 if (!chunk_ || handle.chunk_seq != chunk_->seq() ||
1052 handle.chunk_index != chunk_index_) 1052 handle.chunk_index != chunk_index_)
1053 return NULL; 1053 return NULL;
1054 1054
1055 return chunk_->GetEventAt(handle.event_index); 1055 return chunk_->GetEventAt(handle.event_index);
1056 } 1056 }
1057 1057
1058 int generation() const { return generation_; } 1058 int generation() const { return generation_; }
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1135 1135
1136 size_t event_index; 1136 size_t event_index;
1137 TraceEvent* trace_event = chunk_->AddTraceEvent(&event_index); 1137 TraceEvent* trace_event = chunk_->AddTraceEvent(&event_index);
1138 if (trace_event && handle) 1138 if (trace_event && handle)
1139 MakeHandle(chunk_->seq(), chunk_index_, event_index, handle); 1139 MakeHandle(chunk_->seq(), chunk_index_, event_index, handle);
1140 1140
1141 return trace_event; 1141 return trace_event;
1142 } 1142 }
1143 1143
1144 void TraceLog::ThreadLocalEventBuffer::ReportOverhead( 1144 void TraceLog::ThreadLocalEventBuffer::ReportOverhead(
1145 const TimeTicks& event_timestamp, 1145 const TraceTicks& event_timestamp,
1146 const TimeTicks& event_thread_timestamp) { 1146 const ThreadTicks& event_thread_timestamp) {
1147 if (!g_category_group_enabled[g_category_trace_event_overhead]) 1147 if (!g_category_group_enabled[g_category_trace_event_overhead])
1148 return; 1148 return;
1149 1149
1150 CheckThisIsCurrentBuffer(); 1150 CheckThisIsCurrentBuffer();
1151 1151
1152 event_count_++; 1152 event_count_++;
1153 TimeTicks thread_now = ThreadNow(); 1153 ThreadTicks thread_now = ThreadNow();
1154 TimeTicks now = trace_log_->OffsetNow(); 1154 TraceTicks now = trace_log_->OffsetNow();
1155 TimeDelta overhead = now - event_timestamp; 1155 TimeDelta overhead = now - event_timestamp;
1156 if (overhead.InMicroseconds() >= kOverheadReportThresholdInMicroseconds) { 1156 if (overhead.InMicroseconds() >= kOverheadReportThresholdInMicroseconds) {
1157 TraceEvent* trace_event = AddTraceEvent(NULL); 1157 TraceEvent* trace_event = AddTraceEvent(NULL);
1158 if (trace_event) { 1158 if (trace_event) {
1159 trace_event->Initialize( 1159 trace_event->Initialize(
1160 static_cast<int>(PlatformThread::CurrentId()), 1160 static_cast<int>(PlatformThread::CurrentId()),
1161 event_timestamp, event_thread_timestamp, 1161 event_timestamp, event_thread_timestamp,
1162 TRACE_EVENT_PHASE_COMPLETE, 1162 TRACE_EVENT_PHASE_COMPLETE,
1163 &g_category_group_enabled[g_category_trace_event_overhead], 1163 &g_category_group_enabled[g_category_trace_event_overhead],
1164 "overhead", 0, 0, NULL, NULL, NULL, NULL, 0); 1164 "overhead", 0, 0, NULL, NULL, NULL, NULL, 0);
(...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after
1885 const unsigned char* category_group_enabled, 1885 const unsigned char* category_group_enabled,
1886 const char* name, 1886 const char* name,
1887 unsigned long long id, 1887 unsigned long long id,
1888 int num_args, 1888 int num_args,
1889 const char** arg_names, 1889 const char** arg_names,
1890 const unsigned char* arg_types, 1890 const unsigned char* arg_types,
1891 const unsigned long long* arg_values, 1891 const unsigned long long* arg_values,
1892 const scoped_refptr<ConvertableToTraceFormat>* convertable_values, 1892 const scoped_refptr<ConvertableToTraceFormat>* convertable_values,
1893 unsigned char flags) { 1893 unsigned char flags) {
1894 int thread_id = static_cast<int>(base::PlatformThread::CurrentId()); 1894 int thread_id = static_cast<int>(base::PlatformThread::CurrentId());
1895 base::TimeTicks now = base::TimeTicks::NowFromSystemTraceTime(); 1895 base::TraceTicks now = base::TraceTicks::Now();
1896 return AddTraceEventWithThreadIdAndTimestamp(phase, category_group_enabled, 1896 return AddTraceEventWithThreadIdAndTimestamp(phase, category_group_enabled,
1897 name, id, thread_id, now, 1897 name, id, thread_id, now,
1898 num_args, arg_names, 1898 num_args, arg_names,
1899 arg_types, arg_values, 1899 arg_types, arg_values,
1900 convertable_values, flags); 1900 convertable_values, flags);
1901 } 1901 }
1902 1902
1903 TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp( 1903 TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp(
1904 char phase, 1904 char phase,
1905 const unsigned char* category_group_enabled, 1905 const unsigned char* category_group_enabled,
1906 const char* name, 1906 const char* name,
1907 unsigned long long id, 1907 unsigned long long id,
1908 int thread_id, 1908 int thread_id,
1909 const TimeTicks& timestamp, 1909 const TraceTicks& timestamp,
1910 int num_args, 1910 int num_args,
1911 const char** arg_names, 1911 const char** arg_names,
1912 const unsigned char* arg_types, 1912 const unsigned char* arg_types,
1913 const unsigned long long* arg_values, 1913 const unsigned long long* arg_values,
1914 const scoped_refptr<ConvertableToTraceFormat>* convertable_values, 1914 const scoped_refptr<ConvertableToTraceFormat>* convertable_values,
1915 unsigned char flags) { 1915 unsigned char flags) {
1916 TraceEventHandle handle = { 0, 0, 0 }; 1916 TraceEventHandle handle = { 0, 0, 0 };
1917 if (!*category_group_enabled) 1917 if (!*category_group_enabled)
1918 return handle; 1918 return handle;
1919 1919
1920 // Avoid re-entrance of AddTraceEvent. This may happen in GPU process when 1920 // Avoid re-entrance of AddTraceEvent. This may happen in GPU process when
1921 // ECHO_TO_CONSOLE is enabled: AddTraceEvent -> LOG(ERROR) -> 1921 // ECHO_TO_CONSOLE is enabled: AddTraceEvent -> LOG(ERROR) ->
1922 // GpuProcessLogMessageHandler -> PostPendingTask -> TRACE_EVENT ... 1922 // GpuProcessLogMessageHandler -> PostPendingTask -> TRACE_EVENT ...
1923 if (thread_is_in_trace_event_.Get()) 1923 if (thread_is_in_trace_event_.Get())
1924 return handle; 1924 return handle;
1925 1925
1926 AutoThreadLocalBoolean thread_is_in_trace_event(&thread_is_in_trace_event_); 1926 AutoThreadLocalBoolean thread_is_in_trace_event(&thread_is_in_trace_event_);
1927 1927
1928 DCHECK(name); 1928 DCHECK(name);
1929 DCHECK(!timestamp.is_null()); 1929 DCHECK(!timestamp.is_null());
1930 1930
1931 if (flags & TRACE_EVENT_FLAG_MANGLE_ID) 1931 if (flags & TRACE_EVENT_FLAG_MANGLE_ID)
1932 id = MangleEventId(id); 1932 id = MangleEventId(id);
1933 1933
1934 TimeTicks offset_event_timestamp = OffsetTimestamp(timestamp); 1934 TraceTicks offset_event_timestamp = OffsetTimestamp(timestamp);
1935 TimeTicks now = flags & TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP ? 1935 TraceTicks now = flags & TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP ?
1936 OffsetNow() : offset_event_timestamp; 1936 OffsetNow() : offset_event_timestamp;
1937 TimeTicks thread_now = ThreadNow(); 1937 ThreadTicks thread_now = ThreadNow();
1938 1938
1939 ThreadLocalEventBuffer* thread_local_event_buffer = NULL; 1939 ThreadLocalEventBuffer* thread_local_event_buffer = NULL;
1940 // A ThreadLocalEventBuffer needs the message loop 1940 // A ThreadLocalEventBuffer needs the message loop
1941 // - to know when the thread exits; 1941 // - to know when the thread exits;
1942 // - to handle the final flush. 1942 // - to handle the final flush.
1943 // For a thread without a message loop or the message loop may be blocked, the 1943 // For a thread without a message loop or the message loop may be blocked, the
1944 // trace events will be added into the main buffer directly. 1944 // trace events will be added into the main buffer directly.
1945 if (!thread_blocks_message_loop_.Get() && MessageLoop::current()) { 1945 if (!thread_blocks_message_loop_.Get() && MessageLoop::current()) {
1946 thread_local_event_buffer = thread_local_event_buffer_.Get(); 1946 thread_local_event_buffer = thread_local_event_buffer_.Get();
1947 if (thread_local_event_buffer && 1947 if (thread_local_event_buffer &&
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
2065 2065
2066 if (thread_local_event_buffer) 2066 if (thread_local_event_buffer)
2067 thread_local_event_buffer->ReportOverhead(now, thread_now); 2067 thread_local_event_buffer->ReportOverhead(now, thread_now);
2068 2068
2069 return handle; 2069 return handle;
2070 } 2070 }
2071 2071
2072 // May be called when a COMPELETE event ends and the unfinished event has been 2072 // May be called when a COMPELETE event ends and the unfinished event has been
2073 // recycled (phase == TRACE_EVENT_PHASE_END and trace_event == NULL). 2073 // recycled (phase == TRACE_EVENT_PHASE_END and trace_event == NULL).
2074 std::string TraceLog::EventToConsoleMessage(unsigned char phase, 2074 std::string TraceLog::EventToConsoleMessage(unsigned char phase,
2075 const TimeTicks& timestamp, 2075 const TraceTicks& timestamp,
2076 TraceEvent* trace_event) { 2076 TraceEvent* trace_event) {
2077 AutoLock thread_info_lock(thread_info_lock_); 2077 AutoLock thread_info_lock(thread_info_lock_);
2078 2078
2079 // The caller should translate TRACE_EVENT_PHASE_COMPLETE to 2079 // The caller should translate TRACE_EVENT_PHASE_COMPLETE to
2080 // TRACE_EVENT_PHASE_BEGIN or TRACE_EVENT_END. 2080 // TRACE_EVENT_PHASE_BEGIN or TRACE_EVENT_END.
2081 DCHECK(phase != TRACE_EVENT_PHASE_COMPLETE); 2081 DCHECK(phase != TRACE_EVENT_PHASE_COMPLETE);
2082 2082
2083 TimeDelta duration; 2083 TimeDelta duration;
2084 int thread_id = trace_event ? 2084 int thread_id = trace_event ?
2085 trace_event->thread_id() : PlatformThread::CurrentId(); 2085 trace_event->thread_id() : PlatformThread::CurrentId();
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
2145 const char* name, 2145 const char* name,
2146 TraceEventHandle handle) { 2146 TraceEventHandle handle) {
2147 // Avoid re-entrance of AddTraceEvent. This may happen in GPU process when 2147 // Avoid re-entrance of AddTraceEvent. This may happen in GPU process when
2148 // ECHO_TO_CONSOLE is enabled: AddTraceEvent -> LOG(ERROR) -> 2148 // ECHO_TO_CONSOLE is enabled: AddTraceEvent -> LOG(ERROR) ->
2149 // GpuProcessLogMessageHandler -> PostPendingTask -> TRACE_EVENT ... 2149 // GpuProcessLogMessageHandler -> PostPendingTask -> TRACE_EVENT ...
2150 if (thread_is_in_trace_event_.Get()) 2150 if (thread_is_in_trace_event_.Get())
2151 return; 2151 return;
2152 2152
2153 AutoThreadLocalBoolean thread_is_in_trace_event(&thread_is_in_trace_event_); 2153 AutoThreadLocalBoolean thread_is_in_trace_event(&thread_is_in_trace_event_);
2154 2154
2155 TimeTicks thread_now = ThreadNow(); 2155 ThreadTicks thread_now = ThreadNow();
2156 TimeTicks now = OffsetNow(); 2156 TraceTicks now = OffsetNow();
2157 2157
2158 std::string console_message; 2158 std::string console_message;
2159 if (*category_group_enabled & ENABLED_FOR_RECORDING) { 2159 if (*category_group_enabled & ENABLED_FOR_RECORDING) {
2160 OptionalAutoLock lock(&lock_); 2160 OptionalAutoLock lock(&lock_);
2161 2161
2162 TraceEvent* trace_event = GetEventByHandleInternal(handle, &lock); 2162 TraceEvent* trace_event = GetEventByHandleInternal(handle, &lock);
2163 if (trace_event) { 2163 if (trace_event) {
2164 DCHECK(trace_event->phase() == TRACE_EVENT_PHASE_COMPLETE); 2164 DCHECK(trace_event->phase() == TRACE_EVENT_PHASE_COMPLETE);
2165 trace_event->UpdateDuration(now, thread_now); 2165 trace_event->UpdateDuration(now, thread_now);
2166 #if defined(OS_ANDROID) 2166 #if defined(OS_ANDROID)
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after
2623 static TRACE_EVENT_API_ATOMIC_WORD atomic = 0; 2623 static TRACE_EVENT_API_ATOMIC_WORD atomic = 0;
2624 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO_CUSTOM_VARIABLES( 2624 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO_CUSTOM_VARIABLES(
2625 category_group, atomic, category_group_enabled_); 2625 category_group, atomic, category_group_enabled_);
2626 name_ = name; 2626 name_ = name;
2627 if (*category_group_enabled_) { 2627 if (*category_group_enabled_) {
2628 event_handle_ = 2628 event_handle_ =
2629 TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_THREAD_ID_AND_TIMESTAMP( 2629 TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_THREAD_ID_AND_TIMESTAMP(
2630 TRACE_EVENT_PHASE_COMPLETE, category_group_enabled_, name, 2630 TRACE_EVENT_PHASE_COMPLETE, category_group_enabled_, name,
2631 trace_event_internal::kNoEventId, 2631 trace_event_internal::kNoEventId,
2632 static_cast<int>(base::PlatformThread::CurrentId()), 2632 static_cast<int>(base::PlatformThread::CurrentId()),
2633 base::TimeTicks::NowFromSystemTraceTime(), 2633 base::TraceTicks::Now(), 0, NULL, NULL, NULL, NULL,
2634 0, NULL, NULL, NULL, NULL, TRACE_EVENT_FLAG_NONE); 2634 TRACE_EVENT_FLAG_NONE);
2635 } 2635 }
2636 } 2636 }
2637 2637
2638 ScopedTraceBinaryEfficient::~ScopedTraceBinaryEfficient() { 2638 ScopedTraceBinaryEfficient::~ScopedTraceBinaryEfficient() {
2639 if (*category_group_enabled_) { 2639 if (*category_group_enabled_) {
2640 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled_, 2640 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled_,
2641 name_, event_handle_); 2641 name_, event_handle_);
2642 } 2642 }
2643 } 2643 }
2644 2644
2645 } // namespace trace_event_internal 2645 } // namespace trace_event_internal
OLDNEW
« no previous file with comments | « base/trace_event/trace_event_impl.h ('k') | base/trace_event/trace_event_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698