| Index: content/browser/tracing/etw_system_event_consumer_win.cc
|
| diff --git a/content/browser/tracing/etw_system_event_consumer_win.cc b/content/browser/tracing/etw_system_event_consumer_win.cc
|
| index 529800f2202c48f7efce6795e2475e7acf20e0aa..d1a12cc0ff7aab9a889dc9bd21138a161fc820db 100644
|
| --- a/content/browser/tracing/etw_system_event_consumer_win.cc
|
| +++ b/content/browser/tracing/etw_system_event_consumer_win.cc
|
| @@ -17,6 +17,9 @@ namespace content {
|
|
|
| namespace {
|
|
|
| +const char kETWTracingAgentName[] = "etw";
|
| +const char kETWTraceLabel[] = "systemTraceEvents";
|
| +
|
| const int kEtwBufferSizeInKBytes = 16;
|
| const int kEtwBufferFlushTimeoutInSeconds = 1;
|
|
|
| @@ -36,8 +39,16 @@ EtwSystemEventConsumer::EtwSystemEventConsumer()
|
| EtwSystemEventConsumer::~EtwSystemEventConsumer() {
|
| }
|
|
|
| -bool EtwSystemEventConsumer::StartSystemTracing() {
|
| +std::string EtwSystemEventConsumer::GetTracingAgentName() {
|
| + return kETWTracingAgentName;
|
| +}
|
|
|
| +std::string EtwSystemEventConsumer::GetTraceEventLabel() {
|
| + return kETWTraceLabel;
|
| +}
|
| +
|
| +bool EtwSystemEventConsumer::StartAgentTracing(
|
| + const base::trace_event::TraceConfig& trace_config) {
|
| // Activate kernel tracing.
|
| if (!StartKernelSessionTracing())
|
| return false;
|
| @@ -52,31 +63,29 @@ bool EtwSystemEventConsumer::StartSystemTracing() {
|
| return true;
|
| }
|
|
|
| -void EtwSystemEventConsumer::StopSystemTracing(const OutputCallback& callback) {
|
| +void EtwSystemEventConsumer::StopAgentTracing(
|
| + const StopAgentTracingCallback& callback) {
|
| // Deactivate kernel tracing.
|
| if (!StopKernelSessionTracing()) {
|
| LOG(FATAL) << "Could not stop system tracing.";
|
| }
|
|
|
| // Stop consuming and flush events.
|
| - OutputCallback on_stop_system_tracing_done_callback =
|
| - base::Bind(&EtwSystemEventConsumer::OnStopSystemTracingDone,
|
| - base::Unretained(this),
|
| - callback);
|
| thread_.message_loop()->PostTask(FROM_HERE,
|
| base::Bind(&EtwSystemEventConsumer::FlushOnThread,
|
| - base::Unretained(this), on_stop_system_tracing_done_callback));
|
| + base::Unretained(this),
|
| + callback));
|
| }
|
|
|
| void EtwSystemEventConsumer::OnStopSystemTracingDone(
|
| - const OutputCallback& callback,
|
| + const StopAgentTracingCallback& callback,
|
| const scoped_refptr<base::RefCountedString>& result) {
|
|
|
| // Stop the consumer thread.
|
| thread_.Stop();
|
|
|
| // Pass the serialized events.
|
| - callback.Run(result);
|
| + callback.Run(GetTracingAgentName(), GetTraceEventLabel(), result);
|
| }
|
|
|
| bool EtwSystemEventConsumer::StartKernelSessionTracing() {
|
| @@ -209,7 +218,8 @@ void EtwSystemEventConsumer::TraceAndConsumeOnThread() {
|
| Close();
|
| }
|
|
|
| -void EtwSystemEventConsumer::FlushOnThread(const OutputCallback& callback) {
|
| +void EtwSystemEventConsumer::FlushOnThread(
|
| + const StopAgentTracingCallback& callback) {
|
| // Add the header information to the stream.
|
| scoped_ptr<base::DictionaryValue> header(new base::DictionaryValue());
|
| header->Set("name", new base::StringValue("ETW"));
|
| @@ -225,8 +235,12 @@ void EtwSystemEventConsumer::FlushOnThread(const OutputCallback& callback) {
|
| // Pass the result to the UI Thread.
|
| scoped_refptr<base::RefCountedString> result =
|
| base::RefCountedString::TakeString(&output);
|
| - BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
|
| - base::Bind(callback, result));
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI, FROM_HERE,
|
| + base::Bind(&EtwSystemEventConsumer::OnStopSystemTracingDone,
|
| + base::Unretained(this),
|
| + callback,
|
| + result));
|
| }
|
|
|
| } // namespace content
|
|
|