diff options
author | erg <erg@chromium.org> | 2015-10-20 17:18:51 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-21 00:19:42 +0000 |
commit | 83e47b933a49ee7ba011a862eb706a0d25ec1624 (patch) | |
tree | 13d8668c7c50cecb3c21972238409d1dd53cfa51 /mandoline | |
parent | 59647ecac9524d954010d3d10b539ee4a340bf94 (diff) | |
download | chromium_src-83e47b933a49ee7ba011a862eb706a0d25ec1624.zip chromium_src-83e47b933a49ee7ba011a862eb706a0d25ec1624.tar.gz chromium_src-83e47b933a49ee7ba011a862eb706a0d25ec1624.tar.bz2 |
Port over the mojo tracing service from the mojo repo.
When we unforked from the mojo repo, we got the tracing service in a
state where it didn't reliably collect reports from different
processes. This ports all the startup time tracking changes we added to
the tracing application onto the mojo repo's tracing service.
With this change, mandoline traces go from totally useless to merely
missing most of the data.
BUG=534895
R=msw@chromium.org
TBR=ben@chromium.org
Review URL: https://codereview.chromium.org/1415843003
Cr-Commit-Position: refs/heads/master@{#355197}
Diffstat (limited to 'mandoline')
-rw-r--r-- | mandoline/app/desktop/launcher_process.cc | 88 | ||||
-rw-r--r-- | mandoline/services/core_services/BUILD.gn | 2 |
2 files changed, 14 insertions, 76 deletions
diff --git a/mandoline/app/desktop/launcher_process.cc b/mandoline/app/desktop/launcher_process.cc index 2424045..0b28d7a 100644 --- a/mandoline/app/desktop/launcher_process.cc +++ b/mandoline/app/desktop/launcher_process.cc @@ -21,97 +21,34 @@ #include "mandoline/app/desktop/launcher_process.h" #include "mojo/runner/context.h" #include "mojo/runner/switches.h" +#include "mojo/runner/tracer.h" namespace mandoline { -namespace { - -// Whether we're currently tracing. -bool g_tracing = false; - -// Number of tracing blocks written. -uint32_t g_blocks = 0; - -// Trace file, if open. -FILE* g_trace_file = nullptr; - -void WriteTraceDataCollected( - base::WaitableEvent* event, - const scoped_refptr<base::RefCountedString>& events_str, - bool has_more_events) { - if (g_blocks) { - fwrite(",", 1, 1, g_trace_file); - } - - ++g_blocks; - fwrite(events_str->data().c_str(), 1, events_str->data().length(), - g_trace_file); - if (!has_more_events) { - static const char kEnd[] = "]}"; - fwrite(kEnd, 1, strlen(kEnd), g_trace_file); - PCHECK(fclose(g_trace_file) == 0); - g_trace_file = nullptr; - event->Signal(); - } -} - -void EndTraceAndFlush(base::WaitableEvent* event) { - g_trace_file = fopen("mojo_shell.trace", "w+"); - PCHECK(g_trace_file); - static const char kStart[] = "{\"traceEvents\":["; - fwrite(kStart, 1, strlen(kStart), g_trace_file); - base::trace_event::TraceLog::GetInstance()->SetDisabled(); - base::trace_event::TraceLog::GetInstance()->Flush( - base::Bind(&WriteTraceDataCollected, base::Unretained(event))); -} - -void StopTracingAndFlushToDisk() { - g_tracing = false; - base::trace_event::TraceLog::GetInstance()->SetDisabled(); - base::WaitableEvent flush_complete_event(false, false); - // TraceLog::Flush requires a message loop but we've already shut ours down. - // Spin up a new thread to flush things out. - base::Thread flush_thread("mojo_shell_trace_event_flush"); - flush_thread.Start(); - flush_thread.message_loop()->PostTask( - FROM_HERE, - base::Bind(EndTraceAndFlush, base::Unretained(&flush_complete_event))); - flush_complete_event.Wait(); -} - -} // namespace int LauncherProcessMain(int argc, char** argv) { + mojo::runner::Tracer tracer; const base::CommandLine& command_line = *base::CommandLine::ForCurrentProcess(); - if (command_line.HasSwitch(switches::kTraceStartup)) { - g_tracing = true; - base::trace_event::TraceConfig trace_config( + + bool trace_startup = command_line.HasSwitch(switches::kTraceStartup); + if (trace_startup) { + tracer.Start( command_line.GetSwitchValueASCII(switches::kTraceStartup), - base::trace_event::RECORD_UNTIL_FULL); - base::trace_event::TraceLog::GetInstance()->SetEnabled( - trace_config, base::trace_event::TraceLog::RECORDING_MODE); - } else if (tracing::TraceConfigFile::GetInstance()->IsEnabled()) { - g_tracing = true; - base::trace_event::TraceLog::GetInstance()->SetEnabled( - tracing::TraceConfigFile::GetInstance()->GetTraceConfig(), - base::trace_event::TraceLog::RECORDING_MODE); + command_line.GetSwitchValueASCII(switches::kTraceStartupDuration), + "mandoline.trace"); } // We want the runner::Context to outlive the MessageLoop so that pipes are // all gracefully closed / error-out before we try to shut the Context down. base::FilePath shell_dir; PathService::Get(base::DIR_MODULE, &shell_dir); - mojo::runner::Context shell_context(shell_dir); + mojo::runner::Context shell_context(shell_dir, &tracer); { base::MessageLoop message_loop; + tracer.DidCreateMessageLoop(); if (!shell_context.Init()) { return 0; } - if (g_tracing) { - message_loop.PostDelayedTask(FROM_HERE, - base::Bind(StopTracingAndFlushToDisk), - base::TimeDelta::FromSeconds(5)); - } message_loop.PostTask(FROM_HERE, base::Bind(&mojo::runner::Context::Run, @@ -123,8 +60,9 @@ int LauncherProcessMain(int argc, char** argv) { shell_context.Shutdown(); } - if (g_tracing) - StopTracingAndFlushToDisk(); + if (trace_startup) + tracer.StopAndFlushToFile(); + return 0; } diff --git a/mandoline/services/core_services/BUILD.gn b/mandoline/services/core_services/BUILD.gn index 9edb1f1..f3b6ed7 100644 --- a/mandoline/services/core_services/BUILD.gn +++ b/mandoline/services/core_services/BUILD.gn @@ -48,10 +48,10 @@ source_set("sources") { "//components/filesystem:lib", "//components/web_view:lib", "//mojo/application/public/cpp", - "//mojo/common:tracing_impl", "//mojo/logging", "//mojo/message_pump", "//mojo/services/tracing:lib", + "//mojo/services/tracing/public/cpp", "//third_party/icu", "//third_party/mojo/src/mojo/public/cpp/bindings", "//url", |