Chromium Code Reviews| Index: content/browser/browser_main_loop.cc |
| diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc |
| index b5159df02a3e91b640f71dc37d0e5e82f77e634a..df19ee86f070e4da101a1a94f7167b9a1cd9390f 100644 |
| --- a/content/browser/browser_main_loop.cc |
| +++ b/content/browser/browser_main_loop.cc |
| @@ -26,6 +26,7 @@ |
| #include "base/timer/hi_res_timer_manager.h" |
| #include "base/trace_event/memory_dump_manager.h" |
| #include "base/trace_event/trace_event.h" |
| +#include "components/tracing/trace_config_file.h" |
| #include "components/tracing/tracing_switches.h" |
| #include "content/browser/browser_thread_impl.h" |
| #include "content/browser/device_sensors/device_inertial_sensor_service.h" |
| @@ -390,9 +391,11 @@ BrowserMainLoop::BrowserMainLoop(const MainFunctionParams& parameters) |
| result_code_(RESULT_CODE_NORMAL_EXIT), |
| created_threads_(false), |
| // ContentMainRunner should have enabled tracing of the browser process |
|
no sievers
2015/08/24 22:50:16
If so, can we simply do:
DCHECK_IMPLIES(parameters
Zhen Wang
2015/08/25 17:38:14
I am not aware of any other ways lead to tracing b
|
| - // when kTraceStartup is in the command line. |
| - is_tracing_startup_( |
| - parameters.command_line.HasSwitch(switches::kTraceStartup)) { |
| + // when kTraceStartup or kTraceConfigFile is in the command line. |
| + is_tracing_startup_for_duration_( |
| + parameters.command_line.HasSwitch(switches::kTraceStartup) || |
| + (tracing::TraceConfigFile::GetInstance()->IsEnabled() && |
| + tracing::TraceConfigFile::GetInstance()->GetStartupDuration() > 0)) { |
|
no sievers
2015/08/24 22:50:16
Are there other ways than the two command lines (c
Zhen Wang
2015/08/25 17:38:14
ditto
|
| DCHECK(!g_current_browser_main_loop); |
| g_current_browser_main_loop = this; |
| } |
| @@ -578,9 +581,9 @@ void BrowserMainLoop::PostMainMessageLoopStart() { |
| // Start tracing to a file if needed. Only do this after starting the main |
| // message loop to avoid calling MessagePumpForUI::ScheduleWork() before |
| // MessagePumpForUI::Start() as it will crash the browser. |
| - if (is_tracing_startup_) { |
| - TRACE_EVENT0("startup", "BrowserMainLoop::InitStartupTracing"); |
| - InitStartupTracing(parsed_command_line_); |
| + if (is_tracing_startup_for_duration_) { |
| + TRACE_EVENT0("startup", "BrowserMainLoop::InitStartupTracingForDuration"); |
| + InitStartupTracingForDuration(parsed_command_line_); |
| } |
| #endif // !defined(OS_IOS) |
| @@ -1316,39 +1319,52 @@ void BrowserMainLoop::MainMessageLoopRun() { |
| base::FilePath BrowserMainLoop::GetStartupTraceFileName( |
| const base::CommandLine& command_line) const { |
| - 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 trace_file; |
| - |
| - if (trace_file.empty()) { |
| + base::FilePath trace_file; |
| + if (command_line.HasSwitch(switches::kTraceStartup)) { |
| + 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 trace_file; |
| + |
| + if (trace_file.empty()) { |
| +#if defined(OS_ANDROID) |
| + TracingControllerAndroid::GenerateTracingFilePath(&trace_file); |
| +#else |
| + // Default to saving the startup trace into the current dir. |
| + trace_file = base::FilePath().AppendASCII("chrometrace.log"); |
| +#endif |
| + } |
| + } else { |
| #if defined(OS_ANDROID) |
| TracingControllerAndroid::GenerateTracingFilePath(&trace_file); |
| #else |
| - // Default to saving the startup trace into the current dir. |
| - trace_file = base::FilePath().AppendASCII("chrometrace.log"); |
| + trace_file = tracing::TraceConfigFile::GetInstance()->GetResultFile(); |
| #endif |
| } |
| return trace_file; |
| } |
| -void BrowserMainLoop::InitStartupTracing( |
| +void BrowserMainLoop::InitStartupTracingForDuration( |
| const base::CommandLine& command_line) { |
| - DCHECK(is_tracing_startup_); |
| + DCHECK(is_tracing_startup_for_duration_); |
| startup_trace_file_ = GetStartupTraceFileName(parsed_command_line_); |
| - 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; |
| + if (command_line.HasSwitch(switches::kTraceStartup)) { |
| + std::string delay_str = command_line.GetSwitchValueASCII( |
| + switches::kTraceStartupDuration); |
| + 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; |
| + } |
| + } else { |
| + delay_secs = tracing::TraceConfigFile::GetInstance()->GetStartupDuration(); |
| } |
| startup_trace_timer_.Start(FROM_HERE, |
| @@ -1358,9 +1374,9 @@ void BrowserMainLoop::InitStartupTracing( |
| } |
| void BrowserMainLoop::EndStartupTracing() { |
| - DCHECK(is_tracing_startup_); |
| + DCHECK(is_tracing_startup_for_duration_); |
| - is_tracing_startup_ = false; |
| + is_tracing_startup_for_duration_ = false; |
| TracingController::GetInstance()->DisableRecording( |
| TracingController::CreateFileSink( |
| startup_trace_file_, |