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

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: just diff relative to https://codereview.chromium.org/12377029/ 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> comp(
piman 2013/03/01 01:51:40 nit: s/comp/compositor/ while you're here?
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 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 (!comp->initialize(settings))
210 return scoped_ptr<RenderWidgetCompositor>(); 208 return scoped_ptr<RenderWidgetCompositor>();
211 209
212 return comp.Pass(); 210 return comp.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",
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 if (threaded_) 324 if (threaded_)
329 layer_tree_host_->setNeedsAnimate(); 325 layer_tree_host_->setNeedsAnimate();
330 else 326 else
331 widget_->scheduleAnimation(); 327 widget_->scheduleAnimation();
332 } 328 }
333 329
334 bool RenderWidgetCompositor::commitRequested() const { 330 bool RenderWidgetCompositor::commitRequested() const {
335 return layer_tree_host_->commitRequested(); 331 return layer_tree_host_->commitRequested();
336 } 332 }
337 333
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() { 334 void RenderWidgetCompositor::didStopFlinging() {
350 layer_tree_host_->didStopFlinging(); 335 layer_tree_host_->didStopFlinging();
351 } 336 }
352 337
353 bool RenderWidgetCompositor::compositeAndReadback(void *pixels, 338 bool RenderWidgetCompositor::compositeAndReadback(void *pixels,
354 const WebRect& rect) { 339 const WebRect& rect) {
355 return layer_tree_host_->compositeAndReadback(pixels, rect); 340 return layer_tree_host_->compositeAndReadback(pixels, rect);
356 } 341 }
357 342
358 void RenderWidgetCompositor::finishAllRendering() { 343 void RenderWidgetCompositor::finishAllRendering() {
(...skipping 30 matching lines...) Expand all
389 374
390 void RenderWidgetCompositor::willBeginFrame() { 375 void RenderWidgetCompositor::willBeginFrame() {
391 widget_->InstrumentWillBeginFrame(); 376 widget_->InstrumentWillBeginFrame();
392 widget_->willBeginCompositorFrame(); 377 widget_->willBeginCompositorFrame();
393 } 378 }
394 379
395 void RenderWidgetCompositor::didBeginFrame() { 380 void RenderWidgetCompositor::didBeginFrame() {
396 widget_->InstrumentDidBeginFrame(); 381 widget_->InstrumentDidBeginFrame();
397 } 382 }
398 383
399 // TODO(jamesr): This should go through WebWidget
400 void RenderWidgetCompositor::animate(double monotonic_frame_begin_time) { 384 void RenderWidgetCompositor::animate(double monotonic_frame_begin_time) {
401 client_->updateAnimations(monotonic_frame_begin_time); 385 widget_->webwidget()->animate(monotonic_frame_begin_time);
402 } 386 }
403 387
404 // Can delete from WebLayerTreeViewClient
405 void RenderWidgetCompositor::layout() {
406 widget_->webwidget()->layout();
407 }
408
409 // TODO(jamesr): This should go through WebWidget
410 void RenderWidgetCompositor::applyScrollAndScale(gfx::Vector2d scroll_delta, 388 void RenderWidgetCompositor::applyScrollAndScale(gfx::Vector2d scroll_delta,
411 float page_scale) { 389 float page_scale) {
412 client_->applyScrollAndScale(scroll_delta, page_scale); 390 widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale);
413 } 391 }
414 392
415 scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::createOutputSurface() { 393 scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::createOutputSurface() {
416 return widget_->CreateOutputSurface(); 394 return widget_->CreateOutputSurface();
417 } 395 }
418 396
419 // TODO(jamesr): This should go through WebWidget
420 void RenderWidgetCompositor::didRecreateOutputSurface(bool success) { 397 void RenderWidgetCompositor::didRecreateOutputSurface(bool success) {
421 client_->didRecreateOutputSurface(success); 398 if (!success)
399 widget_->webwidget()->didExitCompositingMode();
422 } 400 }
423 401
424 // TODO(jamesr): This should go through WebWidget
425 scoped_ptr<cc::InputHandler> RenderWidgetCompositor::createInputHandler() { 402 scoped_ptr<cc::InputHandler> RenderWidgetCompositor::createInputHandler() {
426 scoped_ptr<cc::InputHandler> ret; 403 scoped_ptr<cc::InputHandler> ret;
427 scoped_ptr<WebKit::WebInputHandler> web_handler( 404 scoped_ptr<WebKit::WebInputHandler> web_handler(
428 client_->createInputHandler()); 405 widget_->webwidget()->createInputHandler());
429 if (web_handler) 406 if (web_handler)
430 ret = WebKit::WebToCCInputHandlerAdapter::create(web_handler.Pass()); 407 ret = WebKit::WebToCCInputHandlerAdapter::create(web_handler.Pass());
431 return ret.Pass(); 408 return ret.Pass();
432 } 409 }
433 410
434 void RenderWidgetCompositor::willCommit() { 411 void RenderWidgetCompositor::willCommit() {
435 widget_->InstrumentWillComposite(); 412 widget_->InstrumentWillComposite();
436 } 413 }
437 414
438 void RenderWidgetCompositor::didCommit() { 415 void RenderWidgetCompositor::didCommit() {
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 502
526 scoped_refptr<cc::ContextProvider> 503 scoped_refptr<cc::ContextProvider>
527 RenderWidgetCompositor::OffscreenContextProviderForCompositorThread() { 504 RenderWidgetCompositor::OffscreenContextProviderForCompositorThread() {
528 if (!contexts_compositor_thread_ || 505 if (!contexts_compositor_thread_ ||
529 contexts_compositor_thread_->DestroyedOnMainThread()) 506 contexts_compositor_thread_->DestroyedOnMainThread())
530 contexts_compositor_thread_ = new CompositorThreadContextProvider; 507 contexts_compositor_thread_ = new CompositorThreadContextProvider;
531 return contexts_compositor_thread_; 508 return contexts_compositor_thread_;
532 } 509 }
533 510
534 } // namespace content 511 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698