Index: base/debug/trace_event_win.h |
diff --git a/base/debug/trace_event_win.h b/base/debug/trace_event_win.h |
index 2a900bb4314f055b67a24bfea4bcdc766a569424..9e1aab69ab46a2b41c338a00443a144b4a46bbe8 100644 |
--- a/base/debug/trace_event_win.h |
+++ b/base/debug/trace_event_win.h |
@@ -10,6 +10,7 @@ |
#include "base/base_export.h" |
#include "base/debug/trace_event.h" |
+#include "base/memory/ref_counted.h" |
#include "base/win/event_trace_provider.h" |
// Fwd. |
@@ -27,8 +28,7 @@ class BASE_EXPORT TraceEventETWProvider : public base::win::EtwTraceProvider { |
// This is a noop in this implementation. |
static bool StartTracing(); |
- // Trace begin/end/instant events, this is the bottleneck implementation |
- // all the others defer to. |
+ // Trace begin/end/instant events. |
// Allowing the use of std::string for name or extra is a convenience, |
// whereas passing name or extra as a const char* avoids the construction |
// of temporary std::string instances. |
@@ -58,6 +58,26 @@ class BASE_EXPORT TraceEventETWProvider : public base::win::EtwTraceProvider { |
return Trace(name, -1, type, id, extra, -1); |
} |
+ // Emit a trace event. |
+ // The event is defined by |category_group|, |name| and |type|. |
+ // |id| helps to identify related events. |
+ // |num_args| indicates the number of custom arguments to add to the trace. |
+ // It must be <= |kTraceMaxNumArgs|. The names of the arguments are specified |
+ // in |arg_names|. |arg_types| indicates how to interpret the value of |
+ // each argument. Finally, the value of an argument is obtained from |
+ // |convertable_values| if its type is TRACE_VALUE_TYPE_CONVERTABLE, |
+ // from |arg_values| otherwise. |
+ static void TraceWithArgs( |
+ const char* category_group, |
+ const char* name, |
+ char type, |
+ unsigned long long id, |
+ int num_args, |
+ const char** arg_names, |
+ const unsigned char* arg_types, |
+ const unsigned long long* arg_values, |
+ const scoped_refptr<ConvertableToTraceFormat>* convertable_values); |
+ |
// Retrieves the singleton. |
// Note that this may return NULL post-AtExit processing. |
static TraceEventETWProvider* GetInstance(); |
@@ -67,11 +87,24 @@ class BASE_EXPORT TraceEventETWProvider : public base::win::EtwTraceProvider { |
return enable_level() >= TRACE_LEVEL_INFORMATION; |
} |
+ // Exposed for unittesting only, allows resurrecting our |
+ // singleton instance post-AtExit processing. |
+ static void Resurrect(); |
+ |
+ private: |
+ // Ensure only the provider can construct us. |
+ friend struct StaticMemorySingletonTraits<TraceEventETWProvider>; |
+ TraceEventETWProvider(); |
+ |
// Emit a trace of type |type| containing |name|, |id|, and |extra|. |
// Note: |name| and |extra| must be NULL, or a zero-terminated string of |
// length |name_len| or |extra_len| respectively. |
- // Note: if name_len or extra_len are -1, the length of the corresponding |
- // string will be used. |
+ // The event format consists of: |
+ // The "name" string as a zero-terminated ASCII string. |
+ // The id pointer in the machine bitness. |
+ // The "extra" string as a zero-terminated ASCII string. |
+ // Optionally the stack trace, consisting of a DWORD "depth", followed |
+ // by an array of void* (machine bitness) of length "depth". |
void TraceEvent(const char* name, |
size_t name_len, |
char type, |
@@ -79,14 +112,25 @@ class BASE_EXPORT TraceEventETWProvider : public base::win::EtwTraceProvider { |
const char* extra, |
size_t extra_len); |
- // Exposed for unittesting only, allows resurrecting our |
- // singleton instance post-AtExit processing. |
- static void Resurrect(); |
- |
- private: |
- // Ensure only the provider can construct us. |
- friend struct StaticMemorySingletonTraits<TraceEventETWProvider>; |
- TraceEventETWProvider(); |
+ // Emit a trace event. |
+ // The event format consists of: |
+ // The "name" as a zero-terminated ASCII string. |
+ // A 64 bits "id" to help identify related events. |
+ // The "category" as a zero-terminated ASCII string. |
+ // For each extra argument, a "name" followed by a "value", both |
+ // zero-terminated strings. |
+ // Optionally the stack trace, consisting of a DWORD "depth", followed |
+ // by an array of void* (machine bitness) of length "depth". |
+ void TraceEventWithArgs( |
+ const char* category_group, |
+ const char* name, |
+ char type, |
+ unsigned long long id, |
+ int num_args, |
+ const char** arg_names, |
+ const unsigned char* arg_types, |
+ const unsigned long long* arg_values, |
+ const scoped_refptr<ConvertableToTraceFormat>* convertable_values); |
DISALLOW_COPY_AND_ASSIGN(TraceEventETWProvider); |
}; |
@@ -94,28 +138,26 @@ class BASE_EXPORT TraceEventETWProvider : public base::win::EtwTraceProvider { |
// The ETW trace provider GUID. |
BASE_EXPORT extern const GUID kChromeTraceProviderName; |
-// The ETW event class GUID for 32 bit events. |
+// The ETW event class GUID for old events from TRACE_EVENT_*_ETW macros. |
BASE_EXPORT extern const GUID kTraceEventClass32; |
-// The ETW event class GUID for 64 bit events. |
-BASE_EXPORT extern const GUID kTraceEventClass64; |
- |
// The ETW event types, IDs 0x00-0x09 are reserved, so start at 0x10. |
const base::win::EtwEventType kTraceEventTypeBegin = 0x10; |
const base::win::EtwEventType kTraceEventTypeEnd = 0x11; |
const base::win::EtwEventType kTraceEventTypeInstant = 0x12; |
-// If this flag is set in enable flags |
+// Enable flags that can be set for the trace session. |
enum TraceEventETWFlags { |
+ // Include a stack trace for each event. |
CAPTURE_STACK_TRACE = 0x0001, |
-}; |
-// The event format consists of: |
-// The "name" string as a zero-terminated ASCII string. |
-// The id pointer in the machine bitness. |
-// The "extra" string as a zero-terminated ASCII string. |
-// Optionally the stack trace, consisting of a DWORD "depth", followed |
-// by an array of void* (machine bitness) of length "depth". |
+ // Include simple arguments with traced events. |
+ CAPTURE_SIMPLE_ARGUMENTS = 0x0002, |
+ |
+ // Include all arguments with traced events. Some arguments can be quite |
+ // large. Tracing them adds an overhead that can affect performance. |
+ CAPTURE_ALL_ARGUMENTS = 0x0004 |
+}; |
} // namespace debug |
} // namespace base |