Index: content/browser/browser_main_runner.cc |
diff --git a/content/browser/browser_main_runner.cc b/content/browser/browser_main_runner.cc |
index 16309dec8460af490e891e47ace869c483d258c5..7b98d4ac38b85f946e42c44ee9c53adae0fce6d9 100644 |
--- a/content/browser/browser_main_runner.cc |
+++ b/content/browser/browser_main_runner.cc |
@@ -130,13 +130,23 @@ class BrowserMainRunnerImpl : public BrowserMainRunner { |
// If leaks are found, the process will exit here. |
__lsan_do_leak_check(); |
#endif |
+ // If startup tracing has not been finished yet, replace it's dumper. |
+ scoped_ptr<BrowserShutdownProfileDumper> startup_profiler; |
+ if (main_loop_->is_tracing_startup()) { |
+ startup_profiler.reset( |
+ new BrowserShutdownProfileDumper(main_loop_->startup_trace_file())); |
+ main_loop_->StopStartupTracingTimer(); |
+ } |
+ |
// The shutdown tracing got enabled in AttemptUserExit earlier, but someone |
// needs to write the result to disc. For that a dumper needs to get created |
// which will dump the traces to disc when it gets destroyed. |
const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
- scoped_ptr<BrowserShutdownProfileDumper> profiler; |
- if (command_line.HasSwitch(switches::kTraceShutdown)) |
- profiler.reset(new BrowserShutdownProfileDumper()); |
+ scoped_ptr<BrowserShutdownProfileDumper> shutdown_profiler; |
+ if (command_line.HasSwitch(switches::kTraceShutdown)) { |
+ shutdown_profiler.reset( |
+ new BrowserShutdownProfileDumper(GetShutdownProfileFileName())); |
+ } |
{ |
// The trace event has to stay between profiler creation and destruction. |
@@ -159,6 +169,19 @@ class BrowserMainRunnerImpl : public BrowserMainRunner { |
} |
protected: |
+ // Returns the file name where we should save the shutdown trace dump to. |
+ static base::FilePath GetShutdownProfileFileName() { |
+ const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
+ base::FilePath trace_file = |
+ command_line.GetSwitchValuePath(switches::kTraceShutdownFile); |
+ |
+ if (!trace_file.empty()) |
+ return trace_file; |
+ |
+ // Default to saving the startup trace into the current dir. |
+ return base::FilePath().AppendASCII("chrometrace.log"); |
+ } |
+ |
// True if we have started to initialize the runner. |
bool initialization_started_; |