Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |