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 "chrome/browser/browser_process_impl.h" | 5 #include "chrome/browser/browser_process_impl.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <set> | 8 #include <set> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 #endif | 108 #endif |
109 | 109 |
110 BrowserProcessImpl::BrowserProcessImpl(const CommandLine& command_line) | 110 BrowserProcessImpl::BrowserProcessImpl(const CommandLine& command_line) |
111 : created_resource_dispatcher_host_(false), | 111 : created_resource_dispatcher_host_(false), |
112 created_metrics_service_(false), | 112 created_metrics_service_(false), |
113 created_io_thread_(false), | 113 created_io_thread_(false), |
114 created_file_thread_(false), | 114 created_file_thread_(false), |
115 created_db_thread_(false), | 115 created_db_thread_(false), |
116 created_process_launcher_thread_(false), | 116 created_process_launcher_thread_(false), |
117 created_cache_thread_(false), | 117 created_cache_thread_(false), |
118 created_gpu_thread_(false), | |
119 created_watchdog_thread_(false), | 118 created_watchdog_thread_(false), |
120 #if defined(OS_CHROMEOS) | 119 #if defined(OS_CHROMEOS) |
121 created_web_socket_proxy_thread_(false), | 120 created_web_socket_proxy_thread_(false), |
122 #endif | 121 #endif |
123 created_profile_manager_(false), | 122 created_profile_manager_(false), |
124 created_local_state_(false), | 123 created_local_state_(false), |
125 created_icon_manager_(false), | 124 created_icon_manager_(false), |
126 created_devtools_manager_(false), | 125 created_devtools_manager_(false), |
127 created_sidebar_manager_(false), | 126 created_sidebar_manager_(false), |
128 created_browser_policy_connector_(false), | 127 created_browser_policy_connector_(false), |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 #endif | 230 #endif |
232 | 231 |
233 // Wait for removing plugin data to finish before shutting down the IO thread. | 232 // Wait for removing plugin data to finish before shutting down the IO thread. |
234 WaitForPluginDataRemoverToFinish(); | 233 WaitForPluginDataRemoverToFinish(); |
235 | 234 |
236 // Destroying the GpuProcessHostUIShims on the UI thread posts a task to | 235 // Destroying the GpuProcessHostUIShims on the UI thread posts a task to |
237 // delete related objects on the GPU thread. This must be done before | 236 // delete related objects on the GPU thread. This must be done before |
238 // stopping the GPU thread. The GPU thread will close IPC channels to renderer | 237 // stopping the GPU thread. The GPU thread will close IPC channels to renderer |
239 // processes so this has to happen before stopping the IO thread. | 238 // processes so this has to happen before stopping the IO thread. |
240 GpuProcessHostUIShim::DestroyAll(); | 239 GpuProcessHostUIShim::DestroyAll(); |
241 gpu_thread_.reset(); | |
242 | 240 |
243 // Need to stop io_thread_ before resource_dispatcher_host_, since | 241 // Need to stop io_thread_ before resource_dispatcher_host_, since |
244 // io_thread_ may still deref ResourceDispatcherHost and handle resource | 242 // io_thread_ may still deref ResourceDispatcherHost and handle resource |
245 // request before going away. | 243 // request before going away. |
246 io_thread_.reset(); | 244 io_thread_.reset(); |
247 | 245 |
248 // The IO thread was the only user of this thread. | 246 // The IO thread was the only user of this thread. |
249 cache_thread_.reset(); | 247 cache_thread_.reset(); |
250 | 248 |
251 // Stop the process launcher thread after the IO thread, in case the IO thread | 249 // Stop the process launcher thread after the IO thread, in case the IO thread |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
416 return process_launcher_thread_.get(); | 414 return process_launcher_thread_.get(); |
417 } | 415 } |
418 | 416 |
419 base::Thread* BrowserProcessImpl::cache_thread() { | 417 base::Thread* BrowserProcessImpl::cache_thread() { |
420 DCHECK(CalledOnValidThread()); | 418 DCHECK(CalledOnValidThread()); |
421 if (!created_cache_thread_) | 419 if (!created_cache_thread_) |
422 CreateCacheThread(); | 420 CreateCacheThread(); |
423 return cache_thread_.get(); | 421 return cache_thread_.get(); |
424 } | 422 } |
425 | 423 |
426 base::Thread* BrowserProcessImpl::gpu_thread() { | |
427 DCHECK(CalledOnValidThread()); | |
428 if (!created_gpu_thread_) | |
429 CreateGpuThread(); | |
430 return gpu_thread_.get(); | |
431 } | |
432 | |
433 #if defined(USE_X11) | 424 #if defined(USE_X11) |
434 base::Thread* BrowserProcessImpl::background_x11_thread() { | 425 base::Thread* BrowserProcessImpl::background_x11_thread() { |
435 DCHECK(CalledOnValidThread()); | 426 DCHECK(CalledOnValidThread()); |
436 // The BACKGROUND_X11 thread is created when the IO thread is created. | 427 // The BACKGROUND_X11 thread is created when the IO thread is created. |
437 if (!created_io_thread_) | 428 if (!created_io_thread_) |
438 CreateIOThread(); | 429 CreateIOThread(); |
439 return background_x11_thread_.get(); | 430 return background_x11_thread_.get(); |
440 } | 431 } |
441 #endif | 432 #endif |
442 | 433 |
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 | 833 |
843 scoped_ptr<base::Thread> thread( | 834 scoped_ptr<base::Thread> thread( |
844 new BrowserThread(BrowserThread::CACHE)); | 835 new BrowserThread(BrowserThread::CACHE)); |
845 base::Thread::Options options; | 836 base::Thread::Options options; |
846 options.message_loop_type = MessageLoop::TYPE_IO; | 837 options.message_loop_type = MessageLoop::TYPE_IO; |
847 if (!thread->StartWithOptions(options)) | 838 if (!thread->StartWithOptions(options)) |
848 return; | 839 return; |
849 cache_thread_.swap(thread); | 840 cache_thread_.swap(thread); |
850 } | 841 } |
851 | 842 |
852 void BrowserProcessImpl::CreateGpuThread() { | |
853 DCHECK(!created_gpu_thread_ && !gpu_thread_.get()); | |
854 created_gpu_thread_ = true; | |
855 | |
856 scoped_ptr<base::Thread> thread(new BrowserThread(BrowserThread::GPU)); | |
857 | |
858 base::Thread::Options options; | |
859 #if defined(OS_WIN) | |
860 // On Windows the GPU thread needs to pump the compositor child window's | |
861 // message loop. TODO(apatrick): make this an IO thread if / when we get rid | |
862 // of this child window. Unfortunately it might always be necessary for | |
863 // Windows XP because we cannot share the backing store textures between | |
864 // processes. | |
865 options.message_loop_type = MessageLoop::TYPE_UI; | |
866 #else | |
867 options.message_loop_type = MessageLoop::TYPE_IO; | |
868 #endif | |
869 | |
870 if (!thread->StartWithOptions(options)) | |
871 return; | |
872 gpu_thread_.swap(thread); | |
873 } | |
874 | |
875 void BrowserProcessImpl::CreateWatchdogThread() { | 843 void BrowserProcessImpl::CreateWatchdogThread() { |
876 DCHECK(!created_watchdog_thread_ && watchdog_thread_.get() == NULL); | 844 DCHECK(!created_watchdog_thread_ && watchdog_thread_.get() == NULL); |
877 created_watchdog_thread_ = true; | 845 created_watchdog_thread_ = true; |
878 | 846 |
879 scoped_ptr<WatchDogThread> thread(new WatchDogThread()); | 847 scoped_ptr<WatchDogThread> thread(new WatchDogThread()); |
880 if (!thread->Start()) | 848 if (!thread->Start()) |
881 return; | 849 return; |
882 watchdog_thread_.swap(thread); | 850 watchdog_thread_.swap(thread); |
883 } | 851 } |
884 | 852 |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1121 } | 1089 } |
1122 | 1090 |
1123 void BrowserProcessImpl::OnAutoupdateTimer() { | 1091 void BrowserProcessImpl::OnAutoupdateTimer() { |
1124 if (CanAutorestartForUpdate()) { | 1092 if (CanAutorestartForUpdate()) { |
1125 DLOG(WARNING) << "Detected update. Restarting browser."; | 1093 DLOG(WARNING) << "Detected update. Restarting browser."; |
1126 RestartPersistentInstance(); | 1094 RestartPersistentInstance(); |
1127 } | 1095 } |
1128 } | 1096 } |
1129 | 1097 |
1130 #endif // (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) | 1098 #endif // (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) |
OLD | NEW |