From abe709013c55a7970bfb2cc0bafff90edadec3e2 Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Thu, 3 Dec 2015 14:56:55 -0800 Subject: [PATCH 1/2] Start tracing in base before a tracing controller instance is available --- sky/shell/platform/mac/platform_mac.mm | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/sky/shell/platform/mac/platform_mac.mm b/sky/shell/platform/mac/platform_mac.mm index 8143e5134d8..b2aa12bec3e 100644 --- a/sky/shell/platform/mac/platform_mac.mm +++ b/sky/shell/platform/mac/platform_mac.mm @@ -12,9 +12,11 @@ #include "base/logging.h" #include "base/mac/scoped_nsautorelease_pool.h" #include "base/message_loop/message_loop.h" +#include "base/trace_event/trace_event.h" #include "mojo/edk/embedder/embedder.h" #include "mojo/edk/embedder/simple_platform_support.h" #include "sky/shell/shell.h" +#include "sky/shell/switches.h" #include "sky/shell/ui_delegate.h" #include "ui/gl/gl_surface.h" @@ -53,6 +55,19 @@ int PlatformMacMain(int argc, InitializeLogging(); + base::CommandLine& command_line = *base::CommandLine::ForCurrentProcess(); + if (command_line.HasSwitch(sky::shell::switches::kTraceStartup)) { + // Usually, all tracing within flutter is managed via the tracing controller + // The tracing controller is accessed via the shell instance. This means + // that tracing can only be enabled once that instance is created. Traces + // early in startup are lost. This enables tracing in base manually till + // the tracing controller takes over. + base::trace_event::TraceLog::GetInstance()->SetEnabled( + base::trace_event::TraceConfig("*", + base::trace_event::RECORD_UNTIL_FULL), + base::trace_event::TraceLog::RECORDING_MODE); + } + scoped_ptr message_loop(new base::MessageLoopForUI()); #if TARGET_OS_IPHONE From 95ba64b71156cf33889c38e51764c1e9c9a4347a Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Thu, 3 Dec 2015 15:08:20 -0800 Subject: [PATCH 2/2] Allow enabling tracing in base without an instance of the tracing controller --- sky/shell/platform/mac/platform_mac.mm | 11 ++++------- sky/shell/tracing_controller.h | 7 ++++++- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/sky/shell/platform/mac/platform_mac.mm b/sky/shell/platform/mac/platform_mac.mm index b2aa12bec3e..ba14a744d22 100644 --- a/sky/shell/platform/mac/platform_mac.mm +++ b/sky/shell/platform/mac/platform_mac.mm @@ -12,11 +12,11 @@ #include "base/logging.h" #include "base/mac/scoped_nsautorelease_pool.h" #include "base/message_loop/message_loop.h" -#include "base/trace_event/trace_event.h" #include "mojo/edk/embedder/embedder.h" #include "mojo/edk/embedder/simple_platform_support.h" #include "sky/shell/shell.h" #include "sky/shell/switches.h" +#include "sky/shell/tracing_controller.h" #include "sky/shell/ui_delegate.h" #include "ui/gl/gl_surface.h" @@ -60,12 +60,9 @@ int PlatformMacMain(int argc, // Usually, all tracing within flutter is managed via the tracing controller // The tracing controller is accessed via the shell instance. This means // that tracing can only be enabled once that instance is created. Traces - // early in startup are lost. This enables tracing in base manually till - // the tracing controller takes over. - base::trace_event::TraceLog::GetInstance()->SetEnabled( - base::trace_event::TraceConfig("*", - base::trace_event::RECORD_UNTIL_FULL), - base::trace_event::TraceLog::RECORDING_MODE); + // early in startup are lost. This enables tracing only in base manually + // till the tracing controller takes over. + sky::shell::TracingController::StartBaseTracing(); } scoped_ptr message_loop(new base::MessageLoopForUI()); diff --git a/sky/shell/tracing_controller.h b/sky/shell/tracing_controller.h index a6c5dbd7344..3a587f6ff1e 100644 --- a/sky/shell/tracing_controller.h +++ b/sky/shell/tracing_controller.h @@ -28,6 +28,12 @@ class TracingController { void StopTracing(const base::FilePath& path, bool terminateLoopWhenDone = false); + // Enables tracing in base. Only use this if an instance of a tracing + // controller cannot be obtained (can happen early in the lifecycle of the + // process). In most cases, the |StartTracing| method on an instance of the + // tracing controller should be used. + static void StartBaseTracing(); + base::FilePath PictureTracingPathForCurrentTime() const; base::FilePath PictureTracingPathForCurrentTime(base::FilePath dir) const; @@ -57,7 +63,6 @@ class TracingController { bool tracing_active_; void StartDartTracing(); - void StartBaseTracing(); void StopDartTracing(); void StopBaseTracing(); void FinalizeTraceFile();