OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |