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

Side by Side Diff: base/debug/trace_event_win.cc

Issue 23934003: Have all trace points emit to ETW. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 7 years, 3 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
« base/debug/trace_event_win.h ('K') | « base/debug/trace_event_win.h ('k') | no next file » | 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 #include "base/debug/trace_event_win.h" 4 #include "base/debug/trace_event_win.h"
5 5
6 #include "base/logging.h" 6 #include "base/logging.h"
7 #include "base/memory/singleton.h" 7 #include "base/memory/singleton.h"
8 #include "base/strings/stringprintf.h"
8 #include <initguid.h> // NOLINT 9 #include <initguid.h> // NOLINT
9 10
10 namespace base { 11 namespace base {
11 namespace debug { 12 namespace debug {
12 13
13 using base::win::EtwEventType; 14 using base::win::EtwEventType;
14 using base::win::EtwMofEvent; 15 using base::win::EtwMofEvent;
15 16
16 // {3DADA31D-19EF-4dc1-B345-037927193422} 17 // {3DADA31D-19EF-4dc1-B345-037927193422}
17 const GUID kChromeTraceProviderName = { 18 const GUID kChromeTraceProviderName = {
(...skipping 26 matching lines...) Expand all
44 size_t name_len, 45 size_t name_len,
45 char type, 46 char type,
46 const void* id, 47 const void* id,
47 const char* extra, 48 const char* extra,
48 size_t extra_len) { 49 size_t extra_len) {
49 // Make sure we don't touch NULL. 50 // Make sure we don't touch NULL.
50 if (name == NULL) 51 if (name == NULL)
51 name = ""; 52 name = "";
52 if (extra == NULL) 53 if (extra == NULL)
53 extra = ""; 54 extra = "";
54
55 EtwEventType etw_type = 0; 55 EtwEventType etw_type = 0;
56 switch (type) { 56 switch (type) {
57 case TRACE_EVENT_PHASE_BEGIN: 57 case TRACE_EVENT_PHASE_BEGIN:
58 case TRACE_EVENT_PHASE_ASYNC_BEGIN:
59 case TRACE_EVENT_PHASE_FLOW_BEGIN:
60 case TRACE_EVENT_PHASE_CREATE_OBJECT:
58 etw_type = kTraceEventTypeBegin; 61 etw_type = kTraceEventTypeBegin;
59 break; 62 break;
60 case TRACE_EVENT_PHASE_END: 63 case TRACE_EVENT_PHASE_END:
64 case TRACE_EVENT_PHASE_ASYNC_END:
65 case TRACE_EVENT_PHASE_FLOW_END:
66 case TRACE_EVENT_PHASE_DELETE_OBJECT:
61 etw_type = kTraceEventTypeEnd; 67 etw_type = kTraceEventTypeEnd;
62 break; 68 break;
63 69
64 case TRACE_EVENT_PHASE_INSTANT: 70 case TRACE_EVENT_PHASE_INSTANT:
71 case TRACE_EVENT_PHASE_INSTANT_OLD:
72 case TRACE_EVENT_PHASE_ASYNC_STEP:
73 case TRACE_EVENT_PHASE_FLOW_STEP:
74 case TRACE_EVENT_PHASE_METADATA:
75 case TRACE_EVENT_PHASE_COUNTER:
76 case TRACE_EVENT_PHASE_SAMPLE:
77 case TRACE_EVENT_PHASE_SNAPSHOT_OBJECT:
65 etw_type = kTraceEventTypeInstant; 78 etw_type = kTraceEventTypeInstant;
66 break; 79 break;
67 80
68 default: 81 default:
69 NOTREACHED() << "Unknown event type"; 82 NOTREACHED() << "Unknown event type";
70 etw_type = kTraceEventTypeInstant; 83 etw_type = kTraceEventTypeInstant;
71 break; 84 break;
72 } 85 }
73 86
74 EtwMofEvent<5> event(kTraceEventClass32, 87 EtwMofEvent<5> event(kTraceEventClass32,
(...skipping 30 matching lines...) Expand all
105 // Compute the name & extra lengths if not supplied already. 118 // Compute the name & extra lengths if not supplied already.
106 if (name_len == -1) 119 if (name_len == -1)
107 name_len = (name == NULL) ? 0 : strlen(name); 120 name_len = (name == NULL) ? 0 : strlen(name);
108 if (extra_len == -1) 121 if (extra_len == -1)
109 extra_len = (extra == NULL) ? 0 : strlen(extra); 122 extra_len = (extra == NULL) ? 0 : strlen(extra);
110 123
111 provider->TraceEvent(name, name_len, type, id, extra, extra_len); 124 provider->TraceEvent(name, name_len, type, id, extra, extra_len);
112 } 125 }
113 } 126 }
114 127
128 void TraceEventETWProvider::TraceWithArgs(
129 const char* category_group,
130 const char* name,
131 char type,
132 const void* id,
133 int num_args,
134 const char** arg_names,
135 const unsigned char* arg_types,
136 const unsigned long long* arg_values,
137 scoped_ptr<ConvertableToTraceFormat> convertable_values[]) {
138 // Convert arguments to a string.
139 std::string extras = base::StringPrintf("[%s]", category_group);
140 for (int i = 0; i < num_args; ++i) {
141 if (i)
142 extras += ';';
143 extras += arg_names[i];
144 extras += '=';
145 std::string::size_type value_start = extras.length();
146 if (arg_types[i] == TRACE_VALUE_TYPE_CONVERTABLE) {
147 convertable_values[i]->AppendAsTraceFormat(&extras);
148 } else {
149 base::debug::TraceEvent::TraceValue value;
150 value.as_uint = arg_values[i];
151 base::debug::TraceEvent::AppendValueAsJSON(arg_types[i], value, &extras);
152 }
153 // Replace separator with a similar character.
154 std::replace(extras.begin() + value_start, extras.end(), ';', ',');
155 }
chrisha 2013/09/05 20:21:30 This string manipulation is relatively expensive.
fdoray 2013/09/08 18:35:50 The method is called for every event. I wrapped t
156 Trace(name, type, id, extras);
157 }
158
115 void TraceEventETWProvider::Resurrect() { 159 void TraceEventETWProvider::Resurrect() {
116 StaticMemorySingletonTraits<TraceEventETWProvider>::Resurrect(); 160 StaticMemorySingletonTraits<TraceEventETWProvider>::Resurrect();
117 } 161 }
118 162
119 } // namespace debug 163 } // namespace debug
120 } // namespace base 164 } // namespace base
OLDNEW
« base/debug/trace_event_win.h ('K') | « base/debug/trace_event_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698