summaryrefslogtreecommitdiffstats
path: root/content/browser/tracing/etw_system_event_consumer_win.h
diff options
context:
space:
mode:
authoretienneb@chromium.org <etienneb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-09 03:59:50 +0000
committeretienneb@chromium.org <etienneb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-09 03:59:50 +0000
commit41fabf8e2dd3a847cbdad05da9b43fd9a99d741a (patch)
tree81c9c57a37c658eb9d59ebba56b7fa3416993b52 /content/browser/tracing/etw_system_event_consumer_win.h
parent4fef343df71ae6f63227b55dd5cdaf2d732315e1 (diff)
downloadchromium_src-41fabf8e2dd3a847cbdad05da9b43fd9a99d741a.zip
chromium_src-41fabf8e2dd3a847cbdad05da9b43fd9a99d741a.tar.gz
chromium_src-41fabf8e2dd3a847cbdad05da9b43fd9a99d741a.tar.bz2
Implements Windows system tracing.
This CL brings the tracing information into the resulting JSon. As tracing needs administrator rights, we assume that Chrome is launched as administrator. To be able to view events, the traceviewer part must land first. see: https://codereview.appspot.com/51300043/ BUG= Review URL: https://codereview.chromium.org/171143002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@255818 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/tracing/etw_system_event_consumer_win.h')
-rw-r--r--content/browser/tracing/etw_system_event_consumer_win.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/content/browser/tracing/etw_system_event_consumer_win.h b/content/browser/tracing/etw_system_event_consumer_win.h
new file mode 100644
index 0000000..8d1764f
--- /dev/null
+++ b/content/browser/tracing/etw_system_event_consumer_win.h
@@ -0,0 +1,75 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_TRACING_TRACING_CONSUMER_WIN_H_
+#define CONTENT_BROWSER_TRACING_TRACING_CONSUMER_WIN_H_
+
+#include "base/bind.h"
+#include "base/memory/ref_counted_memory.h"
+#include "base/threading/thread.h"
+#include "base/values.h"
+#include "base/win/event_trace_consumer.h"
+#include "base/win/event_trace_controller.h"
+
+template <typename Type>
+struct DefaultSingletonTraits;
+
+namespace content {
+
+class EtwSystemEventConsumer :
+ public base::win::EtwTraceConsumerBase<EtwSystemEventConsumer> {
+ public:
+ typedef base::Callback<void(const scoped_refptr<base::RefCountedString>&)>
+ OutputCallback;
+
+ bool StartSystemTracing();
+ void StopSystemTracing(const OutputCallback& callback);
+
+ // Retrieve the ETW consumer instance.
+ static EtwSystemEventConsumer* GetInstance();
+
+ private:
+ // This allows constructor and destructor to be private and usable only
+ // by the Singleton class.
+ friend struct DefaultSingletonTraits<EtwSystemEventConsumer>;
+
+ // Constructor.
+ EtwSystemEventConsumer();
+ virtual ~EtwSystemEventConsumer();
+
+ void AddSyncEventToBuffer();
+ void AppendEventToBuffer(EVENT_TRACE* event);
+
+ // Static override of EtwTraceConsumerBase::ProcessEvent.
+ // @param event the raw ETW event to process.
+ friend class base::win::EtwTraceConsumerBase<EtwSystemEventConsumer>;
+ static void ProcessEvent(EVENT_TRACE* event);
+
+ // Request the ETW trace controller to activate the kernel tracing.
+ // returns true on success, false if the kernel tracing isn't activated.
+ bool StartKernelSessionTracing();
+
+ // Request the ETW trace controller to deactivate the kernel tracing.
+ // @param callback the callback to call with the consumed events.
+ // @returns true on success, false if an error occurred.
+ bool StopKernelSessionTracing();
+
+ void OnStopSystemTracingDone(
+ const OutputCallback& callback,
+ const scoped_refptr<base::RefCountedString>& result);
+
+ void TraceAndConsumeOnThread();
+ void FlushOnThread(const OutputCallback& callback);
+
+ scoped_ptr<base::ListValue> events_;
+ base::Thread thread_;
+ TRACEHANDLE session_handle_;
+ base::win::EtwTraceProperties properties_;
+
+ DISALLOW_COPY_AND_ASSIGN(EtwSystemEventConsumer);
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_TRACING_TRACING_CONSUMER_WIN_H_