summaryrefslogtreecommitdiffstats
path: root/base/trace_event/trace_event_impl.cc
diff options
context:
space:
mode:
authorgeorgesak <georgesak@chromium.org>2015-04-13 18:36:17 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-14 01:37:57 +0000
commit1cc86c4f686869f32dfede093a07828c73563892 (patch)
tree256f51e5a02376d70d06014f173df09ece8594c7 /base/trace_event/trace_event_impl.cc
parent3455a3e0cbbd6b1d812518251589f0646b0a1518 (diff)
downloadchromium_src-1cc86c4f686869f32dfede093a07828c73563892.zip
chromium_src-1cc86c4f686869f32dfede093a07828c73563892.tar.gz
chromium_src-1cc86c4f686869f32dfede093a07828c73563892.tar.bz2
Add option to export tracing events to ETW.
- Exporting of ETW events can be turned on using --trace-export-events-to-etw. BUG= Review URL: https://codereview.chromium.org/1038453002 Cr-Commit-Position: refs/heads/master@{#324982}
Diffstat (limited to 'base/trace_event/trace_event_impl.cc')
-rw-r--r--base/trace_event/trace_event_impl.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/base/trace_event/trace_event_impl.cc b/base/trace_event/trace_event_impl.cc
index 834f826e..3cf4f07 100644
--- a/base/trace_event/trace_event_impl.cc
+++ b/base/trace_event/trace_event_impl.cc
@@ -36,6 +36,7 @@
#include "base/trace_event/trace_event_synthetic_delay.h"
#if defined(OS_WIN)
+#include "base/trace_event/trace_event_etw_export_win.h"
#include "base/trace_event/trace_event_win.h"
#endif
@@ -1292,6 +1293,11 @@ void TraceLog::UpdateCategoryGroupEnabledFlag(size_t category_index) {
if (event_callback_ &&
event_callback_category_filter_.IsCategoryGroupEnabled(category_group))
enabled_flag |= ENABLED_FOR_EVENT_CALLBACK;
+#if defined(OS_WIN)
+ if (base::trace_event::TraceEventETWExport::isETWExportEnabled())
+ enabled_flag |= ENABLED_FOR_ETW_EXPORT;
+#endif
+
g_category_group_enabled[category_index] = enabled_flag;
}
@@ -1984,6 +1990,15 @@ TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp(
}
}
+#if defined(OS_WIN)
+ // This is done sooner rather than later, to avoid creating the event and
+ // acquiring the lock, which is not needed for ETW as it's already threadsafe.
+ if (*category_group_enabled & ENABLED_FOR_ETW_EXPORT)
+ TraceEventETWExport::AddEvent(phase, category_group_enabled, name, id,
+ num_args, arg_names, arg_types, arg_values,
+ convertable_values);
+#endif // OS_WIN
+
std::string console_message;
if (*category_group_enabled &
(ENABLED_FOR_RECORDING | ENABLED_FOR_MONITORING)) {