| 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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 #include "content/public/common/content_paths.h" | 83 #include "content/public/common/content_paths.h" |
| 84 #include "content/public/common/content_switches.h" | 84 #include "content/public/common/content_switches.h" |
| 85 #include "content/public/common/renderer_preferences.h" | 85 #include "content/public/common/renderer_preferences.h" |
| 86 #include "content/public/common/url_constants.h" | 86 #include "content/public/common/url_constants.h" |
| 87 #include "content/public/renderer/content_renderer_client.h" | 87 #include "content/public/renderer/content_renderer_client.h" |
| 88 #include "content/public/renderer/render_thread_observer.h" | 88 #include "content/public/renderer/render_thread_observer.h" |
| 89 #include "content/public/renderer/render_view_visitor.h" | 89 #include "content/public/renderer/render_view_visitor.h" |
| 90 #include "content/renderer/browser_plugin/browser_plugin_manager.h" | 90 #include "content/renderer/browser_plugin/browser_plugin_manager.h" |
| 91 #include "content/renderer/cache_storage/cache_storage_dispatcher.h" | 91 #include "content/renderer/cache_storage/cache_storage_dispatcher.h" |
| 92 #include "content/renderer/cache_storage/cache_storage_message_filter.h" | 92 #include "content/renderer/cache_storage/cache_storage_message_filter.h" |
| 93 #include "content/renderer/categorized_worker_pool.h" |
| 93 #include "content/renderer/devtools/devtools_agent_filter.h" | 94 #include "content/renderer/devtools/devtools_agent_filter.h" |
| 94 #include "content/renderer/devtools/v8_sampling_profiler.h" | 95 #include "content/renderer/devtools/v8_sampling_profiler.h" |
| 95 #include "content/renderer/dom_storage/dom_storage_dispatcher.h" | 96 #include "content/renderer/dom_storage/dom_storage_dispatcher.h" |
| 96 #include "content/renderer/dom_storage/webstoragearea_impl.h" | 97 #include "content/renderer/dom_storage/webstoragearea_impl.h" |
| 97 #include "content/renderer/dom_storage/webstoragenamespace_impl.h" | 98 #include "content/renderer/dom_storage/webstoragenamespace_impl.h" |
| 98 #include "content/renderer/gpu/compositor_external_begin_frame_source.h" | 99 #include "content/renderer/gpu/compositor_external_begin_frame_source.h" |
| 99 #include "content/renderer/gpu/compositor_forwarding_message_filter.h" | 100 #include "content/renderer/gpu/compositor_forwarding_message_filter.h" |
| 100 #include "content/renderer/gpu/compositor_output_surface.h" | 101 #include "content/renderer/gpu/compositor_output_surface.h" |
| 101 #include "content/renderer/input/input_event_filter.h" | 102 #include "content/renderer/input/input_event_filter.h" |
| 102 #include "content/renderer/input/input_handler_manager.h" | 103 #include "content/renderer/input/input_handler_manager.h" |
| 103 #include "content/renderer/input/main_thread_input_event_filter.h" | 104 #include "content/renderer/input/main_thread_input_event_filter.h" |
| 104 #include "content/renderer/media/aec_dump_message_filter.h" | 105 #include "content/renderer/media/aec_dump_message_filter.h" |
| 105 #include "content/renderer/media/audio_input_message_filter.h" | 106 #include "content/renderer/media/audio_input_message_filter.h" |
| 106 #include "content/renderer/media/audio_message_filter.h" | 107 #include "content/renderer/media/audio_message_filter.h" |
| 107 #include "content/renderer/media/audio_renderer_mixer_manager.h" | 108 #include "content/renderer/media/audio_renderer_mixer_manager.h" |
| 108 #include "content/renderer/media/media_stream_center.h" | 109 #include "content/renderer/media/media_stream_center.h" |
| 109 #include "content/renderer/media/midi_message_filter.h" | 110 #include "content/renderer/media/midi_message_filter.h" |
| 110 #include "content/renderer/media/render_media_client.h" | 111 #include "content/renderer/media/render_media_client.h" |
| 111 #include "content/renderer/media/renderer_gpu_video_accelerator_factories.h" | 112 #include "content/renderer/media/renderer_gpu_video_accelerator_factories.h" |
| 112 #include "content/renderer/media/video_capture_impl_manager.h" | 113 #include "content/renderer/media/video_capture_impl_manager.h" |
| 113 #include "content/renderer/media/video_capture_message_filter.h" | 114 #include "content/renderer/media/video_capture_message_filter.h" |
| 114 #include "content/renderer/net_info_helper.h" | 115 #include "content/renderer/net_info_helper.h" |
| 115 #include "content/renderer/p2p/socket_dispatcher.h" | 116 #include "content/renderer/p2p/socket_dispatcher.h" |
| 116 #include "content/renderer/raster_worker_pool.h" | |
| 117 #include "content/renderer/render_frame_proxy.h" | 117 #include "content/renderer/render_frame_proxy.h" |
| 118 #include "content/renderer/render_process_impl.h" | 118 #include "content/renderer/render_process_impl.h" |
| 119 #include "content/renderer/render_view_impl.h" | 119 #include "content/renderer/render_view_impl.h" |
| 120 #include "content/renderer/renderer_blink_platform_impl.h" | 120 #include "content/renderer/renderer_blink_platform_impl.h" |
| 121 #include "content/renderer/scheduler/resource_dispatch_throttler.h" | 121 #include "content/renderer/scheduler/resource_dispatch_throttler.h" |
| 122 #include "content/renderer/service_worker/embedded_worker_dispatcher.h" | 122 #include "content/renderer/service_worker/embedded_worker_dispatcher.h" |
| 123 #include "content/renderer/service_worker/service_worker_context_client.h" | 123 #include "content/renderer/service_worker/service_worker_context_client.h" |
| 124 #include "content/renderer/service_worker/service_worker_context_message_filter.
h" | 124 #include "content/renderer/service_worker/service_worker_context_message_filter.
h" |
| 125 #include "content/renderer/shared_worker/embedded_shared_worker_stub.h" | 125 #include "content/renderer/shared_worker/embedded_shared_worker_stub.h" |
| 126 #include "gin/public/debug.h" | 126 #include "gin/public/debug.h" |
| (...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 574 | 574 |
| 575 RenderThreadImpl* RenderThreadImpl::current() { | 575 RenderThreadImpl* RenderThreadImpl::current() { |
| 576 return lazy_tls.Pointer()->Get(); | 576 return lazy_tls.Pointer()->Get(); |
| 577 } | 577 } |
| 578 | 578 |
| 579 RenderThreadImpl::RenderThreadImpl( | 579 RenderThreadImpl::RenderThreadImpl( |
| 580 const InProcessChildThreadParams& params, | 580 const InProcessChildThreadParams& params, |
| 581 std::unique_ptr<scheduler::RendererScheduler> scheduler, | 581 std::unique_ptr<scheduler::RendererScheduler> scheduler, |
| 582 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) | 582 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) |
| 583 : ChildThreadImpl(Options::Builder() | 583 : ChildThreadImpl(Options::Builder() |
| 584 .InBrowserProcess(params).UseMojoChannel(true).Build()), | 584 .InBrowserProcess(params) |
| 585 .UseMojoChannel(true) |
| 586 .Build()), |
| 585 renderer_scheduler_(std::move(scheduler)), | 587 renderer_scheduler_(std::move(scheduler)), |
| 586 raster_worker_pool_(new RasterWorkerPool()) { | 588 categorized_worker_pool_(new CategorizedWorkerPool()) { |
| 587 Init(resource_task_queue); | 589 Init(resource_task_queue); |
| 588 } | 590 } |
| 589 | 591 |
| 590 // When we run plugins in process, we actually run them on the render thread, | 592 // When we run plugins in process, we actually run them on the render thread, |
| 591 // which means that we need to make the render thread pump UI events. | 593 // which means that we need to make the render thread pump UI events. |
| 592 RenderThreadImpl::RenderThreadImpl( | 594 RenderThreadImpl::RenderThreadImpl( |
| 593 std::unique_ptr<base::MessageLoop> main_message_loop, | 595 std::unique_ptr<base::MessageLoop> main_message_loop, |
| 594 std::unique_ptr<scheduler::RendererScheduler> scheduler) | 596 std::unique_ptr<scheduler::RendererScheduler> scheduler) |
| 595 : ChildThreadImpl(Options::Builder().UseMojoChannel(true).Build()), | 597 : ChildThreadImpl(Options::Builder().UseMojoChannel(true).Build()), |
| 596 renderer_scheduler_(std::move(scheduler)), | 598 renderer_scheduler_(std::move(scheduler)), |
| 597 main_message_loop_(std::move(main_message_loop)), | 599 main_message_loop_(std::move(main_message_loop)), |
| 598 raster_worker_pool_(new RasterWorkerPool()) { | 600 categorized_worker_pool_(new CategorizedWorkerPool()) { |
| 599 scoped_refptr<base::SingleThreadTaskRunner> test_task_counter; | 601 scoped_refptr<base::SingleThreadTaskRunner> test_task_counter; |
| 600 Init(test_task_counter); | 602 Init(test_task_counter); |
| 601 } | 603 } |
| 602 | 604 |
| 603 void RenderThreadImpl::Init( | 605 void RenderThreadImpl::Init( |
| 604 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) { | 606 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) { |
| 605 TRACE_EVENT0("startup", "RenderThreadImpl::Init"); | 607 TRACE_EVENT0("startup", "RenderThreadImpl::Init"); |
| 606 | 608 |
| 607 base::trace_event::TraceLog::GetInstance()->SetThreadSortIndex( | 609 base::trace_event::TraceLog::GetInstance()->SetThreadSortIndex( |
| 608 base::PlatformThread::CurrentId(), | 610 base::PlatformThread::CurrentId(), |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 789 command_line.GetSwitchValueASCII(switches::kNumRasterThreads); | 791 command_line.GetSwitchValueASCII(switches::kNumRasterThreads); |
| 790 bool parsed_num_raster_threads = | 792 bool parsed_num_raster_threads = |
| 791 base::StringToInt(string_value, &num_raster_threads); | 793 base::StringToInt(string_value, &num_raster_threads); |
| 792 DCHECK(parsed_num_raster_threads) << string_value; | 794 DCHECK(parsed_num_raster_threads) << string_value; |
| 793 DCHECK_GT(num_raster_threads, 0); | 795 DCHECK_GT(num_raster_threads, 0); |
| 794 | 796 |
| 795 // TODO(vmpstr): If the flag sticks, we should clean it up and always have | 797 // TODO(vmpstr): If the flag sticks, we should clean it up and always have |
| 796 // image decode tasks. | 798 // image decode tasks. |
| 797 are_image_decode_tasks_enabled_ = true; | 799 are_image_decode_tasks_enabled_ = true; |
| 798 | 800 |
| 799 raster_worker_pool_->Start(num_raster_threads); | 801 categorized_worker_pool_->Start(num_raster_threads); |
| 800 | 802 |
| 801 // TODO(boliu): In single process, browser main loop should set up the | 803 // TODO(boliu): In single process, browser main loop should set up the |
| 802 // discardable memory manager, and should skip this if kSingleProcess. | 804 // discardable memory manager, and should skip this if kSingleProcess. |
| 803 // See crbug.com/503724. | 805 // See crbug.com/503724. |
| 804 base::DiscardableMemoryAllocator::SetInstance( | 806 base::DiscardableMemoryAllocator::SetInstance( |
| 805 ChildThreadImpl::discardable_shared_memory_manager()); | 807 ChildThreadImpl::discardable_shared_memory_manager()); |
| 806 | 808 |
| 807 service_registry()->AddService(base::Bind(CreateRenderFrameSetup)); | 809 service_registry()->AddService(base::Bind(CreateRenderFrameSetup)); |
| 808 service_registry()->AddService(base::Bind(CreateEmbeddedWorkerSetup)); | 810 service_registry()->AddService(base::Bind(CreateEmbeddedWorkerSetup)); |
| 809 | 811 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 885 media_thread_.reset(); | 887 media_thread_.reset(); |
| 886 | 888 |
| 887 blink_platform_impl_->SetCompositorThread(nullptr); | 889 blink_platform_impl_->SetCompositorThread(nullptr); |
| 888 | 890 |
| 889 compositor_thread_.reset(); | 891 compositor_thread_.reset(); |
| 890 | 892 |
| 891 // AudioMessageFilter may be accessed on |media_thread_|, so shutdown after. | 893 // AudioMessageFilter may be accessed on |media_thread_|, so shutdown after. |
| 892 RemoveFilter(audio_message_filter_.get()); | 894 RemoveFilter(audio_message_filter_.get()); |
| 893 audio_message_filter_ = NULL; | 895 audio_message_filter_ = NULL; |
| 894 | 896 |
| 895 raster_worker_pool_->Shutdown(); | 897 categorized_worker_pool_->Shutdown(); |
| 896 | 898 |
| 897 main_input_callback_.Cancel(); | 899 main_input_callback_.Cancel(); |
| 898 input_handler_manager_.reset(); | 900 input_handler_manager_.reset(); |
| 899 if (input_event_filter_.get()) { | 901 if (input_event_filter_.get()) { |
| 900 RemoveFilter(input_event_filter_.get()); | 902 RemoveFilter(input_event_filter_.get()); |
| 901 input_event_filter_ = NULL; | 903 input_event_filter_ = NULL; |
| 902 } | 904 } |
| 903 | 905 |
| 904 // RemoveEmbeddedWorkerRoute may be called while deleting | 906 // RemoveEmbeddedWorkerRoute may be called while deleting |
| 905 // EmbeddedWorkerDispatcher. So it must be deleted before deleting | 907 // EmbeddedWorkerDispatcher. So it must be deleted before deleting |
| (...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1605 return base::WrapUnique(new CompositorExternalBeginFrameSource( | 1607 return base::WrapUnique(new CompositorExternalBeginFrameSource( |
| 1606 compositor_message_filter_.get(), sync_message_filter(), routing_id)); | 1608 compositor_message_filter_.get(), sync_message_filter(), routing_id)); |
| 1607 } | 1609 } |
| 1608 | 1610 |
| 1609 cc::ImageSerializationProcessor* | 1611 cc::ImageSerializationProcessor* |
| 1610 RenderThreadImpl::GetImageSerializationProcessor() { | 1612 RenderThreadImpl::GetImageSerializationProcessor() { |
| 1611 return GetContentClient()->renderer()->GetImageSerializationProcessor(); | 1613 return GetContentClient()->renderer()->GetImageSerializationProcessor(); |
| 1612 } | 1614 } |
| 1613 | 1615 |
| 1614 cc::TaskGraphRunner* RenderThreadImpl::GetTaskGraphRunner() { | 1616 cc::TaskGraphRunner* RenderThreadImpl::GetTaskGraphRunner() { |
| 1615 return raster_worker_pool_->GetTaskGraphRunner(); | 1617 return categorized_worker_pool_->GetTaskGraphRunner(); |
| 1616 } | 1618 } |
| 1617 | 1619 |
| 1618 bool RenderThreadImpl::AreImageDecodeTasksEnabled() { | 1620 bool RenderThreadImpl::AreImageDecodeTasksEnabled() { |
| 1619 return are_image_decode_tasks_enabled_; | 1621 return are_image_decode_tasks_enabled_; |
| 1620 } | 1622 } |
| 1621 | 1623 |
| 1622 bool RenderThreadImpl::IsThreadedAnimationEnabled() { | 1624 bool RenderThreadImpl::IsThreadedAnimationEnabled() { |
| 1623 return is_threaded_animation_enabled_; | 1625 return is_threaded_animation_enabled_; |
| 1624 } | 1626 } |
| 1625 | 1627 |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1934 | 1936 |
| 1935 #if defined(OS_ANDROID) | 1937 #if defined(OS_ANDROID) |
| 1936 renderer_demuxer_ = new RendererDemuxerAndroid(); | 1938 renderer_demuxer_ = new RendererDemuxerAndroid(); |
| 1937 AddFilter(renderer_demuxer_.get()); | 1939 AddFilter(renderer_demuxer_.get()); |
| 1938 #endif | 1940 #endif |
| 1939 } | 1941 } |
| 1940 return media_thread_->task_runner(); | 1942 return media_thread_->task_runner(); |
| 1941 } | 1943 } |
| 1942 | 1944 |
| 1943 base::TaskRunner* RenderThreadImpl::GetWorkerTaskRunner() { | 1945 base::TaskRunner* RenderThreadImpl::GetWorkerTaskRunner() { |
| 1944 return raster_worker_pool_.get(); | 1946 return categorized_worker_pool_.get(); |
| 1945 } | 1947 } |
| 1946 | 1948 |
| 1947 scoped_refptr<ContextProviderCommandBuffer> | 1949 scoped_refptr<ContextProviderCommandBuffer> |
| 1948 RenderThreadImpl::SharedCompositorWorkerContextProvider() { | 1950 RenderThreadImpl::SharedCompositorWorkerContextProvider() { |
| 1949 DCHECK(IsMainThread()); | 1951 DCHECK(IsMainThread()); |
| 1950 // Try to reuse existing shared worker context provider. | 1952 // Try to reuse existing shared worker context provider. |
| 1951 if (shared_worker_context_provider_) { | 1953 if (shared_worker_context_provider_) { |
| 1952 // Note: If context is lost, delete reference after releasing the lock. | 1954 // Note: If context is lost, delete reference after releasing the lock. |
| 1953 cc::ContextProvider::ScopedContextLock lock( | 1955 cc::ContextProvider::ScopedContextLock lock( |
| 1954 shared_worker_context_provider_.get()); | 1956 shared_worker_context_provider_.get()); |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2085 v8_memory_pressure_level == v8::MemoryPressureLevel::kCritical) | 2087 v8_memory_pressure_level == v8::MemoryPressureLevel::kCritical) |
| 2086 v8_memory_pressure_level = v8::MemoryPressureLevel::kModerate; | 2088 v8_memory_pressure_level = v8::MemoryPressureLevel::kModerate; |
| 2087 | 2089 |
| 2088 blink::mainThreadIsolate()->MemoryPressureNotification( | 2090 blink::mainThreadIsolate()->MemoryPressureNotification( |
| 2089 v8_memory_pressure_level); | 2091 v8_memory_pressure_level); |
| 2090 blink::MemoryPressureNotificationToWorkerThreadIsolates( | 2092 blink::MemoryPressureNotificationToWorkerThreadIsolates( |
| 2091 v8_memory_pressure_level); | 2093 v8_memory_pressure_level); |
| 2092 } | 2094 } |
| 2093 | 2095 |
| 2094 } // namespace content | 2096 } // namespace content |
| OLD | NEW |