Linux: The App Launcher now appears on the "Internet" menu, not "Other".
[chromium-blink-merge.git] / base / debug / trace_event_win.h
blob2a900bb4314f055b67a24bfea4bcdc766a569424
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
3 // found in the LICENSE file.
5 // This file contains the Windows-specific declarations for trace_event.h.
6 #ifndef BASE_DEBUG_TRACE_EVENT_WIN_H_
7 #define BASE_DEBUG_TRACE_EVENT_WIN_H_
9 #include <string>
11 #include "base/base_export.h"
12 #include "base/debug/trace_event.h"
13 #include "base/win/event_trace_provider.h"
15 // Fwd.
16 template <typename Type>
17 struct StaticMemorySingletonTraits;
19 namespace base {
20 namespace debug {
22 // This EtwTraceProvider subclass implements ETW logging
23 // for the macros above on Windows.
24 class BASE_EXPORT TraceEventETWProvider : public base::win::EtwTraceProvider {
25 public:
26 // Start logging trace events.
27 // This is a noop in this implementation.
28 static bool StartTracing();
30 // Trace begin/end/instant events, this is the bottleneck implementation
31 // all the others defer to.
32 // Allowing the use of std::string for name or extra is a convenience,
33 // whereas passing name or extra as a const char* avoids the construction
34 // of temporary std::string instances.
35 // If -1 is passed for name_len or extra_len, the strlen of the string will
36 // be used for length.
37 static void Trace(const char* name,
38 size_t name_len,
39 char type,
40 const void* id,
41 const char* extra,
42 size_t extra_len);
44 // Allows passing extra as a std::string for convenience.
45 static void Trace(const char* name,
46 char type,
47 const void* id,
48 const std::string& extra) {
49 return Trace(name, -1, type, id, extra.c_str(), extra.length());
52 // Allows passing extra as a const char* to avoid constructing temporary
53 // std::string instances where not needed.
54 static void Trace(const char* name,
55 char type,
56 const void* id,
57 const char* extra) {
58 return Trace(name, -1, type, id, extra, -1);
61 // Retrieves the singleton.
62 // Note that this may return NULL post-AtExit processing.
63 static TraceEventETWProvider* GetInstance();
65 // Returns true iff tracing is turned on.
66 bool IsTracing() {
67 return enable_level() >= TRACE_LEVEL_INFORMATION;
70 // Emit a trace of type |type| containing |name|, |id|, and |extra|.
71 // Note: |name| and |extra| must be NULL, or a zero-terminated string of
72 // length |name_len| or |extra_len| respectively.
73 // Note: if name_len or extra_len are -1, the length of the corresponding
74 // string will be used.
75 void TraceEvent(const char* name,
76 size_t name_len,
77 char type,
78 const void* id,
79 const char* extra,
80 size_t extra_len);
82 // Exposed for unittesting only, allows resurrecting our
83 // singleton instance post-AtExit processing.
84 static void Resurrect();
86 private:
87 // Ensure only the provider can construct us.
88 friend struct StaticMemorySingletonTraits<TraceEventETWProvider>;
89 TraceEventETWProvider();
91 DISALLOW_COPY_AND_ASSIGN(TraceEventETWProvider);
94 // The ETW trace provider GUID.
95 BASE_EXPORT extern const GUID kChromeTraceProviderName;
97 // The ETW event class GUID for 32 bit events.
98 BASE_EXPORT extern const GUID kTraceEventClass32;
100 // The ETW event class GUID for 64 bit events.
101 BASE_EXPORT extern const GUID kTraceEventClass64;
103 // The ETW event types, IDs 0x00-0x09 are reserved, so start at 0x10.
104 const base::win::EtwEventType kTraceEventTypeBegin = 0x10;
105 const base::win::EtwEventType kTraceEventTypeEnd = 0x11;
106 const base::win::EtwEventType kTraceEventTypeInstant = 0x12;
108 // If this flag is set in enable flags
109 enum TraceEventETWFlags {
110 CAPTURE_STACK_TRACE = 0x0001,
113 // The event format consists of:
114 // The "name" string as a zero-terminated ASCII string.
115 // The id pointer in the machine bitness.
116 // The "extra" string as a zero-terminated ASCII string.
117 // Optionally the stack trace, consisting of a DWORD "depth", followed
118 // by an array of void* (machine bitness) of length "depth".
120 } // namespace debug
121 } // namespace base
123 #endif // BASE_DEBUG_TRACE_EVENT_WIN_H_