| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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.h" | 5 #include "content/browser/browser_main.h" |
| 6 | 6 |
| 7 #include "base/allocator/allocator_shim.h" | 7 #include "base/allocator/allocator_shim.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/logging.h" | 10 #include "base/logging.h" |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 system_monitor_.reset(new base::SystemMonitor); | 245 system_monitor_.reset(new base::SystemMonitor); |
| 246 hi_res_timer_manager_.reset(new HighResolutionTimerManager); | 246 hi_res_timer_manager_.reset(new HighResolutionTimerManager); |
| 247 | 247 |
| 248 InitializeMainThread(); | 248 InitializeMainThread(); |
| 249 | 249 |
| 250 network_change_notifier_.reset(net::NetworkChangeNotifier::Create()); | 250 network_change_notifier_.reset(net::NetworkChangeNotifier::Create()); |
| 251 | 251 |
| 252 PostMainMessageLoopStart(); | 252 PostMainMessageLoopStart(); |
| 253 } | 253 } |
| 254 | 254 |
| 255 static bool g_exited_main_message_loop = false; |
| 256 |
| 255 void BrowserMainParts::RunMainMessageLoopParts() { | 257 void BrowserMainParts::RunMainMessageLoopParts() { |
| 256 PreMainMessageLoopRun(); | 258 PreMainMessageLoopRun(); |
| 257 | 259 |
| 258 TRACE_EVENT_BEGIN_ETW("BrowserMain:MESSAGE_LOOP", 0, ""); | 260 TRACE_EVENT_BEGIN_ETW("BrowserMain:MESSAGE_LOOP", 0, ""); |
| 259 // If the UI thread blocks, the whole UI is unresponsive. | 261 // If the UI thread blocks, the whole UI is unresponsive. |
| 260 // Do not allow disk IO from the UI thread. | 262 // Do not allow disk IO from the UI thread. |
| 261 base::ThreadRestrictions::SetIOAllowed(false); | 263 base::ThreadRestrictions::SetIOAllowed(false); |
| 262 MainMessageLoopRun(); | 264 MainMessageLoopRun(); |
| 263 TRACE_EVENT_END_ETW("BrowserMain:MESSAGE_LOOP", 0, ""); | 265 TRACE_EVENT_END_ETW("BrowserMain:MESSAGE_LOOP", 0, ""); |
| 264 | 266 |
| 267 g_exited_main_message_loop = true; |
| 268 |
| 265 PostMainMessageLoopRun(); | 269 PostMainMessageLoopRun(); |
| 266 } | 270 } |
| 267 | 271 |
| 268 void BrowserMainParts::InitializeMainThread() { | 272 void BrowserMainParts::InitializeMainThread() { |
| 269 const char* kThreadName = "CrBrowserMain"; | 273 const char* kThreadName = "CrBrowserMain"; |
| 270 base::PlatformThread::SetName(kThreadName); | 274 base::PlatformThread::SetName(kThreadName); |
| 271 main_message_loop().set_thread_name(kThreadName); | 275 main_message_loop().set_thread_name(kThreadName); |
| 272 | 276 |
| 273 // Register the main thread by instantiating it, but don't call any methods. | 277 // Register the main thread by instantiating it, but don't call any methods. |
| 274 main_thread_.reset(new BrowserThread(BrowserThread::UI, | 278 main_thread_.reset(new BrowserThread(BrowserThread::UI, |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 MessageLoopForUI::current()->Run(NULL); | 354 MessageLoopForUI::current()->Run(NULL); |
| 351 #endif | 355 #endif |
| 352 } | 356 } |
| 353 | 357 |
| 354 void BrowserMainParts::PostMainMessageLoopRun() { | 358 void BrowserMainParts::PostMainMessageLoopRun() { |
| 355 } | 359 } |
| 356 | 360 |
| 357 void BrowserMainParts::ToolkitInitialized() { | 361 void BrowserMainParts::ToolkitInitialized() { |
| 358 } | 362 } |
| 359 | 363 |
| 364 bool ExitedMainMessageLoop() { |
| 365 return g_exited_main_message_loop; |
| 366 } |
| 367 |
| 360 } // namespace content | 368 } // namespace content |
| 361 | 369 |
| 362 // Main routine for running as the Browser process. | 370 // Main routine for running as the Browser process. |
| 363 int BrowserMain(const MainFunctionParams& parameters) { | 371 int BrowserMain(const MainFunctionParams& parameters) { |
| 364 TRACE_EVENT_BEGIN_ETW("BrowserMain", 0, ""); | 372 TRACE_EVENT_BEGIN_ETW("BrowserMain", 0, ""); |
| 365 | 373 |
| 366 NotificationService main_notification_service; | 374 NotificationService main_notification_service; |
| 367 | 375 |
| 368 scoped_ptr<content::BrowserMainParts> parts( | 376 scoped_ptr<content::BrowserMainParts> parts( |
| 369 content::GetContentClient()->browser()->CreateBrowserMainParts( | 377 content::GetContentClient()->browser()->CreateBrowserMainParts( |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 base::win::ScopedCOMInitializer com_initializer; | 428 base::win::ScopedCOMInitializer com_initializer; |
| 421 #endif // OS_WIN | 429 #endif // OS_WIN |
| 422 | 430 |
| 423 base::StatisticsRecorder statistics; | 431 base::StatisticsRecorder statistics; |
| 424 | 432 |
| 425 parts->RunMainMessageLoopParts(); | 433 parts->RunMainMessageLoopParts(); |
| 426 | 434 |
| 427 TRACE_EVENT_END_ETW("BrowserMain", 0, 0); | 435 TRACE_EVENT_END_ETW("BrowserMain", 0, 0); |
| 428 return parts->result_code(); | 436 return parts->result_code(); |
| 429 } | 437 } |
| OLD | NEW |