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 |