Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Side by Side Diff: content/browser/browser_main_loop.cc

Issue 22691002: Allow overlapping sync and async startup requests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Allow overlapping sync and async startup requests - fix code review Nits Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « content/browser/browser_main_loop.h ('k') | content/browser/browser_main_runner.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/browser_main_loop.h" 5 #include "content/browser/browser_main_loop.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 #if !defined(OS_IOS) && (!defined(GOOGLE_CHROME_BUILD) || defined(OS_ANDROID)) 520 #if !defined(OS_IOS) && (!defined(GOOGLE_CHROME_BUILD) || defined(OS_ANDROID))
521 // Single-process is an unsupported and not fully tested mode, so 521 // Single-process is an unsupported and not fully tested mode, so
522 // don't enable it for official Chrome builds (except on Android). 522 // don't enable it for official Chrome builds (except on Android).
523 if (parsed_command_line_.HasSwitch(switches::kSingleProcess)) 523 if (parsed_command_line_.HasSwitch(switches::kSingleProcess))
524 RenderProcessHost::SetRunRendererInProcess(true); 524 RenderProcessHost::SetRunRendererInProcess(true);
525 #endif 525 #endif
526 return result_code_; 526 return result_code_;
527 } 527 }
528 528
529 void BrowserMainLoop::CreateStartupTasks() { 529 void BrowserMainLoop::CreateStartupTasks() {
530 TRACE_EVENT0("startup", "BrowserMainLoop::CreateStartupTasks") 530 TRACE_EVENT0("startup", "BrowserMainLoop::CreateStartupTasks");
531
532 // First time through, we really want to create all the tasks
533 if (!startup_task_runner_.get()) {
534 #if defined(OS_ANDROID)
535 startup_task_runner_ = make_scoped_ptr(new StartupTaskRunner(
536 base::Bind(&BrowserStartupComplete),
537 base::MessageLoop::current()->message_loop_proxy()));
538 #else
539 startup_task_runner_ = make_scoped_ptr(new StartupTaskRunner(
540 base::Callback<void(int)>(),
541 base::MessageLoop::current()->message_loop_proxy()));
542 #endif
543 StartupTask pre_create_threads =
544 base::Bind(&BrowserMainLoop::PreCreateThreads, base::Unretained(this));
545 startup_task_runner_->AddTask(pre_create_threads);
546
547 StartupTask create_threads =
548 base::Bind(&BrowserMainLoop::CreateThreads, base::Unretained(this));
549 startup_task_runner_->AddTask(create_threads);
550
551 StartupTask browser_thread_started = base::Bind(
552 &BrowserMainLoop::BrowserThreadsStarted, base::Unretained(this));
553 startup_task_runner_->AddTask(browser_thread_started);
554
555 StartupTask pre_main_message_loop_run = base::Bind(
556 &BrowserMainLoop::PreMainMessageLoopRun, base::Unretained(this));
557 startup_task_runner_->AddTask(pre_main_message_loop_run);
531 558
532 #if defined(OS_ANDROID) 559 #if defined(OS_ANDROID)
533 scoped_refptr<StartupTaskRunner> task_runner = 560 if (BrowserMayStartAsynchronously()) {
534 new StartupTaskRunner(BrowserMayStartAsynchronously(), 561 startup_task_runner_->StartRunningTasksAsync();
535 base::Bind(&BrowserStartupComplete), 562 }
536 base::MessageLoop::current()->message_loop_proxy()); 563 #endif
564 }
565 #if defined(OS_ANDROID)
566 if (!BrowserMayStartAsynchronously()) {
567 // A second request for asynchronous startup can be ignored, so
568 // StartupRunningTasksAsync is only called first time through. If, however,
569 // this is a request for synchronous startup then it must override any
570 // previous call for async startup, so we call RunAllTasksNow()
571 // unconditionally.
572 startup_task_runner_->RunAllTasksNow();
573 }
537 #else 574 #else
538 scoped_refptr<StartupTaskRunner> task_runner = 575 startup_task_runner_->RunAllTasksNow();
539 new StartupTaskRunner(false,
540 base::Callback<void(int)>(),
541 base::MessageLoop::current()->message_loop_proxy());
542 #endif 576 #endif
543 StartupTask pre_create_threads =
544 base::Bind(&BrowserMainLoop::PreCreateThreads, base::Unretained(this));
545 task_runner->AddTask(pre_create_threads);
546
547 StartupTask create_threads =
548 base::Bind(&BrowserMainLoop::CreateThreads, base::Unretained(this));
549 task_runner->AddTask(create_threads);
550
551 StartupTask browser_thread_started = base::Bind(
552 &BrowserMainLoop::BrowserThreadsStarted, base::Unretained(this));
553 task_runner->AddTask(browser_thread_started);
554
555 StartupTask pre_main_message_loop_run = base::Bind(
556 &BrowserMainLoop::PreMainMessageLoopRun, base::Unretained(this));
557 task_runner->AddTask(pre_main_message_loop_run);
558
559 task_runner->StartRunningTasks();
560 } 577 }
561 578
562 int BrowserMainLoop::CreateThreads() { 579 int BrowserMainLoop::CreateThreads() {
563 TRACE_EVENT0("startup", "BrowserMainLoop::CreateThreads"); 580 TRACE_EVENT0("startup", "BrowserMainLoop::CreateThreads");
564 581
565 base::Thread::Options default_options; 582 base::Thread::Options default_options;
566 base::Thread::Options io_message_loop_options; 583 base::Thread::Options io_message_loop_options;
567 io_message_loop_options.message_loop_type = base::MessageLoop::TYPE_IO; 584 io_message_loop_options.message_loop_type = base::MessageLoop::TYPE_IO;
568 base::Thread::Options ui_message_loop_options; 585 base::Thread::Options ui_message_loop_options;
569 ui_message_loop_options.message_loop_type = base::MessageLoop::TYPE_UI; 586 ui_message_loop_options.message_loop_type = base::MessageLoop::TYPE_UI;
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
973 if (parameters_.ui_task) 990 if (parameters_.ui_task)
974 base::MessageLoopForUI::current()->PostTask(FROM_HERE, 991 base::MessageLoopForUI::current()->PostTask(FROM_HERE,
975 *parameters_.ui_task); 992 *parameters_.ui_task);
976 993
977 base::RunLoop run_loop; 994 base::RunLoop run_loop;
978 run_loop.Run(); 995 run_loop.Run();
979 #endif 996 #endif
980 } 997 }
981 998
982 } // namespace content 999 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/browser_main_loop.h ('k') | content/browser/browser_main_runner.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698