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

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

Issue 1589463002: compositor worker: Use a WebThread for the compositor thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: self.nit Created 4 years, 11 months 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') | no next file » | 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 <utility> 10 #include <utility>
(...skipping 26 matching lines...) Expand all
37 #include "base/values.h" 37 #include "base/values.h"
38 #include "build/build_config.h" 38 #include "build/build_config.h"
39 #include "cc/base/histograms.h" 39 #include "cc/base/histograms.h"
40 #include "cc/base/switches.h" 40 #include "cc/base/switches.h"
41 #include "cc/blink/web_external_bitmap_impl.h" 41 #include "cc/blink/web_external_bitmap_impl.h"
42 #include "cc/blink/web_layer_impl.h" 42 #include "cc/blink/web_layer_impl.h"
43 #include "cc/layers/layer_settings.h" 43 #include "cc/layers/layer_settings.h"
44 #include "cc/raster/task_graph_runner.h" 44 #include "cc/raster/task_graph_runner.h"
45 #include "cc/trees/layer_tree_host_common.h" 45 #include "cc/trees/layer_tree_host_common.h"
46 #include "cc/trees/layer_tree_settings.h" 46 #include "cc/trees/layer_tree_settings.h"
47 #include "components/scheduler/child/compositor_worker_scheduler.h"
47 #include "components/scheduler/child/webthread_base.h" 48 #include "components/scheduler/child/webthread_base.h"
49 #include "components/scheduler/child/webthread_impl_for_worker_scheduler.h"
48 #include "components/scheduler/renderer/renderer_scheduler.h" 50 #include "components/scheduler/renderer/renderer_scheduler.h"
49 #include "content/child/appcache/appcache_dispatcher.h" 51 #include "content/child/appcache/appcache_dispatcher.h"
50 #include "content/child/appcache/appcache_frontend_impl.h" 52 #include "content/child/appcache/appcache_frontend_impl.h"
51 #include "content/child/child_discardable_shared_memory_manager.h" 53 #include "content/child/child_discardable_shared_memory_manager.h"
52 #include "content/child/child_gpu_memory_buffer_manager.h" 54 #include "content/child/child_gpu_memory_buffer_manager.h"
53 #include "content/child/child_histogram_message_filter.h" 55 #include "content/child/child_histogram_message_filter.h"
54 #include "content/child/child_resource_message_filter.h" 56 #include "content/child/child_resource_message_filter.h"
55 #include "content/child/child_shared_bitmap_manager.h" 57 #include "content/child/child_shared_bitmap_manager.h"
56 #include "content/child/content_child_helpers.h" 58 #include "content/child/content_child_helpers.h"
57 #include "content/child/db_message_filter.h" 59 #include "content/child/db_message_filter.h"
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 213
212 using base::ThreadRestrictions; 214 using base::ThreadRestrictions;
213 using blink::WebDocument; 215 using blink::WebDocument;
214 using blink::WebFrame; 216 using blink::WebFrame;
215 using blink::WebNetworkStateNotifier; 217 using blink::WebNetworkStateNotifier;
216 using blink::WebRuntimeFeatures; 218 using blink::WebRuntimeFeatures;
217 using blink::WebScriptController; 219 using blink::WebScriptController;
218 using blink::WebSecurityPolicy; 220 using blink::WebSecurityPolicy;
219 using blink::WebString; 221 using blink::WebString;
220 using blink::WebView; 222 using blink::WebView;
223 using scheduler::WebThreadImplForWorkerScheduler;
221 224
222 namespace content { 225 namespace content {
223 226
224 namespace { 227 namespace {
225 228
226 const int64_t kInitialIdleHandlerDelayMs = 1000; 229 const int64_t kInitialIdleHandlerDelayMs = 1000;
227 const int64_t kLongIdleHandlerDelayMs = 30 * 1000; 230 const int64_t kLongIdleHandlerDelayMs = 30 * 1000;
228 231
229 #if defined(OS_ANDROID) 232 #if defined(OS_ANDROID)
230 // On Android, resource messages can each take ~1.5ms to dispatch on the browser 233 // On Android, resource messages can each take ~1.5ms to dispatch on the browser
231 // IO thread. Limiting the message rate to 3/frame at 60hz ensures that the 234 // IO thread. Limiting the message rate to 3/frame at 60hz ensures that the
232 // induced work takes but a fraction (~1/4) of the overall frame budget. 235 // induced work takes but a fraction (~1/4) of the overall frame budget.
233 const int kMaxResourceRequestsPerFlushWhenThrottled = 3; 236 const int kMaxResourceRequestsPerFlushWhenThrottled = 3;
234 #else 237 #else
235 const int kMaxResourceRequestsPerFlushWhenThrottled = 8; 238 const int kMaxResourceRequestsPerFlushWhenThrottled = 8;
236 #endif 239 #endif
237 const double kThrottledResourceRequestFlushPeriodS = 1. / 60.; 240 const double kThrottledResourceRequestFlushPeriodS = 1. / 60.;
238 241
239 // Maximum allocation size allowed for image scaling filters that 242 // Maximum allocation size allowed for image scaling filters that
240 // require pre-scaling. Skia will fallback to a filter that doesn't 243 // require pre-scaling. Skia will fallback to a filter that doesn't
241 // require pre-scaling if the default filter would require an 244 // require pre-scaling if the default filter would require an
242 // allocation that exceeds this limit. 245 // allocation that exceeds this limit.
243 const size_t kImageCacheSingleAllocationByteLimit = 64 * 1024 * 1024; 246 const size_t kImageCacheSingleAllocationByteLimit = 64 * 1024 * 1024;
244 247
245 // Keep the global RenderThreadImpl in a TLS slot so it is impossible to access 248 // Keep the global RenderThreadImpl in a TLS slot so it is impossible to access
246 // incorrectly from the wrong thread. 249 // incorrectly from the wrong thread.
247 base::LazyInstance<base::ThreadLocalPointer<RenderThreadImpl> > 250 base::LazyInstance<base::ThreadLocalPointer<RenderThreadImpl> >
248 lazy_tls = LAZY_INSTANCE_INITIALIZER; 251 lazy_tls = LAZY_INSTANCE_INITIALIZER;
249 252
253 class WebThreadForCompositor : public WebThreadImplForWorkerScheduler {
254 public:
255 explicit WebThreadForCompositor(base::Thread::Options options)
256 : WebThreadImplForWorkerScheduler("Compositor", options) {
257 Init();
258 }
259 ~WebThreadForCompositor() override {}
260
261 private:
262 // WebThreadImplForWorkerScheduler:
263 scoped_ptr<scheduler::WorkerScheduler> CreateWorkerScheduler() override {
264 return make_scoped_ptr(new scheduler::CompositorWorkerScheduler(thread()));
265 }
266
267 DISALLOW_COPY_AND_ASSIGN(WebThreadForCompositor);
268 };
269
250 class RenderViewZoomer : public RenderViewVisitor { 270 class RenderViewZoomer : public RenderViewVisitor {
251 public: 271 public:
252 RenderViewZoomer(const std::string& scheme, 272 RenderViewZoomer(const std::string& scheme,
253 const std::string& host, 273 const std::string& host,
254 double zoom_level) : scheme_(scheme), 274 double zoom_level) : scheme_(scheme),
255 host_(host), 275 host_(host),
256 zoom_level_(zoom_level) { 276 zoom_level_(zoom_level) {
257 } 277 }
258 278
259 bool Visit(RenderView* render_view) override { 279 bool Visit(RenderView* render_view) override {
(...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 #if defined(OS_ANDROID) 906 #if defined(OS_ANDROID)
887 if (sync_compositor_message_filter_) { 907 if (sync_compositor_message_filter_) {
888 RemoveFilter(sync_compositor_message_filter_.get()); 908 RemoveFilter(sync_compositor_message_filter_.get());
889 sync_compositor_message_filter_ = nullptr; 909 sync_compositor_message_filter_ = nullptr;
890 } 910 }
891 stream_texture_factory_ = nullptr; 911 stream_texture_factory_ = nullptr;
892 #endif 912 #endif
893 913
894 media_thread_.reset(); 914 media_thread_.reset();
895 915
896 blink_platform_impl_->set_compositor_thread(nullptr); 916 blink_platform_impl_->SetCompositorThread(nullptr);
897 917
898 compositor_thread_.reset(); 918 compositor_thread_.reset();
899 919
900 // AudioMessageFilter may be accessed on |media_thread_|, so shutdown after. 920 // AudioMessageFilter may be accessed on |media_thread_|, so shutdown after.
901 RemoveFilter(audio_message_filter_.get()); 921 RemoveFilter(audio_message_filter_.get());
902 audio_message_filter_ = NULL; 922 audio_message_filter_ = NULL;
903 923
904 raster_worker_pool_->Shutdown(); 924 raster_worker_pool_->Shutdown();
905 925
906 main_input_callback_.Cancel(); 926 main_input_callback_.Cancel();
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1141 base::CommandLine::ForCurrentProcess()->HasSwitch( 1161 base::CommandLine::ForCurrentProcess()->HasSwitch(
1142 switches::kIPCSyncCompositing); 1162 switches::kIPCSyncCompositing);
1143 DCHECK(!sync_compositor_factory || !using_ipc_sync_compositing); 1163 DCHECK(!sync_compositor_factory || !using_ipc_sync_compositing);
1144 1164
1145 if (sync_compositor_factory) { 1165 if (sync_compositor_factory) {
1146 compositor_task_runner_ = 1166 compositor_task_runner_ =
1147 sync_compositor_factory->GetCompositorTaskRunner(); 1167 sync_compositor_factory->GetCompositorTaskRunner();
1148 } 1168 }
1149 #endif 1169 #endif
1150 if (!compositor_task_runner_.get()) { 1170 if (!compositor_task_runner_.get()) {
1151 1171 base::Thread::Options options;
1152 compositor_thread_.reset(new base::Thread("Compositor"));
1153 base::Thread::Options compositor_thread_options;
1154 #if defined(OS_ANDROID) 1172 #if defined(OS_ANDROID)
1155 compositor_thread_options.priority = base::ThreadPriority::DISPLAY; 1173 options.priority = base::ThreadPriority::DISPLAY;
1156 #endif 1174 #endif
1157 compositor_thread_->StartWithOptions(compositor_thread_options); 1175 compositor_thread_.reset(new WebThreadForCompositor(options));
1158 compositor_task_runner_ = compositor_thread_->task_runner(); 1176 blink_platform_impl_->SetCompositorThread(compositor_thread_.get());
1177 compositor_task_runner_ = compositor_thread_->TaskRunner();
1159 compositor_task_runner_->PostTask( 1178 compositor_task_runner_->PostTask(
1160 FROM_HERE, 1179 FROM_HERE,
1161 base::Bind(base::IgnoreResult(&ThreadRestrictions::SetIOAllowed), 1180 base::Bind(base::IgnoreResult(&ThreadRestrictions::SetIOAllowed),
1162 false)); 1181 false));
1163 } 1182 }
1164 1183
1165 InputHandlerManagerClient* input_handler_manager_client = NULL; 1184 InputHandlerManagerClient* input_handler_manager_client = NULL;
1166 #if defined(OS_ANDROID) 1185 #if defined(OS_ANDROID)
1167 if (using_ipc_sync_compositing) { 1186 if (using_ipc_sync_compositing) {
1168 sync_compositor_message_filter_ = 1187 sync_compositor_message_filter_ =
(...skipping 923 matching lines...) Expand 10 before | Expand all | Expand 10 after
2092 } 2111 }
2093 2112
2094 void RenderThreadImpl::PendingRenderFrameConnect::OnConnectionError() { 2113 void RenderThreadImpl::PendingRenderFrameConnect::OnConnectionError() {
2095 size_t erased = 2114 size_t erased =
2096 RenderThreadImpl::current()->pending_render_frame_connects_.erase( 2115 RenderThreadImpl::current()->pending_render_frame_connects_.erase(
2097 routing_id_); 2116 routing_id_);
2098 DCHECK_EQ(1u, erased); 2117 DCHECK_EQ(1u, erased);
2099 } 2118 }
2100 2119
2101 } // namespace content 2120 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_thread_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698