OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/debug/trace_event.h" | 5 #include "base/debug/trace_event.h" |
6 | 6 |
7 #include <strstream> | 7 #include <strstream> |
8 | 8 |
9 #include "base/at_exit.h" | 9 #include "base/at_exit.h" |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
11 #include "base/file_util.h" | 11 #include "base/file_util.h" |
| 12 #include "base/debug/trace_event.h" |
| 13 #include "base/debug/trace_event_win.h" |
12 #include "base/win/event_trace_consumer.h" | 14 #include "base/win/event_trace_consumer.h" |
13 #include "base/win/event_trace_controller.h" | 15 #include "base/win/event_trace_controller.h" |
| 16 #include "base/win/event_trace_provider.h" |
14 #include "base/win/windows_version.h" | 17 #include "base/win/windows_version.h" |
15 #include "testing/gmock/include/gmock/gmock.h" | 18 #include "testing/gmock/include/gmock/gmock.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
17 #include <initguid.h> // NOLINT - must be last include. | 20 #include <initguid.h> // NOLINT - must be last include. |
18 | 21 |
19 namespace base { | 22 namespace base { |
20 namespace debug { | 23 namespace debug { |
21 | 24 |
22 namespace { | 25 namespace { |
23 | 26 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 // Tear down any dangling session from an earlier failing test. | 99 // Tear down any dangling session from an earlier failing test. |
97 EtwTraceProperties ignore; | 100 EtwTraceProperties ignore; |
98 EtwTraceController::Stop(kTestSessionName, &ignore); | 101 EtwTraceController::Stop(kTestSessionName, &ignore); |
99 } | 102 } |
100 | 103 |
101 // Resurrect and initialize the TraceLog singleton instance. | 104 // Resurrect and initialize the TraceLog singleton instance. |
102 // On Vista and better, we need the provider registered before we | 105 // On Vista and better, we need the provider registered before we |
103 // start the private, in-proc session, but on XP we need the global | 106 // start the private, in-proc session, but on XP we need the global |
104 // session created and the provider enabled before we register our | 107 // session created and the provider enabled before we register our |
105 // provider. | 108 // provider. |
106 TraceLog* tracelog = NULL; | 109 TraceEventETWProvider* tracelog = NULL; |
107 if (!is_xp) { | 110 if (!is_xp) { |
108 TraceLog::Resurrect(); | 111 TraceEventETWProvider::Resurrect(); |
109 tracelog = TraceLog::GetInstance(); | 112 tracelog = TraceEventETWProvider::GetInstance(); |
110 ASSERT_TRUE(tracelog != NULL); | 113 ASSERT_TRUE(tracelog != NULL); |
111 ASSERT_FALSE(tracelog->IsTracing()); | 114 ASSERT_FALSE(tracelog->IsTracing()); |
112 } | 115 } |
113 | 116 |
114 // Create the log file. | 117 // Create the log file. |
115 ASSERT_TRUE(file_util::CreateTemporaryFile(&log_file_)); | 118 ASSERT_TRUE(file_util::CreateTemporaryFile(&log_file_)); |
116 | 119 |
117 // Create a private log session on the file. | 120 // Create a private log session on the file. |
118 EtwTraceProperties prop; | 121 EtwTraceProperties prop; |
119 ASSERT_HRESULT_SUCCEEDED(prop.SetLoggerFileName(log_file_.value().c_str())); | 122 ASSERT_HRESULT_SUCCEEDED(prop.SetLoggerFileName(log_file_.value().c_str())); |
(...skipping 14 matching lines...) Expand all Loading... |
134 p.FlushTimer = 1; // 1 second flush lag. | 137 p.FlushTimer = 1; // 1 second flush lag. |
135 ASSERT_HRESULT_SUCCEEDED(controller_.Start(kTestSessionName, &prop)); | 138 ASSERT_HRESULT_SUCCEEDED(controller_.Start(kTestSessionName, &prop)); |
136 | 139 |
137 // Enable the TraceLog provider GUID. | 140 // Enable the TraceLog provider GUID. |
138 ASSERT_HRESULT_SUCCEEDED( | 141 ASSERT_HRESULT_SUCCEEDED( |
139 controller_.EnableProvider(kChromeTraceProviderName, | 142 controller_.EnableProvider(kChromeTraceProviderName, |
140 TRACE_LEVEL_INFORMATION, | 143 TRACE_LEVEL_INFORMATION, |
141 0)); | 144 0)); |
142 | 145 |
143 if (is_xp) { | 146 if (is_xp) { |
144 TraceLog::Resurrect(); | 147 TraceEventETWProvider::Resurrect(); |
145 tracelog = TraceLog::GetInstance(); | 148 tracelog = TraceEventETWProvider::GetInstance(); |
146 } | 149 } |
147 ASSERT_TRUE(tracelog != NULL); | 150 ASSERT_TRUE(tracelog != NULL); |
148 EXPECT_TRUE(tracelog->IsTracing()); | 151 EXPECT_TRUE(tracelog->IsTracing()); |
149 } | 152 } |
150 | 153 |
151 void TearDown() { | 154 void TearDown() { |
152 EtwTraceProperties prop; | 155 EtwTraceProperties prop; |
153 if (controller_.session() != 0) | 156 if (controller_.session() != 0) |
154 EXPECT_HRESULT_SUCCEEDED(controller_.Stop(&prop)); | 157 EXPECT_HRESULT_SUCCEEDED(controller_.Stop(&prop)); |
155 | 158 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 } // namespace | 207 } // namespace |
205 | 208 |
206 | 209 |
207 TEST_F(TraceEventTest, TraceLog) { | 210 TEST_F(TraceEventTest, TraceLog) { |
208 ExpectPlayLog(); | 211 ExpectPlayLog(); |
209 | 212 |
210 // The events should arrive in the same sequence as the expects. | 213 // The events should arrive in the same sequence as the expects. |
211 InSequence in_sequence; | 214 InSequence in_sequence; |
212 | 215 |
213 // Full argument version, passing lengths explicitly. | 216 // Full argument version, passing lengths explicitly. |
214 TraceLog::Trace(kName, | 217 TraceEventETWProvider::Trace(kName, |
215 strlen(kName), | 218 strlen(kName), |
216 TraceLog::EVENT_BEGIN, | 219 base::debug::TRACE_EVENT_PHASE_BEGIN, |
217 kId, | 220 kId, |
218 kExtra, | 221 kExtra, |
219 strlen(kExtra)); | 222 strlen(kExtra)); |
220 | 223 |
221 ExpectEvent(kTraceEventClass32, | 224 ExpectEvent(kTraceEventClass32, |
222 kTraceEventTypeBegin, | 225 kTraceEventTypeBegin, |
223 kName, strlen(kName), | 226 kName, strlen(kName), |
224 kId, | 227 kId, |
225 kExtra, strlen(kExtra)); | 228 kExtra, strlen(kExtra)); |
226 | 229 |
227 // Const char* version. | 230 // Const char* version. |
228 TraceLog::Trace(static_cast<const char*>(kName), | 231 TraceEventETWProvider::Trace(static_cast<const char*>(kName), |
229 TraceLog::EVENT_END, | 232 base::debug::TRACE_EVENT_PHASE_END, |
230 kId, | 233 kId, |
231 static_cast<const char*>(kExtra)); | 234 static_cast<const char*>(kExtra)); |
232 | 235 |
233 ExpectEvent(kTraceEventClass32, | 236 ExpectEvent(kTraceEventClass32, |
234 kTraceEventTypeEnd, | 237 kTraceEventTypeEnd, |
235 kName, strlen(kName), | 238 kName, strlen(kName), |
236 kId, | 239 kId, |
237 kExtra, strlen(kExtra)); | 240 kExtra, strlen(kExtra)); |
238 | 241 |
239 // std::string extra version. | 242 // std::string extra version. |
240 TraceLog::Trace(static_cast<const char*>(kName), | 243 TraceEventETWProvider::Trace(static_cast<const char*>(kName), |
241 TraceLog::EVENT_INSTANT, | 244 base::debug::TRACE_EVENT_PHASE_INSTANT, |
242 kId, | 245 kId, |
243 std::string(kExtra)); | 246 std::string(kExtra)); |
244 | 247 |
245 ExpectEvent(kTraceEventClass32, | 248 ExpectEvent(kTraceEventClass32, |
246 kTraceEventTypeInstant, | 249 kTraceEventTypeInstant, |
247 kName, strlen(kName), | 250 kName, strlen(kName), |
248 kId, | 251 kId, |
249 kExtra, strlen(kExtra)); | 252 kExtra, strlen(kExtra)); |
250 | 253 |
251 | 254 |
252 // Test for sanity on NULL inputs. | 255 // Test for sanity on NULL inputs. |
253 TraceLog::Trace(NULL, | 256 TraceEventETWProvider::Trace(NULL, |
254 0, | 257 0, |
255 TraceLog::EVENT_BEGIN, | 258 base::debug::TRACE_EVENT_PHASE_BEGIN, |
256 kId, | 259 kId, |
257 NULL, | 260 NULL, |
258 0); | 261 0); |
259 | 262 |
260 ExpectEvent(kTraceEventClass32, | 263 ExpectEvent(kTraceEventClass32, |
261 kTraceEventTypeBegin, | 264 kTraceEventTypeBegin, |
262 kEmpty, 0, | 265 kEmpty, 0, |
263 kId, | 266 kId, |
264 kEmpty, 0); | 267 kEmpty, 0); |
265 | 268 |
266 TraceLog::Trace(NULL, | 269 TraceEventETWProvider::Trace(NULL, |
267 -1, | 270 -1, |
268 TraceLog::EVENT_END, | 271 base::debug::TRACE_EVENT_PHASE_END, |
269 kId, | 272 kId, |
270 NULL, | 273 NULL, |
271 -1); | 274 -1); |
272 | 275 |
273 ExpectEvent(kTraceEventClass32, | 276 ExpectEvent(kTraceEventClass32, |
274 kTraceEventTypeEnd, | 277 kTraceEventTypeEnd, |
275 kEmpty, 0, | 278 kEmpty, 0, |
276 kId, | 279 kId, |
277 kEmpty, 0); | 280 kEmpty, 0); |
278 | 281 |
279 PlayLog(); | 282 PlayLog(); |
280 } | 283 } |
281 | 284 |
282 TEST_F(TraceEventTest, Macros) { | 285 TEST_F(TraceEventTest, Macros) { |
283 ExpectPlayLog(); | 286 ExpectPlayLog(); |
284 | 287 |
285 // The events should arrive in the same sequence as the expects. | 288 // The events should arrive in the same sequence as the expects. |
286 InSequence in_sequence; | 289 InSequence in_sequence; |
287 | 290 |
288 TRACE_EVENT_BEGIN(kName, kId, kExtra); | 291 TRACE_EVENT_BEGIN_ETW(kName, kId, kExtra); |
289 ExpectEvent(kTraceEventClass32, | 292 ExpectEvent(kTraceEventClass32, |
290 kTraceEventTypeBegin, | 293 kTraceEventTypeBegin, |
291 kName, strlen(kName), | 294 kName, strlen(kName), |
292 kId, | 295 kId, |
293 kExtra, strlen(kExtra)); | 296 kExtra, strlen(kExtra)); |
294 | 297 |
295 TRACE_EVENT_END(kName, kId, kExtra); | 298 TRACE_EVENT_END_ETW(kName, kId, kExtra); |
296 ExpectEvent(kTraceEventClass32, | 299 ExpectEvent(kTraceEventClass32, |
297 kTraceEventTypeEnd, | 300 kTraceEventTypeEnd, |
298 kName, strlen(kName), | 301 kName, strlen(kName), |
299 kId, | 302 kId, |
300 kExtra, strlen(kExtra)); | 303 kExtra, strlen(kExtra)); |
301 | 304 |
302 TRACE_EVENT_INSTANT(kName, kId, kExtra); | 305 TRACE_EVENT_INSTANT_ETW(kName, kId, kExtra); |
303 ExpectEvent(kTraceEventClass32, | 306 ExpectEvent(kTraceEventClass32, |
304 kTraceEventTypeInstant, | 307 kTraceEventTypeInstant, |
305 kName, strlen(kName), | 308 kName, strlen(kName), |
306 kId, | 309 kId, |
307 kExtra, strlen(kExtra)); | 310 kExtra, strlen(kExtra)); |
308 | 311 |
309 PlayLog(); | 312 PlayLog(); |
310 } | 313 } |
311 | 314 |
312 } // namespace debug | 315 } // namespace debug |
313 } // namespace base | 316 } // namespace base |
OLD | NEW |