Chromium Code Reviews| 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/renderer/render_thread_impl.h" | 5 #include "content/renderer/render_thread_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 690 peer_connection_tracker_.reset(new PeerConnectionTracker()); | 690 peer_connection_tracker_.reset(new PeerConnectionTracker()); |
| 691 AddObserver(peer_connection_tracker_.get()); | 691 AddObserver(peer_connection_tracker_.get()); |
| 692 | 692 |
| 693 p2p_socket_dispatcher_ = new P2PSocketDispatcher(GetIOTaskRunner().get()); | 693 p2p_socket_dispatcher_ = new P2PSocketDispatcher(GetIOTaskRunner().get()); |
| 694 AddFilter(p2p_socket_dispatcher_.get()); | 694 AddFilter(p2p_socket_dispatcher_.get()); |
| 695 | 695 |
| 696 peer_connection_factory_.reset( | 696 peer_connection_factory_.reset( |
| 697 new PeerConnectionDependencyFactory(p2p_socket_dispatcher_.get())); | 697 new PeerConnectionDependencyFactory(p2p_socket_dispatcher_.get())); |
| 698 | 698 |
| 699 aec_dump_message_filter_ = new AecDumpMessageFilter( | 699 aec_dump_message_filter_ = new AecDumpMessageFilter( |
| 700 GetIOTaskRunner(), message_loop()->task_runner()); | 700 GetIOTaskRunner(), main_task_runner()); |
| 701 | 701 |
| 702 AddFilter(aec_dump_message_filter_.get()); | 702 AddFilter(aec_dump_message_filter_.get()); |
| 703 | 703 |
| 704 #endif // defined(ENABLE_WEBRTC) | 704 #endif // defined(ENABLE_WEBRTC) |
| 705 | 705 |
| 706 audio_input_message_filter_ = new AudioInputMessageFilter(GetIOTaskRunner()); | 706 audio_input_message_filter_ = new AudioInputMessageFilter(GetIOTaskRunner()); |
| 707 AddFilter(audio_input_message_filter_.get()); | 707 AddFilter(audio_input_message_filter_.get()); |
| 708 | 708 |
| 709 audio_message_filter_ = new AudioMessageFilter(GetIOTaskRunner()); | 709 audio_message_filter_ = new AudioMessageFilter(GetIOTaskRunner()); |
| 710 AddFilter(audio_message_filter_.get()); | 710 AddFilter(audio_message_filter_.get()); |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 980 renderer_scheduler_->Shutdown(); | 980 renderer_scheduler_->Shutdown(); |
| 981 if (main_message_loop_) | 981 if (main_message_loop_) |
| 982 base::RunLoop().RunUntilIdle(); | 982 base::RunLoop().RunUntilIdle(); |
| 983 | 983 |
| 984 if (blink_platform_impl_) { | 984 if (blink_platform_impl_) { |
| 985 blink_platform_impl_->Shutdown(); | 985 blink_platform_impl_->Shutdown(); |
| 986 // This must be at the very end of the shutdown sequence. | 986 // This must be at the very end of the shutdown sequence. |
| 987 // blink::shutdown() must be called after all strong references from | 987 // blink::shutdown() must be called after all strong references from |
| 988 // Chromium to Blink are cleared. | 988 // Chromium to Blink are cleared. |
| 989 blink::shutdown(); | 989 blink::shutdown(); |
| 990 | |
| 991 // Clear the message loop here because pending tasks can hold Persintent | |
| 992 // handle to GCed object, which can not outlive Oilpan heap. | |
| 993 if (main_message_loop_) | |
| 994 base::RunLoop().RunUntilIdle(); | |
|
kinuko
2016/08/09 14:12:18
Hmm, I feel uneasy calling this in production code
haraken
2016/08/09 15:46:58
Note that we're already calling RunUntilIdle at li
kinuko
2016/08/11 06:10:55
I see that we're already calling it... thanks. An
| |
| 995 main_message_loop_ = nullptr; | |
| 996 | |
| 997 blink::Platform::shutdown(); | |
| 990 } | 998 } |
| 991 | 999 |
| 992 // Delay shutting down DiscardableSharedMemoryManager until blink::shutdown | 1000 // Delay shutting down DiscardableSharedMemoryManager until blink::shutdown |
| 993 // is complete, because blink::shutdown destructs Blink Resources and they | 1001 // is complete, because blink::shutdown destructs Blink Resources and they |
| 994 // may try to unlock their underlying discardable memory. | 1002 // may try to unlock their underlying discardable memory. |
| 995 ChildThreadImpl::ShutdownDiscardableSharedMemoryManager(); | 1003 ChildThreadImpl::ShutdownDiscardableSharedMemoryManager(); |
| 996 | 1004 |
| 997 // The message loop must be cleared after shutting down | |
| 998 // the DiscardableSharedMemoryManager, which needs to send messages | |
| 999 // to the browser process. | |
| 1000 main_message_loop_.reset(); | |
| 1001 | |
| 1002 lazy_tls.Pointer()->Set(nullptr); | 1005 lazy_tls.Pointer()->Set(nullptr); |
| 1003 } | 1006 } |
| 1004 | 1007 |
| 1005 bool RenderThreadImpl::Send(IPC::Message* msg) { | 1008 bool RenderThreadImpl::Send(IPC::Message* msg) { |
| 1006 // There are cases where we want to pump asynchronous messages while waiting | 1009 // There are cases where we want to pump asynchronous messages while waiting |
| 1007 // synchronously for the replies to the message to be sent here. However, this | 1010 // synchronously for the replies to the message to be sent here. However, this |
| 1008 // may create an opportunity for re-entrancy into WebKit and other subsystems, | 1011 // may create an opportunity for re-entrancy into WebKit and other subsystems, |
| 1009 // so we need to take care to disable callbacks, timers, and pending network | 1012 // so we need to take care to disable callbacks, timers, and pending network |
| 1010 // loads that could trigger such callbacks. | 1013 // loads that could trigger such callbacks. |
| 1011 bool pumping_events = false; | 1014 bool pumping_events = false; |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1178 #ifdef ENABLE_VTUNE_JIT_INTERFACE | 1181 #ifdef ENABLE_VTUNE_JIT_INTERFACE |
| 1179 if (command_line.HasSwitch(switches::kEnableVtune)) | 1182 if (command_line.HasSwitch(switches::kEnableVtune)) |
| 1180 gin::Debug::SetJitCodeEventHandler(vTune::GetVtuneCodeEventHandler()); | 1183 gin::Debug::SetJitCodeEventHandler(vTune::GetVtuneCodeEventHandler()); |
| 1181 #endif | 1184 #endif |
| 1182 | 1185 |
| 1183 SetRuntimeFeaturesDefaultsAndUpdateFromArgs(command_line); | 1186 SetRuntimeFeaturesDefaultsAndUpdateFromArgs(command_line); |
| 1184 | 1187 |
| 1185 blink_platform_impl_.reset(new RendererBlinkPlatformImpl( | 1188 blink_platform_impl_.reset(new RendererBlinkPlatformImpl( |
| 1186 renderer_scheduler_.get(), | 1189 renderer_scheduler_.get(), |
| 1187 GetRemoteInterfaces()->GetWeakPtr())); | 1190 GetRemoteInterfaces()->GetWeakPtr())); |
| 1188 blink::initialize(blink_platform_impl_.get()); | 1191 blink::Platform::initialize(blink_platform_impl_.get()); |
| 1192 blink::initialize(); | |
| 1189 | 1193 |
| 1190 v8::Isolate* isolate = blink::mainThreadIsolate(); | 1194 v8::Isolate* isolate = blink::mainThreadIsolate(); |
| 1191 isolate->SetCreateHistogramFunction(CreateHistogram); | 1195 isolate->SetCreateHistogramFunction(CreateHistogram); |
| 1192 isolate->SetAddHistogramSampleFunction(AddHistogramSample); | 1196 isolate->SetAddHistogramSampleFunction(AddHistogramSample); |
| 1193 renderer_scheduler_->SetRAILModeObserver(this); | 1197 renderer_scheduler_->SetRAILModeObserver(this); |
| 1194 | 1198 |
| 1195 main_thread_compositor_task_runner_ = | 1199 main_thread_compositor_task_runner_ = |
| 1196 renderer_scheduler_->CompositorTaskRunner(); | 1200 renderer_scheduler_->CompositorTaskRunner(); |
| 1197 | 1201 |
| 1198 main_input_callback_.Reset( | 1202 main_input_callback_.Reset( |
| (...skipping 863 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2062 // Purge Skia font cache, by setting it to 0 and then again to the | 2066 // Purge Skia font cache, by setting it to 0 and then again to the |
| 2063 // previous limit. | 2067 // previous limit. |
| 2064 size_t font_cache_limit = SkGraphics::SetFontCacheLimit(0); | 2068 size_t font_cache_limit = SkGraphics::SetFontCacheLimit(0); |
| 2065 SkGraphics::SetFontCacheLimit(font_cache_limit); | 2069 SkGraphics::SetFontCacheLimit(font_cache_limit); |
| 2066 } | 2070 } |
| 2067 } | 2071 } |
| 2068 } | 2072 } |
| 2069 | 2073 |
| 2070 scoped_refptr<base::SingleThreadTaskRunner> | 2074 scoped_refptr<base::SingleThreadTaskRunner> |
| 2071 RenderThreadImpl::GetFileThreadTaskRunner() { | 2075 RenderThreadImpl::GetFileThreadTaskRunner() { |
| 2072 DCHECK(message_loop()->task_runner()->BelongsToCurrentThread()); | 2076 DCHECK(main_task_runner()->BelongsToCurrentThread()); |
| 2073 if (!file_thread_) { | 2077 if (!file_thread_) { |
| 2074 file_thread_.reset(new base::Thread("Renderer::FILE")); | 2078 file_thread_.reset(new base::Thread("Renderer::FILE")); |
| 2075 file_thread_->Start(); | 2079 file_thread_->Start(); |
| 2076 } | 2080 } |
| 2077 return file_thread_->task_runner(); | 2081 return file_thread_->task_runner(); |
| 2078 } | 2082 } |
| 2079 | 2083 |
| 2080 scoped_refptr<base::SingleThreadTaskRunner> | 2084 scoped_refptr<base::SingleThreadTaskRunner> |
| 2081 RenderThreadImpl::GetMediaThreadTaskRunner() { | 2085 RenderThreadImpl::GetMediaThreadTaskRunner() { |
| 2082 DCHECK(message_loop()->task_runner()->BelongsToCurrentThread()); | 2086 DCHECK(main_task_runner()->BelongsToCurrentThread()); |
| 2083 if (!media_thread_) { | 2087 if (!media_thread_) { |
| 2084 media_thread_.reset(new base::Thread("Media")); | 2088 media_thread_.reset(new base::Thread("Media")); |
| 2085 media_thread_->Start(); | 2089 media_thread_->Start(); |
| 2086 | 2090 |
| 2087 #if defined(OS_ANDROID) | 2091 #if defined(OS_ANDROID) |
| 2088 renderer_demuxer_ = new RendererDemuxerAndroid(); | 2092 renderer_demuxer_ = new RendererDemuxerAndroid(); |
| 2089 AddFilter(renderer_demuxer_.get()); | 2093 AddFilter(renderer_demuxer_.get()); |
| 2090 #endif | 2094 #endif |
| 2091 } | 2095 } |
| 2092 return media_thread_->task_runner(); | 2096 return media_thread_->task_runner(); |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2235 v8_memory_pressure_level == v8::MemoryPressureLevel::kCritical) | 2239 v8_memory_pressure_level == v8::MemoryPressureLevel::kCritical) |
| 2236 v8_memory_pressure_level = v8::MemoryPressureLevel::kModerate; | 2240 v8_memory_pressure_level = v8::MemoryPressureLevel::kModerate; |
| 2237 | 2241 |
| 2238 blink::mainThreadIsolate()->MemoryPressureNotification( | 2242 blink::mainThreadIsolate()->MemoryPressureNotification( |
| 2239 v8_memory_pressure_level); | 2243 v8_memory_pressure_level); |
| 2240 blink::MemoryPressureNotificationToWorkerThreadIsolates( | 2244 blink::MemoryPressureNotificationToWorkerThreadIsolates( |
| 2241 v8_memory_pressure_level); | 2245 v8_memory_pressure_level); |
| 2242 } | 2246 } |
| 2243 | 2247 |
| 2244 } // namespace content | 2248 } // namespace content |
| OLD | NEW |