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 |