OLD | NEW |
1 // Copyright (c) 2009 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 #include "base/trace_event_win.h" | 4 |
| 5 #include "base/debug/trace_event_win.h" |
5 | 6 |
6 #include "base/logging.h" | 7 #include "base/logging.h" |
7 #include "base/singleton.h" | 8 #include "base/singleton.h" |
8 #include <initguid.h> // NOLINT | 9 #include <initguid.h> // NOLINT |
9 | 10 |
10 namespace base { | 11 namespace base { |
| 12 namespace debug { |
11 | 13 |
12 // {3DADA31D-19EF-4dc1-B345-037927193422} | 14 // {3DADA31D-19EF-4dc1-B345-037927193422} |
13 const GUID kChromeTraceProviderName = { | 15 const GUID kChromeTraceProviderName = { |
14 0x3dada31d, 0x19ef, 0x4dc1, 0xb3, 0x45, 0x3, 0x79, 0x27, 0x19, 0x34, 0x22 }; | 16 0x3dada31d, 0x19ef, 0x4dc1, 0xb3, 0x45, 0x3, 0x79, 0x27, 0x19, 0x34, 0x22 }; |
15 | 17 |
16 // {B967AE67-BB22-49d7-9406-55D91EE1D560} | 18 // {B967AE67-BB22-49d7-9406-55D91EE1D560} |
17 const GUID kTraceEventClass32 = { | 19 const GUID kTraceEventClass32 = { |
18 0xb967ae67, 0xbb22, 0x49d7, 0x94, 0x6, 0x55, 0xd9, 0x1e, 0xe1, 0xd5, 0x60 }; | 20 0xb967ae67, 0xbb22, 0x49d7, 0x94, 0x6, 0x55, 0xd9, 0x1e, 0xe1, 0xd5, 0x60 }; |
19 | 21 |
20 // {97BE602D-2930-4ac3-8046-B6763B631DFE} | 22 // {97BE602D-2930-4ac3-8046-B6763B631DFE} |
21 const GUID kTraceEventClass64 = { | 23 const GUID kTraceEventClass64 = { |
22 0x97be602d, 0x2930, 0x4ac3, 0x80, 0x46, 0xb6, 0x76, 0x3b, 0x63, 0x1d, 0xfe}; | 24 0x97be602d, 0x2930, 0x4ac3, 0x80, 0x46, 0xb6, 0x76, 0x3b, 0x63, 0x1d, 0xfe}; |
23 | 25 |
24 | 26 |
25 TraceLog::TraceLog() : EtwTraceProvider(base::kChromeTraceProviderName) { | 27 TraceLog::TraceLog() : EtwTraceProvider(kChromeTraceProviderName) { |
26 Register(); | 28 Register(); |
27 } | 29 } |
28 | 30 |
29 TraceLog* TraceLog::Get() { | 31 TraceLog* TraceLog::Get() { |
30 return Singleton<TraceLog, StaticMemorySingletonTraits<TraceLog>>::get(); | 32 return Singleton<TraceLog, StaticMemorySingletonTraits<TraceLog>>::get(); |
31 } | 33 } |
32 | 34 |
33 bool TraceLog::StartTracing() { | 35 bool TraceLog::StartTracing() { |
34 return true; | 36 return true; |
35 } | 37 } |
36 | 38 |
37 void TraceLog::TraceEvent(const char* name, | 39 void TraceLog::TraceEvent(const char* name, |
38 size_t name_len, | 40 size_t name_len, |
39 base::TraceLog::EventType type, | 41 EventType type, |
40 const void* id, | 42 const void* id, |
41 const char* extra, | 43 const char* extra, |
42 size_t extra_len) { | 44 size_t extra_len) { |
43 // Make sure we don't touch NULL. | 45 // Make sure we don't touch NULL. |
44 if (name == NULL) | 46 if (name == NULL) |
45 name = ""; | 47 name = ""; |
46 if (extra == NULL) | 48 if (extra == NULL) |
47 extra = ""; | 49 extra = ""; |
48 | 50 |
49 EtwEventType etw_type = 0; | 51 EtwEventType etw_type = 0; |
50 switch (type) { | 52 switch (type) { |
51 case base::TraceLog::EVENT_BEGIN: | 53 case TraceLog::EVENT_BEGIN: |
52 etw_type = base::kTraceEventTypeBegin; | 54 etw_type = kTraceEventTypeBegin; |
53 break; | 55 break; |
54 case base::TraceLog::EVENT_END: | 56 case TraceLog::EVENT_END: |
55 etw_type = base::kTraceEventTypeEnd; | 57 etw_type = kTraceEventTypeEnd; |
56 break; | 58 break; |
57 | 59 |
58 case base::TraceLog::EVENT_INSTANT: | 60 case TraceLog::EVENT_INSTANT: |
59 etw_type = base::kTraceEventTypeInstant; | 61 etw_type = kTraceEventTypeInstant; |
60 break; | 62 break; |
61 | 63 |
62 default: | 64 default: |
63 NOTREACHED() << "Unknown event type"; | 65 NOTREACHED() << "Unknown event type"; |
64 etw_type = base::kTraceEventTypeInstant; | 66 etw_type = kTraceEventTypeInstant; |
65 break; | 67 break; |
66 } | 68 } |
67 | 69 |
68 EtwMofEvent<5> event(base::kTraceEventClass32, | 70 EtwMofEvent<5> event(kTraceEventClass32, |
69 etw_type, | 71 etw_type, |
70 TRACE_LEVEL_INFORMATION); | 72 TRACE_LEVEL_INFORMATION); |
71 event.SetField(0, name_len + 1, name); | 73 event.SetField(0, name_len + 1, name); |
72 event.SetField(1, sizeof(id), &id); | 74 event.SetField(1, sizeof(id), &id); |
73 event.SetField(2, extra_len + 1, extra); | 75 event.SetField(2, extra_len + 1, extra); |
74 | 76 |
75 // See whether we're to capture a backtrace. | 77 // See whether we're to capture a backtrace. |
76 void* backtrace[32]; | 78 void* backtrace[32]; |
77 if (enable_flags() & base::CAPTURE_STACK_TRACE) { | 79 if (enable_flags() & CAPTURE_STACK_TRACE) { |
78 DWORD hash = 0; | 80 DWORD hash = 0; |
79 DWORD depth = CaptureStackBackTrace(0, | 81 DWORD depth = CaptureStackBackTrace(0, |
80 arraysize(backtrace), | 82 arraysize(backtrace), |
81 backtrace, | 83 backtrace, |
82 &hash); | 84 &hash); |
83 event.SetField(3, sizeof(depth), &depth); | 85 event.SetField(3, sizeof(depth), &depth); |
84 event.SetField(4, sizeof(backtrace[0]) * depth, backtrace); | 86 event.SetField(4, sizeof(backtrace[0]) * depth, backtrace); |
85 } | 87 } |
86 | 88 |
87 // Trace the event. | 89 // Trace the event. |
(...skipping 15 matching lines...) Expand all Loading... |
103 extra_len = (extra == NULL) ? 0 : strlen(extra); | 105 extra_len = (extra == NULL) ? 0 : strlen(extra); |
104 | 106 |
105 provider->TraceEvent(name, name_len, type, id, extra, extra_len); | 107 provider->TraceEvent(name, name_len, type, id, extra, extra_len); |
106 } | 108 } |
107 } | 109 } |
108 | 110 |
109 void TraceLog::Resurrect() { | 111 void TraceLog::Resurrect() { |
110 StaticMemorySingletonTraits<TraceLog>::Resurrect(); | 112 StaticMemorySingletonTraits<TraceLog>::Resurrect(); |
111 } | 113 } |
112 | 114 |
| 115 } // namespace debug |
113 } // namespace base | 116 } // namespace base |
OLD | NEW |