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