Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Side by Side Diff: content/renderer/render_thread_impl.cc

Issue 1494483002: Revert of compositor-worker: Refactor CompositorWorkerManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « content/renderer/render_thread_impl.h ('k') | third_party/WebKit/LayoutTests/TestExpectations » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <vector> 10 #include <vector>
(...skipping 21 matching lines...) Expand all
32 #include "base/threading/thread_restrictions.h" 32 #include "base/threading/thread_restrictions.h"
33 #include "base/trace_event/memory_dump_manager.h" 33 #include "base/trace_event/memory_dump_manager.h"
34 #include "base/trace_event/trace_event.h" 34 #include "base/trace_event/trace_event.h"
35 #include "base/values.h" 35 #include "base/values.h"
36 #include "cc/base/histograms.h" 36 #include "cc/base/histograms.h"
37 #include "cc/base/switches.h" 37 #include "cc/base/switches.h"
38 #include "cc/blink/web_external_bitmap_impl.h" 38 #include "cc/blink/web_external_bitmap_impl.h"
39 #include "cc/blink/web_layer_impl.h" 39 #include "cc/blink/web_layer_impl.h"
40 #include "cc/layers/layer_settings.h" 40 #include "cc/layers/layer_settings.h"
41 #include "cc/raster/task_graph_runner.h" 41 #include "cc/raster/task_graph_runner.h"
42 #include "cc/trees/layer_tree_host_common.h"
43 #include "cc/trees/layer_tree_settings.h" 42 #include "cc/trees/layer_tree_settings.h"
44 #include "components/scheduler/child/webthread_base.h"
45 #include "components/scheduler/renderer/renderer_scheduler.h" 43 #include "components/scheduler/renderer/renderer_scheduler.h"
46 #include "content/child/appcache/appcache_dispatcher.h" 44 #include "content/child/appcache/appcache_dispatcher.h"
47 #include "content/child/appcache/appcache_frontend_impl.h" 45 #include "content/child/appcache/appcache_frontend_impl.h"
48 #include "content/child/child_discardable_shared_memory_manager.h" 46 #include "content/child/child_discardable_shared_memory_manager.h"
49 #include "content/child/child_gpu_memory_buffer_manager.h" 47 #include "content/child/child_gpu_memory_buffer_manager.h"
50 #include "content/child/child_histogram_message_filter.h" 48 #include "content/child/child_histogram_message_filter.h"
51 #include "content/child/child_resource_message_filter.h" 49 #include "content/child/child_resource_message_filter.h"
52 #include "content/child/child_shared_bitmap_manager.h" 50 #include "content/child/child_shared_bitmap_manager.h"
53 #include "content/child/content_child_helpers.h" 51 #include "content/child/content_child_helpers.h"
54 #include "content/child/db_message_filter.h" 52 #include "content/child/db_message_filter.h"
(...skipping 786 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 #if defined(OS_ANDROID) 839 #if defined(OS_ANDROID)
842 if (sync_compositor_message_filter_) { 840 if (sync_compositor_message_filter_) {
843 RemoveFilter(sync_compositor_message_filter_.get()); 841 RemoveFilter(sync_compositor_message_filter_.get());
844 sync_compositor_message_filter_ = nullptr; 842 sync_compositor_message_filter_ = nullptr;
845 } 843 }
846 stream_texture_factory_ = nullptr; 844 stream_texture_factory_ = nullptr;
847 #endif 845 #endif
848 846
849 media_thread_.reset(); 847 media_thread_.reset();
850 848
851 blink_platform_impl_->set_compositor_thread(nullptr);
852
853 compositor_thread_.reset(); 849 compositor_thread_.reset();
854 850
855 // AudioMessageFilter may be accessed on |media_thread_|, so shutdown after. 851 // AudioMessageFilter may be accessed on |media_thread_|, so shutdown after.
856 RemoveFilter(audio_message_filter_.get()); 852 RemoveFilter(audio_message_filter_.get());
857 audio_message_filter_ = NULL; 853 audio_message_filter_ = NULL;
858 854
859 raster_worker_pool_->Shutdown(); 855 raster_worker_pool_->Shutdown();
860 856
861 main_input_callback_.Cancel(); 857 main_input_callback_.Cancel();
862 input_handler_manager_.reset(); 858 input_handler_manager_.reset();
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
1049 new ResourceSchedulingFilter(resource_task_queue, resource_dispatcher())); 1045 new ResourceSchedulingFilter(resource_task_queue, resource_dispatcher()));
1050 channel()->AddFilter(filter.get()); 1046 channel()->AddFilter(filter.get());
1051 resource_dispatcher()->SetResourceSchedulingFilter(filter); 1047 resource_dispatcher()->SetResourceSchedulingFilter(filter);
1052 1048
1053 // The ChildResourceMessageFilter and the ResourceDispatcher need to use the 1049 // The ChildResourceMessageFilter and the ResourceDispatcher need to use the
1054 // same queue to ensure tasks are executed in the expected order. 1050 // same queue to ensure tasks are executed in the expected order.
1055 child_resource_message_filter()->SetMainThreadTaskRunner(resource_task_queue); 1051 child_resource_message_filter()->SetMainThreadTaskRunner(resource_task_queue);
1056 resource_dispatcher()->SetMainThreadTaskRunner(resource_task_queue); 1052 resource_dispatcher()->SetMainThreadTaskRunner(resource_task_queue);
1057 } 1053 }
1058 1054
1059 void RenderThreadImpl::InitializeCompositorThread() {
1060 #if defined(OS_ANDROID)
1061 SynchronousCompositorFactory* sync_compositor_factory =
1062 SynchronousCompositorFactory::GetInstance();
1063 bool using_ipc_sync_compositing =
1064 base::CommandLine::ForCurrentProcess()->HasSwitch(
1065 switches::kIPCSyncCompositing);
1066 DCHECK(!sync_compositor_factory || !using_ipc_sync_compositing);
1067
1068 if (sync_compositor_factory) {
1069 compositor_task_runner_ =
1070 sync_compositor_factory->GetCompositorTaskRunner();
1071 }
1072 #endif
1073 if (!compositor_task_runner_.get()) {
1074 base::Thread::Options options;
1075 #if defined(OS_ANDROID)
1076 options.priority = base::ThreadPriority::DISPLAY;
1077 #endif
1078 compositor_thread_ =
1079 blink_platform_impl_->createThreadWithOptions("Compositor", options);
1080 compositor_task_runner_ = compositor_thread_->TaskRunner();
1081 compositor_task_runner_->PostTask(
1082 FROM_HERE,
1083 base::Bind(base::IgnoreResult(&ThreadRestrictions::SetIOAllowed),
1084 false));
1085 blink_platform_impl_->set_compositor_thread(compositor_thread_.get());
1086 }
1087
1088 InputHandlerManagerClient* input_handler_manager_client = NULL;
1089 #if defined(OS_ANDROID)
1090 if (using_ipc_sync_compositing) {
1091 sync_compositor_message_filter_ =
1092 new SynchronousCompositorFilter(compositor_task_runner_);
1093 AddFilter(sync_compositor_message_filter_.get());
1094 input_handler_manager_client = sync_compositor_message_filter_.get();
1095 } else if (sync_compositor_factory) {
1096 input_handler_manager_client =
1097 sync_compositor_factory->GetInputHandlerManagerClient();
1098 }
1099 #endif
1100 if (!input_handler_manager_client) {
1101 scoped_refptr<InputEventFilter> compositor_input_event_filter(
1102 new InputEventFilter(main_input_callback_.callback(),
1103 main_thread_compositor_task_runner_,
1104 compositor_task_runner_));
1105 input_handler_manager_client = compositor_input_event_filter.get();
1106 input_event_filter_ = compositor_input_event_filter;
1107 }
1108 input_handler_manager_.reset(new InputHandlerManager(
1109 compositor_task_runner_, input_handler_manager_client,
1110 renderer_scheduler_.get()));
1111 }
1112
1113 void RenderThreadImpl::EnsureWebKitInitialized() { 1055 void RenderThreadImpl::EnsureWebKitInitialized() {
1114 if (blink_platform_impl_) 1056 if (blink_platform_impl_)
1115 return; 1057 return;
1116 1058
1117 const base::CommandLine& command_line = 1059 const base::CommandLine& command_line =
1118 *base::CommandLine::ForCurrentProcess(); 1060 *base::CommandLine::ForCurrentProcess();
1119 1061
1120 #ifdef ENABLE_VTUNE_JIT_INTERFACE 1062 #ifdef ENABLE_VTUNE_JIT_INTERFACE
1121 if (command_line.HasSwitch(switches::kEnableVtune)) 1063 if (command_line.HasSwitch(switches::kEnableVtune))
1122 gin::Debug::SetJitCodeEventHandler(vTune::GetVtuneCodeEventHandler()); 1064 gin::Debug::SetJitCodeEventHandler(vTune::GetVtuneCodeEventHandler());
(...skipping 10 matching lines...) Expand all
1133 isolate->SetAddHistogramSampleFunction(AddHistogramSample); 1075 isolate->SetAddHistogramSampleFunction(AddHistogramSample);
1134 1076
1135 main_thread_compositor_task_runner_ = 1077 main_thread_compositor_task_runner_ =
1136 renderer_scheduler_->CompositorTaskRunner(); 1078 renderer_scheduler_->CompositorTaskRunner();
1137 1079
1138 main_input_callback_.Reset( 1080 main_input_callback_.Reset(
1139 base::Bind(base::IgnoreResult(&RenderThreadImpl::OnMessageReceived), 1081 base::Bind(base::IgnoreResult(&RenderThreadImpl::OnMessageReceived),
1140 base::Unretained(this))); 1082 base::Unretained(this)));
1141 1083
1142 SetResourceDispatchTaskQueue(renderer_scheduler_->LoadingTaskRunner()); 1084 SetResourceDispatchTaskQueue(renderer_scheduler_->LoadingTaskRunner());
1143 if (!command_line.HasSwitch(switches::kDisableThreadedCompositing)) 1085
1144 InitializeCompositorThread(); 1086 bool enable = !command_line.HasSwitch(switches::kDisableThreadedCompositing);
1087 if (enable) {
1088 #if defined(OS_ANDROID)
1089 SynchronousCompositorFactory* sync_compositor_factory =
1090 SynchronousCompositorFactory::GetInstance();
1091 bool using_ipc_sync_compositing =
1092 base::CommandLine::ForCurrentProcess()->HasSwitch(
1093 switches::kIPCSyncCompositing);
1094 DCHECK(!sync_compositor_factory || !using_ipc_sync_compositing);
1095
1096 if (sync_compositor_factory) {
1097 compositor_task_runner_ =
1098 sync_compositor_factory->GetCompositorTaskRunner();
1099 }
1100 #endif
1101 if (!compositor_task_runner_) {
1102 compositor_thread_.reset(new base::Thread("Compositor"));
1103 base::Thread::Options compositor_thread_options;
1104 #if defined(OS_ANDROID)
1105 compositor_thread_options.priority = base::ThreadPriority::DISPLAY;
1106 #endif
1107 compositor_thread_->StartWithOptions(compositor_thread_options);
1108 compositor_task_runner_ = compositor_thread_->task_runner();
1109 compositor_task_runner_->PostTask(
1110 FROM_HERE,
1111 base::Bind(base::IgnoreResult(&ThreadRestrictions::SetIOAllowed),
1112 false));
1113 }
1114
1115 InputHandlerManagerClient* input_handler_manager_client = NULL;
1116 #if defined(OS_ANDROID)
1117 if (using_ipc_sync_compositing) {
1118 sync_compositor_message_filter_ =
1119 new SynchronousCompositorFilter(compositor_task_runner_);
1120 AddFilter(sync_compositor_message_filter_.get());
1121 input_handler_manager_client = sync_compositor_message_filter_.get();
1122 } else if (sync_compositor_factory) {
1123 input_handler_manager_client =
1124 sync_compositor_factory->GetInputHandlerManagerClient();
1125 }
1126 #endif
1127 if (!input_handler_manager_client) {
1128 scoped_refptr<InputEventFilter> compositor_input_event_filter(
1129 new InputEventFilter(main_input_callback_.callback(),
1130 main_thread_compositor_task_runner_,
1131 compositor_task_runner_));
1132 input_handler_manager_client = compositor_input_event_filter.get();
1133 input_event_filter_ = compositor_input_event_filter;
1134 }
1135 input_handler_manager_.reset(new InputHandlerManager(
1136 compositor_task_runner_, input_handler_manager_client,
1137 renderer_scheduler_.get()));
1138 }
1145 1139
1146 if (!input_event_filter_.get()) { 1140 if (!input_event_filter_.get()) {
1147 // Always provide an input event filter implementation to ensure consistent 1141 // Always provide an input event filter implementation to ensure consistent
1148 // input event scheduling and prioritization. 1142 // input event scheduling and prioritization.
1149 // TODO(jdduke): Merge InputEventFilter, InputHandlerManager and 1143 // TODO(jdduke): Merge InputEventFilter, InputHandlerManager and
1150 // MainThreadInputEventFilter, crbug.com/436057. 1144 // MainThreadInputEventFilter, crbug.com/436057.
1151 input_event_filter_ = new MainThreadInputEventFilter( 1145 input_event_filter_ = new MainThreadInputEventFilter(
1152 main_input_callback_.callback(), main_thread_compositor_task_runner_); 1146 main_input_callback_.callback(), main_thread_compositor_task_runner_);
1153 } 1147 }
1154 AddFilter(input_event_filter_.get()); 1148 AddFilter(input_event_filter_.get());
1155 1149
1156 scoped_refptr<base::SingleThreadTaskRunner> compositor_impl_side_task_runner; 1150 scoped_refptr<base::SingleThreadTaskRunner> compositor_impl_side_task_runner;
1157 if (compositor_task_runner_) 1151 if (enable)
1158 compositor_impl_side_task_runner = compositor_task_runner_; 1152 compositor_impl_side_task_runner = compositor_task_runner_;
1159 else 1153 else
1160 compositor_impl_side_task_runner = base::ThreadTaskRunnerHandle::Get(); 1154 compositor_impl_side_task_runner = base::ThreadTaskRunnerHandle::Get();
1161 1155
1162 compositor_message_filter_ = new CompositorForwardingMessageFilter( 1156 compositor_message_filter_ = new CompositorForwardingMessageFilter(
1163 compositor_impl_side_task_runner.get()); 1157 compositor_impl_side_task_runner.get());
1164 AddFilter(compositor_message_filter_.get()); 1158 AddFilter(compositor_message_filter_.get());
1165 1159
1166 RenderThreadImpl::RegisterSchemes(); 1160 RenderThreadImpl::RegisterSchemes();
1167 1161
(...skipping 823 matching lines...) Expand 10 before | Expand all | Expand 10 after
1991 1985
1992 void RenderThreadImpl::ReleaseFreeMemory() { 1986 void RenderThreadImpl::ReleaseFreeMemory() {
1993 base::allocator::ReleaseFreeMemory(); 1987 base::allocator::ReleaseFreeMemory();
1994 discardable_shared_memory_manager()->ReleaseFreeMemory(); 1988 discardable_shared_memory_manager()->ReleaseFreeMemory();
1995 1989
1996 if (blink_platform_impl_) 1990 if (blink_platform_impl_)
1997 blink::decommitFreeableMemory(); 1991 blink::decommitFreeableMemory();
1998 } 1992 }
1999 1993
2000 } // namespace content 1994 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_thread_impl.h ('k') | third_party/WebKit/LayoutTests/TestExpectations » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698