Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1220)

Unified Diff: content/browser/tracing/trace_controller_impl.cc

Issue 23125009: Add support for writing system traces at startup (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « no previous file | content/browser/tracing/trace_subscriber_stdio.h » ('j') | content/browser/tracing/trace_subscriber_stdio.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698