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

Side by Side Diff: content/renderer/gpu/render_widget_compositor.cc

Issue 12226051: Clean up RenderWidget/RenderWidgetCompositor/WebKit interactions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: law of demeter Created 7 years, 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/gpu/render_widget_compositor.h" 5 #include "content/renderer/gpu/render_widget_compositor.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/string_number_conversions.h" 9 #include "base/string_number_conversions.h"
10 #include "base/synchronization/lock.h" 10 #include "base/synchronization/lock.h"
11 #include "base/time.h" 11 #include "base/time.h"
12 #include "cc/context_provider.h" 12 #include "cc/context_provider.h"
13 #include "cc/layer.h" 13 #include "cc/layer.h"
14 #include "cc/layer_tree_debug_state.h" 14 #include "cc/layer_tree_debug_state.h"
15 #include "cc/layer_tree_host.h" 15 #include "cc/layer_tree_host.h"
16 #include "cc/switches.h" 16 #include "cc/switches.h"
17 #include "cc/thread_impl.h" 17 #include "cc/thread_impl.h"
18 #include "content/renderer/gpu/compositor_thread.h" 18 #include "content/renderer/gpu/compositor_thread.h"
19 #include "content/renderer/render_thread_impl.h" 19 #include "content/renderer/render_thread_impl.h"
20 #include "third_party/WebKit/Source/Platform/chromium/public/WebLayerTreeViewCli ent.h"
21 #include "third_party/WebKit/Source/Platform/chromium/public/WebSharedGraphicsCo ntext3D.h" 20 #include "third_party/WebKit/Source/Platform/chromium/public/WebSharedGraphicsCo ntext3D.h"
22 #include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h" 21 #include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h"
23 #include "webkit/compositor_bindings/web_layer_impl.h" 22 #include "webkit/compositor_bindings/web_layer_impl.h"
24 #include "webkit/compositor_bindings/web_to_ccinput_handler_adapter.h" 23 #include "webkit/compositor_bindings/web_to_ccinput_handler_adapter.h"
25 24
26 namespace cc { 25 namespace cc {
27 class Layer; 26 class Layer;
28 } 27 }
29 28
30 using WebKit::WebFloatPoint; 29 using WebKit::WebFloatPoint;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 return false; 70 return false;
72 } 71 }
73 } 72 }
74 73
75 74
76 } // namespace 75 } // namespace
77 76
78 // static 77 // static
79 scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create( 78 scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create(
80 RenderWidget* widget, 79 RenderWidget* widget,
81 WebKit::WebLayerTreeViewClient* client,
82 WebKit::WebLayerTreeView::Settings web_settings) { 80 WebKit::WebLayerTreeView::Settings web_settings) {
83 scoped_ptr<RenderWidgetCompositor> comp( 81 scoped_ptr<RenderWidgetCompositor> compositor(
84 new RenderWidgetCompositor(widget, client)); 82 new RenderWidgetCompositor(widget));
85 83
86 CommandLine* cmd = CommandLine::ForCurrentProcess(); 84 CommandLine* cmd = CommandLine::ForCurrentProcess();
87 85
88 cc::LayerTreeSettings settings; 86 cc::LayerTreeSettings settings;
89 settings.acceleratePainting = web_settings.acceleratePainting; 87 settings.acceleratePainting = web_settings.acceleratePainting;
90 settings.renderVSyncEnabled = web_settings.renderVSyncEnabled; 88 settings.renderVSyncEnabled = web_settings.renderVSyncEnabled;
91 settings.perTilePaintingEnabled = web_settings.perTilePaintingEnabled; 89 settings.perTilePaintingEnabled = web_settings.perTilePaintingEnabled;
92 settings.acceleratedAnimationEnabled = 90 settings.acceleratedAnimationEnabled =
93 web_settings.acceleratedAnimationEnabled; 91 web_settings.acceleratedAnimationEnabled;
94 settings.refreshRate = web_settings.refreshRate; 92 settings.refreshRate = web_settings.refreshRate;
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 #if defined(OS_ANDROID) 197 #if defined(OS_ANDROID)
200 // TODO(danakj): Move these to the android code. 198 // TODO(danakj): Move these to the android code.
201 settings.canUseLCDText = false; 199 settings.canUseLCDText = false;
202 settings.maxPartialTextureUpdates = 0; 200 settings.maxPartialTextureUpdates = 0;
203 settings.useLinearFadeScrollbarAnimator = true; 201 settings.useLinearFadeScrollbarAnimator = true;
204 settings.solidColorScrollbars = true; 202 settings.solidColorScrollbars = true;
205 settings.solidColorScrollbarColor = SkColorSetARGB(128, 128, 128, 128); 203 settings.solidColorScrollbarColor = SkColorSetARGB(128, 128, 128, 128);
206 settings.solidColorScrollbarThicknessDIP = 3; 204 settings.solidColorScrollbarThicknessDIP = 3;
207 #endif 205 #endif
208 206
209 if (!comp->initialize(settings)) 207 if (!compositor->initialize(settings))
210 return scoped_ptr<RenderWidgetCompositor>(); 208 return scoped_ptr<RenderWidgetCompositor>();
211 209
212 return comp.Pass(); 210 return compositor.Pass();
213 } 211 }
214 212
215 RenderWidgetCompositor::RenderWidgetCompositor( 213 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget)
216 RenderWidget* widget, WebKit::WebLayerTreeViewClient* client)
217 : suppress_schedule_composite_(false), 214 : suppress_schedule_composite_(false),
218 widget_(widget), 215 widget_(widget) {
219 client_(client) {
220 } 216 }
221 217
222 RenderWidgetCompositor::~RenderWidgetCompositor() {} 218 RenderWidgetCompositor::~RenderWidgetCompositor() {}
223 219
224 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) { 220 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) {
225 if (suppress_schedule_composite_ == suppress) 221 if (suppress_schedule_composite_ == suppress)
226 return; 222 return;
227 223
228 if (suppress) 224 if (suppress)
229 TRACE_EVENT_ASYNC_BEGIN0("gpu", 225 TRACE_EVENT_ASYNC_BEGIN0("gpu",
230 "RenderWidgetCompositor::SetSuppressScheduleComposite", this); 226 "RenderWidgetCompositor::SetSuppressScheduleComposite", this);
231 else 227 else
232 TRACE_EVENT_ASYNC_END0("gpu", 228 TRACE_EVENT_ASYNC_END0("gpu",
233 "RenderWidgetCompositor::SetSuppressScheduleComposite", this); 229 "RenderWidgetCompositor::SetSuppressScheduleComposite", this);
234 suppress_schedule_composite_ = suppress; 230 suppress_schedule_composite_ = suppress;
235 } 231 }
236 232
233 void RenderWidgetCompositor::Animate(base::TimeTicks time) {
234 layer_tree_host_->updateAnimations(time);
235 }
236
237 void RenderWidgetCompositor::Composite() {
238 layer_tree_host_->composite();
239 }
240
241 void RenderWidgetCompositor::GetRenderingStats(cc::RenderingStats* stats) {
242 layer_tree_host_->renderingStats(stats);
243 }
244
237 bool RenderWidgetCompositor::initialize(cc::LayerTreeSettings settings) { 245 bool RenderWidgetCompositor::initialize(cc::LayerTreeSettings settings) {
238 scoped_ptr<cc::Thread> impl_thread; 246 scoped_ptr<cc::Thread> impl_thread;
239 CompositorThread* compositor_thread = 247 CompositorThread* compositor_thread =
240 RenderThreadImpl::current()->compositor_thread(); 248 RenderThreadImpl::current()->compositor_thread();
241 threaded_ = !!compositor_thread; 249 threaded_ = !!compositor_thread;
242 if (compositor_thread) 250 if (compositor_thread)
243 impl_thread = cc::ThreadImpl::createForDifferentThread( 251 impl_thread = cc::ThreadImpl::createForDifferentThread(
244 compositor_thread->message_loop()->message_loop_proxy()); 252 compositor_thread->message_loop()->message_loop_proxy());
245 layer_tree_host_ = cc::LayerTreeHost::create(this, 253 layer_tree_host_ = cc::LayerTreeHost::create(this,
246 settings, 254 settings,
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 if (threaded_) 336 if (threaded_)
329 layer_tree_host_->setNeedsAnimate(); 337 layer_tree_host_->setNeedsAnimate();
330 else 338 else
331 widget_->scheduleAnimation(); 339 widget_->scheduleAnimation();
332 } 340 }
333 341
334 bool RenderWidgetCompositor::commitRequested() const { 342 bool RenderWidgetCompositor::commitRequested() const {
335 return layer_tree_host_->commitRequested(); 343 return layer_tree_host_->commitRequested();
336 } 344 }
337 345
338 void RenderWidgetCompositor::composite() {
339 layer_tree_host_->composite();
340 }
341
342 void RenderWidgetCompositor::updateAnimations(double frame_begin_time_sec) {
343 base::TimeTicks frame_begin_time =
344 base::TimeTicks::FromInternalValue(frame_begin_time_sec *
345 base::Time::kMicrosecondsPerSecond);
346 layer_tree_host_->updateAnimations(frame_begin_time);
347 }
348
349 void RenderWidgetCompositor::didStopFlinging() { 346 void RenderWidgetCompositor::didStopFlinging() {
350 layer_tree_host_->didStopFlinging(); 347 layer_tree_host_->didStopFlinging();
351 } 348 }
352 349
353 bool RenderWidgetCompositor::compositeAndReadback(void *pixels, 350 bool RenderWidgetCompositor::compositeAndReadback(void *pixels,
354 const WebRect& rect) { 351 const WebRect& rect) {
355 return layer_tree_host_->compositeAndReadback(pixels, rect); 352 return layer_tree_host_->compositeAndReadback(pixels, rect);
356 } 353 }
357 354
358 void RenderWidgetCompositor::finishAllRendering() { 355 void RenderWidgetCompositor::finishAllRendering() {
(...skipping 30 matching lines...) Expand all
389 386
390 void RenderWidgetCompositor::willBeginFrame() { 387 void RenderWidgetCompositor::willBeginFrame() {
391 widget_->InstrumentWillBeginFrame(); 388 widget_->InstrumentWillBeginFrame();
392 widget_->willBeginCompositorFrame(); 389 widget_->willBeginCompositorFrame();
393 } 390 }
394 391
395 void RenderWidgetCompositor::didBeginFrame() { 392 void RenderWidgetCompositor::didBeginFrame() {
396 widget_->InstrumentDidBeginFrame(); 393 widget_->InstrumentDidBeginFrame();
397 } 394 }
398 395
399 // TODO(jamesr): This should go through WebWidget
400 void RenderWidgetCompositor::animate(double monotonic_frame_begin_time) { 396 void RenderWidgetCompositor::animate(double monotonic_frame_begin_time) {
401 client_->updateAnimations(monotonic_frame_begin_time); 397 widget_->webwidget()->animate(monotonic_frame_begin_time);
402 } 398 }
403 399
404 // Can delete from WebLayerTreeViewClient
405 void RenderWidgetCompositor::layout() { 400 void RenderWidgetCompositor::layout() {
406 widget_->webwidget()->layout(); 401 widget_->webwidget()->layout();
407 } 402 }
408 403
409 // TODO(jamesr): This should go through WebWidget
410 void RenderWidgetCompositor::applyScrollAndScale(gfx::Vector2d scroll_delta, 404 void RenderWidgetCompositor::applyScrollAndScale(gfx::Vector2d scroll_delta,
411 float page_scale) { 405 float page_scale) {
412 client_->applyScrollAndScale(scroll_delta, page_scale); 406 widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale);
413 } 407 }
414 408
415 scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::createOutputSurface() { 409 scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::createOutputSurface() {
416 return widget_->CreateOutputSurface(); 410 return widget_->CreateOutputSurface();
417 } 411 }
418 412
419 // TODO(jamesr): This should go through WebWidget
420 void RenderWidgetCompositor::didRecreateOutputSurface(bool success) { 413 void RenderWidgetCompositor::didRecreateOutputSurface(bool success) {
421 client_->didRecreateOutputSurface(success); 414 if (!success)
415 widget_->webwidget()->didExitCompositingMode();
422 } 416 }
423 417
424 // TODO(jamesr): This should go through WebWidget
425 scoped_ptr<cc::InputHandler> RenderWidgetCompositor::createInputHandler() { 418 scoped_ptr<cc::InputHandler> RenderWidgetCompositor::createInputHandler() {
426 scoped_ptr<cc::InputHandler> ret; 419 scoped_ptr<cc::InputHandler> ret;
427 scoped_ptr<WebKit::WebInputHandler> web_handler( 420 scoped_ptr<WebKit::WebInputHandler> web_handler(
428 client_->createInputHandler()); 421 widget_->webwidget()->createInputHandler());
429 if (web_handler) 422 if (web_handler)
430 ret = WebKit::WebToCCInputHandlerAdapter::create(web_handler.Pass()); 423 ret = WebKit::WebToCCInputHandlerAdapter::create(web_handler.Pass());
431 return ret.Pass(); 424 return ret.Pass();
432 } 425 }
433 426
434 void RenderWidgetCompositor::willCommit() { 427 void RenderWidgetCompositor::willCommit() {
435 widget_->InstrumentWillComposite(); 428 widget_->InstrumentWillComposite();
436 } 429 }
437 430
438 void RenderWidgetCompositor::didCommit() { 431 void RenderWidgetCompositor::didCommit() {
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 518
526 scoped_refptr<cc::ContextProvider> 519 scoped_refptr<cc::ContextProvider>
527 RenderWidgetCompositor::OffscreenContextProviderForCompositorThread() { 520 RenderWidgetCompositor::OffscreenContextProviderForCompositorThread() {
528 if (!contexts_compositor_thread_ || 521 if (!contexts_compositor_thread_ ||
529 contexts_compositor_thread_->DestroyedOnMainThread()) 522 contexts_compositor_thread_->DestroyedOnMainThread())
530 contexts_compositor_thread_ = new CompositorThreadContextProvider; 523 contexts_compositor_thread_ = new CompositorThreadContextProvider;
531 return contexts_compositor_thread_; 524 return contexts_compositor_thread_;
532 } 525 }
533 526
534 } // namespace content 527 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698