summaryrefslogtreecommitdiffstats
path: root/mandoline
diff options
context:
space:
mode:
authorerg <erg@chromium.org>2015-10-20 17:18:51 -0700
committerCommit bot <commit-bot@chromium.org>2015-10-21 00:19:42 +0000
commit83e47b933a49ee7ba011a862eb706a0d25ec1624 (patch)
tree13d8668c7c50cecb3c21972238409d1dd53cfa51 /mandoline
parent59647ecac9524d954010d3d10b539ee4a340bf94 (diff)
downloadchromium_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.cc88
-rw-r--r--mandoline/services/core_services/BUILD.gn2
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",