diff options
Diffstat (limited to 'content/browser/browser_main_loop.cc')
-rw-r--r-- | content/browser/browser_main_loop.cc | 61 |
1 files changed, 39 insertions, 22 deletions
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc index 8bf6503..87bec3d 100644 --- a/content/browser/browser_main_loop.cc +++ b/content/browser/browser_main_loop.cc @@ -527,36 +527,53 @@ int BrowserMainLoop::PreCreateThreads() { } void BrowserMainLoop::CreateStartupTasks() { - TRACE_EVENT0("startup", "BrowserMainLoop::CreateStartupTasks") + TRACE_EVENT0("startup", "BrowserMainLoop::CreateStartupTasks"); + // First time through, we really want to create all the tasks + if (!startup_task_runner_.get()) { #if defined(OS_ANDROID) - scoped_refptr<StartupTaskRunner> task_runner = - new StartupTaskRunner(BrowserMayStartAsynchronously(), - base::Bind(&BrowserStartupComplete), - base::MessageLoop::current()->message_loop_proxy()); + startup_task_runner_ = make_scoped_ptr(new StartupTaskRunner( + base::Bind(&BrowserStartupComplete), + base::MessageLoop::current()->message_loop_proxy())); #else - scoped_refptr<StartupTaskRunner> task_runner = - new StartupTaskRunner(false, - base::Callback<void(int)>(), - base::MessageLoop::current()->message_loop_proxy()); + startup_task_runner_ = make_scoped_ptr(new StartupTaskRunner( + base::Callback<void(int)>(), + base::MessageLoop::current()->message_loop_proxy())); #endif - StartupTask pre_create_threads = - base::Bind(&BrowserMainLoop::PreCreateThreads, base::Unretained(this)); - task_runner->AddTask(pre_create_threads); + StartupTask pre_create_threads = + base::Bind(&BrowserMainLoop::PreCreateThreads, base::Unretained(this)); + startup_task_runner_->AddTask(pre_create_threads); - StartupTask create_threads = - base::Bind(&BrowserMainLoop::CreateThreads, base::Unretained(this)); - task_runner->AddTask(create_threads); + StartupTask create_threads = + base::Bind(&BrowserMainLoop::CreateThreads, base::Unretained(this)); + startup_task_runner_->AddTask(create_threads); - StartupTask browser_thread_started = base::Bind( - &BrowserMainLoop::BrowserThreadsStarted, base::Unretained(this)); - task_runner->AddTask(browser_thread_started); + StartupTask browser_thread_started = base::Bind( + &BrowserMainLoop::BrowserThreadsStarted, base::Unretained(this)); + startup_task_runner_->AddTask(browser_thread_started); - StartupTask pre_main_message_loop_run = base::Bind( - &BrowserMainLoop::PreMainMessageLoopRun, base::Unretained(this)); - task_runner->AddTask(pre_main_message_loop_run); + StartupTask pre_main_message_loop_run = base::Bind( + &BrowserMainLoop::PreMainMessageLoopRun, base::Unretained(this)); + startup_task_runner_->AddTask(pre_main_message_loop_run); - task_runner->StartRunningTasks(); +#if defined(OS_ANDROID) + if (BrowserMayStartAsynchronously()) { + startup_task_runner_->StartRunningTasksAsync(); + } +#endif + } +#if defined(OS_ANDROID) + if (!BrowserMayStartAsynchronously()) { + // A second request for asynchronous startup can be ignored, so + // StartupRunningTasksAsync is only called first time through. If, however, + // this is a request for synchronous startup then it must override any + // previous call for async startup, so we call RunAllTasksNow() + // unconditionally. + startup_task_runner_->RunAllTasksNow(); + } +#else + startup_task_runner_->RunAllTasksNow(); +#endif } int BrowserMainLoop::CreateThreads() { |