Chromium Code Reviews| Index: content/browser/tracing/trace_controller_impl.cc |
| diff --git a/content/browser/tracing/trace_controller_impl.cc b/content/browser/tracing/trace_controller_impl.cc |
| index 54e0c86cb4268597afcdc557fa8bd0501761a90b..ae5d1d2d111c15a2d6fef0eaae7f45d00558eff7 100644 |
| --- a/content/browser/tracing/trace_controller_impl.cc |
| +++ b/content/browser/tracing/trace_controller_impl.cc |
| @@ -14,11 +14,22 @@ |
| #include "content/public/browser/browser_message_filter.h" |
| #include "content/public/common/content_switches.h" |
| +#if defined(OS_CHROMEOS) |
| +#include "chromeos/dbus/dbus_thread_manager.h" |
| +#include "chromeos/dbus/debug_daemon_client.h" |
| +#endif |
| + |
| using base::debug::TraceLog; |
| namespace content { |
| namespace { |
| +#if defined(OS_CHROMEOS) |
| +const bool kUseSystemTrace = true; |
| +#else |
| +const bool kUseSystemTrace = false; |
| +#endif |
| + |
| base::LazyInstance<TraceControllerImpl>::Leaky g_controller = |
| LAZY_INSTANCE_INITIALIZER; |
| @@ -26,20 +37,43 @@ base::LazyInstance<TraceControllerImpl>::Leaky g_controller = |
| class AutoStopTraceSubscriberStdio : public TraceSubscriberStdio { |
| public: |
| AutoStopTraceSubscriberStdio(const base::FilePath& file_path) |
| - : TraceSubscriberStdio(file_path) {} |
| + : TraceSubscriberStdio(file_path, |
| + FILE_TYPE_PROPERTY_LIST, |
| + kUseSystemTrace), |
| + tracing_completed_(false), |
| + system_tracing_completed_(!kUseSystemTrace) {} |
| - static void EndStartupTrace(TraceSubscriberStdio* subscriber) { |
| + static void EndStartupTrace(AutoStopTraceSubscriberStdio* subscriber) { |
| if (!TraceControllerImpl::GetInstance()->EndTracingAsync(subscriber)) |
| delete subscriber; |
| +#if defined(OS_CHROMEOS) |
| + chromeos::DBusThreadManager::Get()->GetDebugDaemonClient()-> |
| + RequestStopSystemTracing( |
| + base::Bind(&AutoStopTraceSubscriberStdio::OnEndSystemTracing, |
| + base::Unretained(subscriber))); |
| +#endif |
| // else, the tracing will end asynchronously in OnEndTracingComplete(). |
| } |
| virtual void OnEndTracingComplete() OVERRIDE { |
| TraceSubscriberStdio::OnEndTracingComplete(); |
| - delete this; |
| + if (system_tracing_completed_) |
|
dsinclair
2013/08/19 20:12:26
Are both of these methods guaranteed to be called
DaveMoore
2013/08/19 22:07:46
I believe they will both be called on the calling
|
| + delete this; |
| // TODO(joth): this would be the time to automatically open up |
|
dsinclair
2013/08/19 20:12:26
tracing_completed_ = true;?
DaveMoore
2013/08/19 22:07:46
Done.
|
| // chrome://tracing/ and load up the trace data collected. |
| } |
| + |
| + virtual void OnEndSystemTracing( |
| + const scoped_refptr<base::RefCountedString>& events_str_ptr) |
| + OVERRIDE { |
| + TraceSubscriberStdio::OnEndSystemTracing(events_str_ptr); |
| + if (tracing_completed_) |
| + delete this; |
|
dsinclair
2013/08/19 20:12:26
system_tracing_completed_ = true?
DaveMoore
2013/08/19 22:07:46
Done.
|
| + } |
| + |
| + private: |
| + bool tracing_completed_; |
| + bool system_tracing_completed_; |
| }; |
| } // namespace |