| Index: content/browser/browser_main_loop.cc
|
| diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc
|
| index 89f30216577e6f55b4510735afc68e62a368f71d..b6db2c7fef962e3f0547a03aa3cac3ed062a3c07 100644
|
| --- a/content/browser/browser_main_loop.cc
|
| +++ b/content/browser/browser_main_loop.cc
|
| @@ -41,13 +41,13 @@
|
| #include "content/browser/renderer_host/render_process_host_impl.h"
|
| #include "content/browser/speech/speech_recognition_manager_impl.h"
|
| #include "content/browser/startup_task_runner.h"
|
| -#include "content/browser/tracing/trace_controller_impl.h"
|
| #include "content/browser/webui/content_web_ui_controller_factory.h"
|
| #include "content/browser/webui/url_data_manager.h"
|
| #include "content/public/browser/browser_main_parts.h"
|
| #include "content/public/browser/browser_shutdown.h"
|
| #include "content/public/browser/content_browser_client.h"
|
| #include "content/public/browser/render_process_host.h"
|
| +#include "content/public/browser/tracing_controller.h"
|
| #include "content/public/common/content_switches.h"
|
| #include "content/public/common/main_function_params.h"
|
| #include "content/public/common/result_codes.h"
|
| @@ -318,7 +318,10 @@ BrowserMainLoop::BrowserMainLoop(const MainFunctionParams& parameters)
|
| : parameters_(parameters),
|
| parsed_command_line_(parameters.command_line),
|
| result_code_(RESULT_CODE_NORMAL_EXIT),
|
| - created_threads_(false) {
|
| + created_threads_(false),
|
| + // ContentMainRunner should have enabled tracing of the browser process
|
| + // when kTraceStartup is in the command line.
|
| + is_tracing_startup_(base::debug::TraceLog::GetInstance()->IsEnabled()) {
|
| DCHECK(!g_current_browser_main_loop);
|
| g_current_browser_main_loop = this;
|
| }
|
| @@ -474,10 +477,9 @@ void BrowserMainLoop::MainMessageLoopStart() {
|
| }
|
|
|
| // Start tracing to a file if needed.
|
| - if (base::debug::TraceLog::GetInstance()->IsEnabled()) {
|
| + if (is_tracing_startup_) {
|
| TRACE_EVENT0("startup", "BrowserMainLoop::InitStartupTracing")
|
| - TraceControllerImpl::GetInstance()->InitStartupTracing(
|
| - parsed_command_line_);
|
| + InitStartupTracing(parsed_command_line_);
|
| }
|
|
|
| {
|
| @@ -1074,4 +1076,42 @@ void BrowserMainLoop::MainMessageLoopRun() {
|
| #endif
|
| }
|
|
|
| +void BrowserMainLoop::InitStartupTracing(const CommandLine& command_line) {
|
| + DCHECK(is_tracing_startup_);
|
| +
|
| + base::FilePath trace_file = command_line.GetSwitchValuePath(
|
| + switches::kTraceStartupFile);
|
| + // trace_file = "none" means that startup events will show up for the next
|
| + // begin/end tracing (via about:tracing or AutomationProxy::BeginTracing/
|
| + // EndTracing, for example).
|
| + if (trace_file == base::FilePath().AppendASCII("none"))
|
| + return;
|
| +
|
| + if (trace_file.empty()) {
|
| + // Default to saving the startup trace into the current dir.
|
| + trace_file = base::FilePath().AppendASCII("chrometrace.log");
|
| + }
|
| +
|
| + std::string delay_str = command_line.GetSwitchValueASCII(
|
| + switches::kTraceStartupDuration);
|
| + int delay_secs = 5;
|
| + if (!delay_str.empty() && !base::StringToInt(delay_str, &delay_secs)) {
|
| + DLOG(WARNING) << "Could not parse --" << switches::kTraceStartupDuration
|
| + << "=" << delay_str << " defaulting to 5 (secs)";
|
| + delay_secs = 5;
|
| + }
|
| +
|
| + BrowserThread::PostDelayedTask(
|
| + BrowserThread::UI, FROM_HERE,
|
| + base::Bind(&BrowserMainLoop::EndStartupTracing,
|
| + base::Unretained(this), trace_file),
|
| + base::TimeDelta::FromSeconds(delay_secs));
|
| +}
|
| +
|
| +void BrowserMainLoop::EndStartupTracing(const base::FilePath& trace_file) {
|
| + is_tracing_startup_ = false;
|
| + TracingController::GetInstance()->DisableRecording(
|
| + trace_file, TracingController::TracingFileResultCallback());
|
| +}
|
| +
|
| } // namespace content
|
|
|