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 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 #include "content/common/render_process_messages.h" | 77 #include "content/common/render_process_messages.h" |
78 #include "content/common/resource_messages.h" | 78 #include "content/common/resource_messages.h" |
79 #include "content/common/site_isolation_policy.h" | 79 #include "content/common/site_isolation_policy.h" |
80 #include "content/common/view_messages.h" | 80 #include "content/common/view_messages.h" |
81 #include "content/common/worker_messages.h" | 81 #include "content/common/worker_messages.h" |
82 #include "content/public/common/content_constants.h" | 82 #include "content/public/common/content_constants.h" |
83 #include "content/public/common/content_features.h" | 83 #include "content/public/common/content_features.h" |
84 #include "content/public/common/content_paths.h" | 84 #include "content/public/common/content_paths.h" |
85 #include "content/public/common/content_switches.h" | 85 #include "content/public/common/content_switches.h" |
86 #include "content/public/common/renderer_preferences.h" | 86 #include "content/public/common/renderer_preferences.h" |
| 87 #include "content/public/common/service_names.mojom.h" |
87 #include "content/public/common/url_constants.h" | 88 #include "content/public/common/url_constants.h" |
88 #include "content/public/renderer/content_renderer_client.h" | 89 #include "content/public/renderer/content_renderer_client.h" |
89 #include "content/public/renderer/render_thread_observer.h" | 90 #include "content/public/renderer/render_thread_observer.h" |
90 #include "content/public/renderer/render_view_visitor.h" | 91 #include "content/public/renderer/render_view_visitor.h" |
91 #include "content/renderer/browser_plugin/browser_plugin_manager.h" | 92 #include "content/renderer/browser_plugin/browser_plugin_manager.h" |
92 #include "content/renderer/cache_storage/cache_storage_dispatcher.h" | 93 #include "content/renderer/cache_storage/cache_storage_dispatcher.h" |
93 #include "content/renderer/cache_storage/cache_storage_message_filter.h" | 94 #include "content/renderer/cache_storage/cache_storage_message_filter.h" |
94 #include "content/renderer/categorized_worker_pool.h" | 95 #include "content/renderer/categorized_worker_pool.h" |
95 #include "content/renderer/devtools/devtools_agent_filter.h" | 96 #include "content/renderer/devtools/devtools_agent_filter.h" |
96 #include "content/renderer/dom_storage/dom_storage_dispatcher.h" | 97 #include "content/renderer/dom_storage/dom_storage_dispatcher.h" |
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
621 #if BUILDFLAG(USE_EXTERNAL_POPUP_MENU) | 622 #if BUILDFLAG(USE_EXTERNAL_POPUP_MENU) |
622 // On Mac and Android Java UI, the select popups are rendered by the browser. | 623 // On Mac and Android Java UI, the select popups are rendered by the browser. |
623 blink::WebView::setUseExternalPopupMenus(true); | 624 blink::WebView::setUseExternalPopupMenus(true); |
624 #endif | 625 #endif |
625 | 626 |
626 lazy_tls.Pointer()->Set(this); | 627 lazy_tls.Pointer()->Set(this); |
627 | 628 |
628 // Register this object as the main thread. | 629 // Register this object as the main thread. |
629 ChildProcess::current()->set_main_thread(this); | 630 ChildProcess::current()->set_main_thread(this); |
630 | 631 |
631 if (IsRunningInMash()) { | 632 gpu_ = ui::Gpu::Create( |
632 gpu_ = ui::Gpu::Create(GetServiceManagerConnection()->GetConnector(), | 633 GetConnector(), |
633 GetIOTaskRunner()); | 634 IsRunningInMash() ? ui::mojom::kServiceName : mojom::kBrowserServiceName, |
634 } else { | 635 GetIOTaskRunner()); |
635 gpu_ = ui::Gpu::Create(GetRemoteInterfaces(), GetIOTaskRunner()); | |
636 } | |
637 | 636 |
638 channel()->GetThreadSafeRemoteAssociatedInterface( | 637 channel()->GetThreadSafeRemoteAssociatedInterface( |
639 &thread_safe_render_message_filter_); | 638 &thread_safe_render_message_filter_); |
640 shared_bitmap_manager_.reset( | 639 shared_bitmap_manager_.reset( |
641 new ChildSharedBitmapManager(thread_safe_render_message_filter_)); | 640 new ChildSharedBitmapManager(thread_safe_render_message_filter_)); |
642 | 641 |
643 InitializeWebKit(resource_task_queue); | 642 InitializeWebKit(resource_task_queue); |
644 | 643 |
645 // In single process the single process is all there is. | 644 // In single process the single process is all there is. |
646 webkit_shared_timer_suspended_ = false; | 645 webkit_shared_timer_suspended_ = false; |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
833 base::Unretained(this)))); | 832 base::Unretained(this)))); |
834 | 833 |
835 if (base::FeatureList::IsEnabled(features::kMemoryCoordinator)) { | 834 if (base::FeatureList::IsEnabled(features::kMemoryCoordinator)) { |
836 // Disable MemoryPressureListener when memory coordinator is enabled. | 835 // Disable MemoryPressureListener when memory coordinator is enabled. |
837 base::MemoryPressureListener::SetNotificationsSuppressed(true); | 836 base::MemoryPressureListener::SetNotificationsSuppressed(true); |
838 | 837 |
839 // TODO(bashi): Revisit how to manage the lifetime of | 838 // TODO(bashi): Revisit how to manage the lifetime of |
840 // ChildMemoryCoordinatorImpl. | 839 // ChildMemoryCoordinatorImpl. |
841 // https://codereview.chromium.org/2094583002/#msg52 | 840 // https://codereview.chromium.org/2094583002/#msg52 |
842 mojom::MemoryCoordinatorHandlePtr parent_coordinator; | 841 mojom::MemoryCoordinatorHandlePtr parent_coordinator; |
843 GetRemoteInterfaces()->GetInterface(mojo::MakeRequest(&parent_coordinator)); | 842 GetConnector()->BindInterface(mojom::kBrowserServiceName, |
| 843 mojo::MakeRequest(&parent_coordinator)); |
844 memory_coordinator_ = CreateChildMemoryCoordinator( | 844 memory_coordinator_ = CreateChildMemoryCoordinator( |
845 std::move(parent_coordinator), this); | 845 std::move(parent_coordinator), this); |
846 } | 846 } |
847 | 847 |
848 int num_raster_threads = 0; | 848 int num_raster_threads = 0; |
849 std::string string_value = | 849 std::string string_value = |
850 command_line.GetSwitchValueASCII(switches::kNumRasterThreads); | 850 command_line.GetSwitchValueASCII(switches::kNumRasterThreads); |
851 bool parsed_num_raster_threads = | 851 bool parsed_num_raster_threads = |
852 base::StringToInt(string_value, &num_raster_threads); | 852 base::StringToInt(string_value, &num_raster_threads); |
853 DCHECK(parsed_num_raster_threads) << string_value; | 853 DCHECK(parsed_num_raster_threads) << string_value; |
854 DCHECK_GT(num_raster_threads, 0); | 854 DCHECK_GT(num_raster_threads, 0); |
855 | 855 |
856 // TODO(vmpstr): If the flag sticks, we should clean it up and always have | 856 // TODO(vmpstr): If the flag sticks, we should clean it up and always have |
857 // image decode tasks. | 857 // image decode tasks. |
858 are_image_decode_tasks_enabled_ = true; | 858 are_image_decode_tasks_enabled_ = true; |
859 | 859 |
860 categorized_worker_pool_->Start(num_raster_threads); | 860 categorized_worker_pool_->Start(num_raster_threads); |
861 | 861 |
862 discardable_memory::mojom::DiscardableSharedMemoryManagerPtr manager_ptr; | 862 discardable_memory::mojom::DiscardableSharedMemoryManagerPtr manager_ptr; |
863 if (IsRunningInMash()) { | 863 if (IsRunningInMash()) { |
864 #if defined(USE_AURA) | 864 #if defined(USE_AURA) |
865 GetServiceManagerConnection()->GetConnector()->BindInterface( | 865 GetServiceManagerConnection()->GetConnector()->BindInterface( |
866 ui::mojom::kServiceName, &manager_ptr); | 866 ui::mojom::kServiceName, &manager_ptr); |
867 #else | 867 #else |
868 NOTREACHED(); | 868 NOTREACHED(); |
869 #endif | 869 #endif |
870 } else { | 870 } else { |
871 ChildThread::Get()->GetRemoteInterfaces()->GetInterface( | 871 ChildThread::Get()->GetConnector()->BindInterface( |
872 mojo::MakeRequest(&manager_ptr)); | 872 mojom::kBrowserServiceName, mojo::MakeRequest(&manager_ptr)); |
873 } | 873 } |
874 | 874 |
875 discardable_shared_memory_manager_ = base::MakeUnique< | 875 discardable_shared_memory_manager_ = base::MakeUnique< |
876 discardable_memory::ClientDiscardableSharedMemoryManager>( | 876 discardable_memory::ClientDiscardableSharedMemoryManager>( |
877 std::move(manager_ptr), GetIOTaskRunner()); | 877 std::move(manager_ptr), GetIOTaskRunner()); |
878 | 878 |
879 // TODO(boliu): In single process, browser main loop should set up the | 879 // TODO(boliu): In single process, browser main loop should set up the |
880 // discardable memory manager, and should skip this if kSingleProcess. | 880 // discardable memory manager, and should skip this if kSingleProcess. |
881 // See crbug.com/503724. | 881 // See crbug.com/503724. |
882 base::DiscardableMemoryAllocator::SetInstance( | 882 base::DiscardableMemoryAllocator::SetInstance( |
883 discardable_shared_memory_manager_.get()); | 883 discardable_shared_memory_manager_.get()); |
884 | 884 |
885 GetContentClient()->renderer()->ExposeInterfacesToBrowser( | 885 GetContentClient()->renderer()->ExposeInterfacesToBrowser( |
886 GetInterfaceRegistry()); | 886 GetInterfaceRegistry()); |
887 | 887 |
888 GetInterfaceRegistry()->AddInterface(base::Bind(&CreateFrameFactory)); | 888 GetInterfaceRegistry()->AddInterface(base::Bind(&CreateFrameFactory)); |
889 GetInterfaceRegistry()->AddInterface( | 889 GetInterfaceRegistry()->AddInterface( |
890 base::Bind(&EmbeddedWorkerInstanceClientImpl::Create, | 890 base::Bind(&EmbeddedWorkerInstanceClientImpl::Create, |
891 base::Unretained(embedded_worker_dispatcher_.get()))); | 891 base::Unretained(embedded_worker_dispatcher_.get()))); |
892 | 892 |
893 GetRemoteInterfaces()->GetInterface( | 893 GetConnector()->BindInterface(mojom::kBrowserServiceName, |
894 mojo::MakeRequest(&storage_partition_service_)); | 894 mojo::MakeRequest(&storage_partition_service_)); |
895 | 895 |
896 #if defined(OS_LINUX) | 896 #if defined(OS_LINUX) |
897 ChildProcess::current()->SetIOThreadPriority(base::ThreadPriority::DISPLAY); | 897 ChildProcess::current()->SetIOThreadPriority(base::ThreadPriority::DISPLAY); |
898 ChildThreadImpl::current()->SetThreadPriority( | 898 ChildThreadImpl::current()->SetThreadPriority( |
899 categorized_worker_pool_->background_worker_thread_id(), | 899 categorized_worker_pool_->background_worker_thread_id(), |
900 base::ThreadPriority::BACKGROUND); | 900 base::ThreadPriority::BACKGROUND); |
901 #endif | 901 #endif |
902 | 902 |
903 record_purge_suspend_metric_closure_.Reset(base::Bind( | 903 record_purge_suspend_metric_closure_.Reset(base::Bind( |
904 &RenderThreadImpl::RecordPurgeAndSuspendMetrics, base::Unretained(this))); | 904 &RenderThreadImpl::RecordPurgeAndSuspendMetrics, base::Unretained(this))); |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1135 if (command_line.HasSwitch(switches::kEnableVtune)) | 1135 if (command_line.HasSwitch(switches::kEnableVtune)) |
1136 gin::Debug::SetJitCodeEventHandler(vTune::GetVtuneCodeEventHandler()); | 1136 gin::Debug::SetJitCodeEventHandler(vTune::GetVtuneCodeEventHandler()); |
1137 #endif | 1137 #endif |
1138 | 1138 |
1139 SetRuntimeFeaturesDefaultsAndUpdateFromArgs(command_line); | 1139 SetRuntimeFeaturesDefaultsAndUpdateFromArgs(command_line); |
1140 GetContentClient() | 1140 GetContentClient() |
1141 ->renderer() | 1141 ->renderer() |
1142 ->SetRuntimeFeaturesDefaultsBeforeBlinkInitialization(); | 1142 ->SetRuntimeFeaturesDefaultsBeforeBlinkInitialization(); |
1143 | 1143 |
1144 blink_platform_impl_.reset(new RendererBlinkPlatformImpl( | 1144 blink_platform_impl_.reset(new RendererBlinkPlatformImpl( |
1145 renderer_scheduler_.get(), GetRemoteInterfaces()->GetWeakPtr())); | 1145 renderer_scheduler_.get(), GetConnector()->GetWeakPtr())); |
1146 blink::initialize(blink_platform_impl_.get()); | 1146 blink::initialize(blink_platform_impl_.get()); |
1147 | 1147 |
1148 v8::Isolate* isolate = blink::mainThreadIsolate(); | 1148 v8::Isolate* isolate = blink::mainThreadIsolate(); |
1149 isolate->SetCreateHistogramFunction(CreateHistogram); | 1149 isolate->SetCreateHistogramFunction(CreateHistogram); |
1150 isolate->SetAddHistogramSampleFunction(AddHistogramSample); | 1150 isolate->SetAddHistogramSampleFunction(AddHistogramSample); |
1151 renderer_scheduler_->SetRAILModeObserver(this); | 1151 renderer_scheduler_->SetRAILModeObserver(this); |
1152 | 1152 |
1153 main_thread_compositor_task_runner_ = | 1153 main_thread_compositor_task_runner_ = |
1154 renderer_scheduler_->CompositorTaskRunner(); | 1154 renderer_scheduler_->CompositorTaskRunner(); |
1155 | 1155 |
(...skipping 903 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2059 return nullptr; | 2059 return nullptr; |
2060 if (gpu_channel_->IsLost()) | 2060 if (gpu_channel_->IsLost()) |
2061 return nullptr; | 2061 return nullptr; |
2062 return gpu_channel_.get(); | 2062 return gpu_channel_.get(); |
2063 } | 2063 } |
2064 | 2064 |
2065 void RenderThreadImpl::OnFieldTrialGroupFinalized( | 2065 void RenderThreadImpl::OnFieldTrialGroupFinalized( |
2066 const std::string& trial_name, | 2066 const std::string& trial_name, |
2067 const std::string& group_name) { | 2067 const std::string& group_name) { |
2068 mojom::FieldTrialRecorderPtr field_trial_recorder; | 2068 mojom::FieldTrialRecorderPtr field_trial_recorder; |
2069 GetRemoteInterfaces()->GetInterface(&field_trial_recorder); | 2069 GetConnector()->BindInterface(mojom::kBrowserServiceName, |
| 2070 &field_trial_recorder); |
2070 field_trial_recorder->FieldTrialActivated(trial_name); | 2071 field_trial_recorder->FieldTrialActivated(trial_name); |
2071 } | 2072 } |
2072 | 2073 |
2073 void RenderThreadImpl::CreateView(mojom::CreateViewParamsPtr params) { | 2074 void RenderThreadImpl::CreateView(mojom::CreateViewParamsPtr params) { |
2074 CompositorDependencies* compositor_deps = this; | 2075 CompositorDependencies* compositor_deps = this; |
2075 is_scroll_animator_enabled_ = params->web_preferences.enable_scroll_animator; | 2076 is_scroll_animator_enabled_ = params->web_preferences.enable_scroll_animator; |
2076 // When bringing in render_view, also bring in webkit's glue and jsbindings. | 2077 // When bringing in render_view, also bring in webkit's glue and jsbindings. |
2077 RenderViewImpl::Create(compositor_deps, *params, | 2078 RenderViewImpl::Create(compositor_deps, *params, |
2078 RenderWidget::ShowCallback()); | 2079 RenderWidget::ShowCallback()); |
2079 } | 2080 } |
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2423 } | 2424 } |
2424 } | 2425 } |
2425 | 2426 |
2426 void RenderThreadImpl::OnRendererInterfaceRequest( | 2427 void RenderThreadImpl::OnRendererInterfaceRequest( |
2427 mojom::RendererAssociatedRequest request) { | 2428 mojom::RendererAssociatedRequest request) { |
2428 DCHECK(!renderer_binding_.is_bound()); | 2429 DCHECK(!renderer_binding_.is_bound()); |
2429 renderer_binding_.Bind(std::move(request)); | 2430 renderer_binding_.Bind(std::move(request)); |
2430 } | 2431 } |
2431 | 2432 |
2432 } // namespace content | 2433 } // namespace content |
OLD | NEW |