| 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 |