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

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

Issue 1038453002: Add option to export tracing events to ETW. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add compiling manifest to GYP/GN. Formatting and other minor fixes. Created 5 years, 9 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
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 8
9 #include "base/base_switches.h" 9 #include "base/base_switches.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 17 matching lines...) Expand all
28 #include "base/synchronization/waitable_event.h" 28 #include "base/synchronization/waitable_event.h"
29 #include "base/sys_info.h" 29 #include "base/sys_info.h"
30 #include "base/third_party/dynamic_annotations/dynamic_annotations.h" 30 #include "base/third_party/dynamic_annotations/dynamic_annotations.h"
31 #include "base/threading/platform_thread.h" 31 #include "base/threading/platform_thread.h"
32 #include "base/threading/thread_id_name_manager.h" 32 #include "base/threading/thread_id_name_manager.h"
33 #include "base/time/time.h" 33 #include "base/time/time.h"
34 #include "base/trace_event/trace_event.h" 34 #include "base/trace_event/trace_event.h"
35 #include "base/trace_event/trace_event_synthetic_delay.h" 35 #include "base/trace_event/trace_event_synthetic_delay.h"
36 36
37 #if defined(OS_WIN) 37 #if defined(OS_WIN)
38 #include "base/trace_event/trace_event_etw_export_win.h"
38 #include "base/trace_event/trace_event_win.h" 39 #include "base/trace_event/trace_event_win.h"
39 #endif 40 #endif
40 41
41 class DeleteTraceLogForTesting { 42 class DeleteTraceLogForTesting {
42 public: 43 public:
43 static void Delete() { 44 static void Delete() {
44 Singleton<base::trace_event::TraceLog, 45 Singleton<base::trace_event::TraceLog,
45 LeakySingletonTraits<base::trace_event::TraceLog>>::OnExit(0); 46 LeakySingletonTraits<base::trace_event::TraceLog>>::OnExit(0);
46 } 47 }
47 }; 48 };
(...skipping 1235 matching lines...) Expand 10 before | Expand all | Expand 10 after
1283 const char* category_group = g_category_groups[category_index]; 1284 const char* category_group = g_category_groups[category_index];
1284 if (mode_ == RECORDING_MODE && 1285 if (mode_ == RECORDING_MODE &&
1285 category_filter_.IsCategoryGroupEnabled(category_group)) 1286 category_filter_.IsCategoryGroupEnabled(category_group))
1286 enabled_flag |= ENABLED_FOR_RECORDING; 1287 enabled_flag |= ENABLED_FOR_RECORDING;
1287 else if (mode_ == MONITORING_MODE && 1288 else if (mode_ == MONITORING_MODE &&
1288 category_filter_.IsCategoryGroupEnabled(category_group)) 1289 category_filter_.IsCategoryGroupEnabled(category_group))
1289 enabled_flag |= ENABLED_FOR_MONITORING; 1290 enabled_flag |= ENABLED_FOR_MONITORING;
1290 if (event_callback_ && 1291 if (event_callback_ &&
1291 event_callback_category_filter_.IsCategoryGroupEnabled(category_group)) 1292 event_callback_category_filter_.IsCategoryGroupEnabled(category_group))
1292 enabled_flag |= ENABLED_FOR_EVENT_CALLBACK; 1293 enabled_flag |= ENABLED_FOR_EVENT_CALLBACK;
1294 #if defined(OS_WIN)
1295 if (base::trace_event::TraceEventETWExport::isETWExportEnabled())
1296 enabled_flag |= ENABLED_FOR_ETW_EXPORT;
1297 #endif
1298
1293 g_category_group_enabled[category_index] = enabled_flag; 1299 g_category_group_enabled[category_index] = enabled_flag;
1294 } 1300 }
1295 1301
1296 void TraceLog::UpdateCategoryGroupEnabledFlags() { 1302 void TraceLog::UpdateCategoryGroupEnabledFlags() {
1297 size_t category_index = base::subtle::NoBarrier_Load(&g_category_index); 1303 size_t category_index = base::subtle::NoBarrier_Load(&g_category_index);
1298 for (size_t i = 0; i < category_index; i++) 1304 for (size_t i = 0; i < category_index; i++)
1299 UpdateCategoryGroupEnabledFlag(i); 1305 UpdateCategoryGroupEnabledFlag(i);
1300 } 1306 }
1301 1307
1302 void TraceLog::UpdateSyntheticDelaysFromCategoryFilter() { 1308 void TraceLog::UpdateSyntheticDelaysFromCategoryFilter() {
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after
1889 int num_args, 1895 int num_args,
1890 const char** arg_names, 1896 const char** arg_names,
1891 const unsigned char* arg_types, 1897 const unsigned char* arg_types,
1892 const unsigned long long* arg_values, 1898 const unsigned long long* arg_values,
1893 const scoped_refptr<ConvertableToTraceFormat>* convertable_values, 1899 const scoped_refptr<ConvertableToTraceFormat>* convertable_values,
1894 unsigned char flags) { 1900 unsigned char flags) {
1895 TraceEventHandle handle = { 0, 0, 0 }; 1901 TraceEventHandle handle = { 0, 0, 0 };
1896 if (!*category_group_enabled) 1902 if (!*category_group_enabled)
1897 return handle; 1903 return handle;
1898 1904
1905 #if defined(OS_WIN)
1906 if (*category_group_enabled & ENABLED_FOR_ETW_EXPORT)
dsinclair 2015/03/26 18:18:17 I think this should be down around where the andro
Georges Khalil 2015/03/26 23:09:19 After discussion, brought this down but before the
1907 TraceEventETWExport::AddEvent(phase, category_group_enabled, name, id,
1908 num_args, arg_names, arg_types, arg_values,
1909 convertable_values);
1910 #endif // OS_WIN
1911
1899 // Avoid re-entrance of AddTraceEvent. This may happen in GPU process when 1912 // Avoid re-entrance of AddTraceEvent. This may happen in GPU process when
1900 // ECHO_TO_CONSOLE is enabled: AddTraceEvent -> LOG(ERROR) -> 1913 // ECHO_TO_CONSOLE is enabled: AddTraceEvent -> LOG(ERROR) ->
1901 // GpuProcessLogMessageHandler -> PostPendingTask -> TRACE_EVENT ... 1914 // GpuProcessLogMessageHandler -> PostPendingTask -> TRACE_EVENT ...
1902 if (thread_is_in_trace_event_.Get()) 1915 if (thread_is_in_trace_event_.Get())
1903 return handle; 1916 return handle;
1904 1917
1905 AutoThreadLocalBoolean thread_is_in_trace_event(&thread_is_in_trace_event_); 1918 AutoThreadLocalBoolean thread_is_in_trace_event(&thread_is_in_trace_event_);
1906 1919
1907 DCHECK(name); 1920 DCHECK(name);
1908 DCHECK(!timestamp.is_null()); 1921 DCHECK(!timestamp.is_null());
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
2107 TraceEventETWProvider::Trace(name, phase, id, extra); 2120 TraceEventETWProvider::Trace(name, phase, id, extra);
2108 #endif 2121 #endif
2109 INTERNAL_TRACE_EVENT_ADD(phase, "ETW Trace Event", name, 2122 INTERNAL_TRACE_EVENT_ADD(phase, "ETW Trace Event", name,
2110 TRACE_EVENT_FLAG_COPY, "id", id, "extra", extra); 2123 TRACE_EVENT_FLAG_COPY, "id", id, "extra", extra);
2111 } 2124 }
2112 2125
2113 void TraceLog::UpdateTraceEventDuration( 2126 void TraceLog::UpdateTraceEventDuration(
2114 const unsigned char* category_group_enabled, 2127 const unsigned char* category_group_enabled,
2115 const char* name, 2128 const char* name,
2116 TraceEventHandle handle) { 2129 TraceEventHandle handle) {
2130 #if defined(OS_WIN)
2131 if (*category_group_enabled & ENABLED_FOR_ETW_EXPORT)
2132 TraceEventETWExport::AddEvent(TRACE_EVENT_PHASE_END, category_group_enabled,
dsinclair 2015/03/26 18:18:17 This isn't what you want here. This is just going
Georges Khalil 2015/03/26 23:09:19 After review and discussion, this code should be r
2133 name, 0, 0, NULL, NULL, NULL, NULL);
2134 #endif // OS_WIN
2135
2117 // Avoid re-entrance of AddTraceEvent. This may happen in GPU process when 2136 // Avoid re-entrance of AddTraceEvent. This may happen in GPU process when
2118 // ECHO_TO_CONSOLE is enabled: AddTraceEvent -> LOG(ERROR) -> 2137 // ECHO_TO_CONSOLE is enabled: AddTraceEvent -> LOG(ERROR) ->
2119 // GpuProcessLogMessageHandler -> PostPendingTask -> TRACE_EVENT ... 2138 // GpuProcessLogMessageHandler -> PostPendingTask -> TRACE_EVENT ...
2120 if (thread_is_in_trace_event_.Get()) 2139 if (thread_is_in_trace_event_.Get())
2121 return; 2140 return;
2122 2141
2123 AutoThreadLocalBoolean thread_is_in_trace_event(&thread_is_in_trace_event_); 2142 AutoThreadLocalBoolean thread_is_in_trace_event(&thread_is_in_trace_event_);
2124 2143
2125 TimeTicks thread_now = ThreadNow(); 2144 TimeTicks thread_now = ThreadNow();
2126 TimeTicks now = OffsetNow(); 2145 TimeTicks now = OffsetNow();
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after
2602 } 2621 }
2603 2622
2604 ScopedTraceBinaryEfficient::~ScopedTraceBinaryEfficient() { 2623 ScopedTraceBinaryEfficient::~ScopedTraceBinaryEfficient() {
2605 if (*category_group_enabled_) { 2624 if (*category_group_enabled_) {
2606 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled_, 2625 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled_,
2607 name_, event_handle_); 2626 name_, event_handle_);
2608 } 2627 }
2609 } 2628 }
2610 2629
2611 } // namespace trace_event_internal 2630 } // namespace trace_event_internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698