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

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: rebased 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
« no previous file with comments | « content/renderer/gpu/render_widget_compositor.h ('k') | content/renderer/render_view_impl.cc » ('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) 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 <limits> 7 #include <limits>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/string_number_conversions.h" 11 #include "base/string_number_conversions.h"
12 #include "base/synchronization/lock.h" 12 #include "base/synchronization/lock.h"
13 #include "base/time.h" 13 #include "base/time.h"
14 #include "cc/context_provider.h" 14 #include "cc/context_provider.h"
15 #include "cc/layer.h" 15 #include "cc/layer.h"
16 #include "cc/layer_tree_debug_state.h" 16 #include "cc/layer_tree_debug_state.h"
17 #include "cc/layer_tree_host.h" 17 #include "cc/layer_tree_host.h"
18 #include "cc/switches.h" 18 #include "cc/switches.h"
19 #include "cc/thread_impl.h" 19 #include "cc/thread_impl.h"
20 #include "content/public/common/content_switches.h" 20 #include "content/public/common/content_switches.h"
21 #include "content/renderer/gpu/compositor_thread.h" 21 #include "content/renderer/gpu/compositor_thread.h"
22 #include "content/renderer/render_thread_impl.h" 22 #include "content/renderer/render_thread_impl.h"
23 #include "third_party/WebKit/Source/Platform/chromium/public/WebLayerTreeViewCli ent.h"
24 #include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h" 23 #include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h"
25 #include "ui/gl/gl_switches.h" 24 #include "ui/gl/gl_switches.h"
26 #include "webkit/compositor_bindings/web_layer_impl.h" 25 #include "webkit/compositor_bindings/web_layer_impl.h"
27 #include "webkit/compositor_bindings/web_to_ccinput_handler_adapter.h" 26 #include "webkit/compositor_bindings/web_to_ccinput_handler_adapter.h"
28 27
29 namespace cc { 28 namespace cc {
30 class Layer; 29 class Layer;
31 } 30 }
32 31
33 using WebKit::WebFloatPoint; 32 using WebKit::WebFloatPoint;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 return false; 73 return false;
75 } 74 }
76 } 75 }
77 76
78 77
79 } // namespace 78 } // namespace
80 79
81 // static 80 // static
82 scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create( 81 scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create(
83 RenderWidget* widget, 82 RenderWidget* widget,
84 WebKit::WebLayerTreeViewClient* client,
85 WebKit::WebLayerTreeView::Settings web_settings) { 83 WebKit::WebLayerTreeView::Settings web_settings) {
86 scoped_ptr<RenderWidgetCompositor> comp( 84 scoped_ptr<RenderWidgetCompositor> compositor(
87 new RenderWidgetCompositor(widget, client)); 85 new RenderWidgetCompositor(widget));
88 86
89 CommandLine* cmd = CommandLine::ForCurrentProcess(); 87 CommandLine* cmd = CommandLine::ForCurrentProcess();
90 88
91 cc::LayerTreeSettings settings; 89 cc::LayerTreeSettings settings;
92 settings.acceleratePainting = 90 settings.acceleratePainting =
93 cmd->HasSwitch(switches::kEnableAcceleratedPainting); 91 cmd->HasSwitch(switches::kEnableAcceleratedPainting);
94 settings.renderVSyncEnabled = !cmd->HasSwitch(switches::kDisableGpuVsync); 92 settings.renderVSyncEnabled = !cmd->HasSwitch(switches::kDisableGpuVsync);
95 settings.perTilePaintingEnabled = 93 settings.perTilePaintingEnabled =
96 cmd->HasSwitch(cc::switches::kEnablePerTilePainting); 94 cmd->HasSwitch(cc::switches::kEnablePerTilePainting);
97 settings.acceleratedAnimationEnabled = 95 settings.acceleratedAnimationEnabled =
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 #if defined(OS_ANDROID) 231 #if defined(OS_ANDROID)
234 // TODO(danakj): Move these to the android code. 232 // TODO(danakj): Move these to the android code.
235 settings.canUseLCDText = false; 233 settings.canUseLCDText = false;
236 settings.maxPartialTextureUpdates = 0; 234 settings.maxPartialTextureUpdates = 0;
237 settings.useLinearFadeScrollbarAnimator = true; 235 settings.useLinearFadeScrollbarAnimator = true;
238 settings.solidColorScrollbars = true; 236 settings.solidColorScrollbars = true;
239 settings.solidColorScrollbarColor = SkColorSetARGB(128, 128, 128, 128); 237 settings.solidColorScrollbarColor = SkColorSetARGB(128, 128, 128, 128);
240 settings.solidColorScrollbarThicknessDIP = 3; 238 settings.solidColorScrollbarThicknessDIP = 3;
241 #endif 239 #endif
242 240
243 if (!comp->initialize(settings)) 241 if (!compositor->initialize(settings))
244 return scoped_ptr<RenderWidgetCompositor>(); 242 return scoped_ptr<RenderWidgetCompositor>();
245 243
246 return comp.Pass(); 244 return compositor.Pass();
247 } 245 }
248 246
249 RenderWidgetCompositor::RenderWidgetCompositor( 247 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget)
250 RenderWidget* widget, WebKit::WebLayerTreeViewClient* client)
251 : suppress_schedule_composite_(false), 248 : suppress_schedule_composite_(false),
252 widget_(widget), 249 widget_(widget) {
253 client_(client) {
254 } 250 }
255 251
256 RenderWidgetCompositor::~RenderWidgetCompositor() {} 252 RenderWidgetCompositor::~RenderWidgetCompositor() {}
257 253
258 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) { 254 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) {
259 if (suppress_schedule_composite_ == suppress) 255 if (suppress_schedule_composite_ == suppress)
260 return; 256 return;
261 257
262 if (suppress) 258 if (suppress)
263 TRACE_EVENT_ASYNC_BEGIN0("gpu", 259 TRACE_EVENT_ASYNC_BEGIN0("gpu",
264 "RenderWidgetCompositor::SetSuppressScheduleComposite", this); 260 "RenderWidgetCompositor::SetSuppressScheduleComposite", this);
265 else 261 else
266 TRACE_EVENT_ASYNC_END0("gpu", 262 TRACE_EVENT_ASYNC_END0("gpu",
267 "RenderWidgetCompositor::SetSuppressScheduleComposite", this); 263 "RenderWidgetCompositor::SetSuppressScheduleComposite", this);
268 suppress_schedule_composite_ = suppress; 264 suppress_schedule_composite_ = suppress;
269 } 265 }
270 266
267 void RenderWidgetCompositor::Animate(base::TimeTicks time) {
268 layer_tree_host_->updateAnimations(time);
269 }
270
271 void RenderWidgetCompositor::Composite() {
272 layer_tree_host_->composite();
273 }
274
275 void RenderWidgetCompositor::GetRenderingStats(cc::RenderingStats* stats) {
276 layer_tree_host_->renderingStats(stats);
277 }
278
279 skia::RefPtr<SkPicture> RenderWidgetCompositor::CapturePicture() {
280 return layer_tree_host_->capturePicture();
281 }
282
283 void RenderWidgetCompositor::EnableHidingTopControls(bool enable) {
284 layer_tree_host_->enableHidingTopControls(enable);
285 }
286
271 bool RenderWidgetCompositor::initialize(cc::LayerTreeSettings settings) { 287 bool RenderWidgetCompositor::initialize(cc::LayerTreeSettings settings) {
272 scoped_ptr<cc::Thread> impl_thread; 288 scoped_ptr<cc::Thread> impl_thread;
273 CompositorThread* compositor_thread = 289 CompositorThread* compositor_thread =
274 RenderThreadImpl::current()->compositor_thread(); 290 RenderThreadImpl::current()->compositor_thread();
275 threaded_ = !!compositor_thread; 291 threaded_ = !!compositor_thread;
276 if (compositor_thread) 292 if (compositor_thread)
277 impl_thread = cc::ThreadImpl::createForDifferentThread( 293 impl_thread = cc::ThreadImpl::createForDifferentThread(
278 compositor_thread->message_loop()->message_loop_proxy()); 294 compositor_thread->message_loop()->message_loop_proxy());
279 layer_tree_host_ = cc::LayerTreeHost::create(this, 295 layer_tree_host_ = cc::LayerTreeHost::create(this,
280 settings, 296 settings,
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 if (threaded_) 378 if (threaded_)
363 layer_tree_host_->setNeedsAnimate(); 379 layer_tree_host_->setNeedsAnimate();
364 else 380 else
365 widget_->scheduleAnimation(); 381 widget_->scheduleAnimation();
366 } 382 }
367 383
368 bool RenderWidgetCompositor::commitRequested() const { 384 bool RenderWidgetCompositor::commitRequested() const {
369 return layer_tree_host_->commitRequested(); 385 return layer_tree_host_->commitRequested();
370 } 386 }
371 387
372 void RenderWidgetCompositor::composite() {
373 layer_tree_host_->composite();
374 }
375
376 void RenderWidgetCompositor::updateAnimations(double frame_begin_time_sec) {
377 base::TimeTicks frame_begin_time =
378 base::TimeTicks::FromInternalValue(frame_begin_time_sec *
379 base::Time::kMicrosecondsPerSecond);
380 layer_tree_host_->updateAnimations(frame_begin_time);
381 }
382
383 void RenderWidgetCompositor::didStopFlinging() { 388 void RenderWidgetCompositor::didStopFlinging() {
384 layer_tree_host_->didStopFlinging(); 389 layer_tree_host_->didStopFlinging();
385 } 390 }
386 391
387 bool RenderWidgetCompositor::compositeAndReadback(void *pixels, 392 bool RenderWidgetCompositor::compositeAndReadback(void *pixels,
388 const WebRect& rect) { 393 const WebRect& rect) {
389 return layer_tree_host_->compositeAndReadback(pixels, rect); 394 return layer_tree_host_->compositeAndReadback(pixels, rect);
390 } 395 }
391 396
392 void RenderWidgetCompositor::finishAllRendering() { 397 void RenderWidgetCompositor::finishAllRendering() {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 } 432 }
428 433
429 void RenderWidgetCompositor::didBeginFrame() { 434 void RenderWidgetCompositor::didBeginFrame() {
430 widget_->InstrumentDidBeginFrame(); 435 widget_->InstrumentDidBeginFrame();
431 } 436 }
432 437
433 void RenderWidgetCompositor::animate(double monotonic_frame_begin_time) { 438 void RenderWidgetCompositor::animate(double monotonic_frame_begin_time) {
434 widget_->webwidget()->animate(monotonic_frame_begin_time); 439 widget_->webwidget()->animate(monotonic_frame_begin_time);
435 } 440 }
436 441
437 // Can delete from WebLayerTreeViewClient
438 void RenderWidgetCompositor::layout() { 442 void RenderWidgetCompositor::layout() {
439 widget_->webwidget()->layout(); 443 widget_->webwidget()->layout();
440 } 444 }
441 445
442 // TODO(jamesr): This should go through WebWidget
443 void RenderWidgetCompositor::applyScrollAndScale(gfx::Vector2d scroll_delta, 446 void RenderWidgetCompositor::applyScrollAndScale(gfx::Vector2d scroll_delta,
444 float page_scale) { 447 float page_scale) {
445 client_->applyScrollAndScale(scroll_delta, page_scale); 448 widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale);
446 } 449 }
447 450
448 scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::createOutputSurface() { 451 scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::createOutputSurface() {
449 return widget_->CreateOutputSurface(); 452 return widget_->CreateOutputSurface();
450 } 453 }
451 454
452 // TODO(jamesr): This should go through WebWidget
453 void RenderWidgetCompositor::didRecreateOutputSurface(bool success) { 455 void RenderWidgetCompositor::didRecreateOutputSurface(bool success) {
454 client_->didRecreateOutputSurface(success); 456 if (!success)
457 widget_->webwidget()->didExitCompositingMode();
455 } 458 }
456 459
457 // TODO(jamesr): This should go through WebWidget
458 scoped_ptr<cc::InputHandler> RenderWidgetCompositor::createInputHandler() { 460 scoped_ptr<cc::InputHandler> RenderWidgetCompositor::createInputHandler() {
459 scoped_ptr<cc::InputHandler> ret; 461 scoped_ptr<cc::InputHandler> ret;
460 scoped_ptr<WebKit::WebInputHandler> web_handler( 462 scoped_ptr<WebKit::WebInputHandler> web_handler(
461 client_->createInputHandler()); 463 widget_->webwidget()->createInputHandler());
462 if (web_handler) 464 if (web_handler)
463 ret = WebKit::WebToCCInputHandlerAdapter::create(web_handler.Pass()); 465 ret = WebKit::WebToCCInputHandlerAdapter::create(web_handler.Pass());
464 return ret.Pass(); 466 return ret.Pass();
465 } 467 }
466 468
467 void RenderWidgetCompositor::willCommit() { 469 void RenderWidgetCompositor::willCommit() {
468 widget_->InstrumentWillComposite(); 470 widget_->InstrumentWillComposite();
469 } 471 }
470 472
471 void RenderWidgetCompositor::didCommit() { 473 void RenderWidgetCompositor::didCommit() {
(...skipping 19 matching lines...) Expand all
491 return RenderThreadImpl::current()->OffscreenContextProviderForMainThread(); 493 return RenderThreadImpl::current()->OffscreenContextProviderForMainThread();
492 } 494 }
493 495
494 scoped_refptr<cc::ContextProvider> 496 scoped_refptr<cc::ContextProvider>
495 RenderWidgetCompositor::OffscreenContextProviderForCompositorThread() { 497 RenderWidgetCompositor::OffscreenContextProviderForCompositorThread() {
496 return RenderThreadImpl::current()-> 498 return RenderThreadImpl::current()->
497 OffscreenContextProviderForCompositorThread(); 499 OffscreenContextProviderForCompositorThread();
498 } 500 }
499 501
500 } // namespace content 502 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/gpu/render_widget_compositor.h ('k') | content/renderer/render_view_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698