| 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 <limits> | 7 #include <limits> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 double hide_threshold; | 270 double hide_threshold; |
| 271 if (base::StringToDouble(top_threshold_str, &hide_threshold) && | 271 if (base::StringToDouble(top_threshold_str, &hide_threshold) && |
| 272 hide_threshold >= 0.f && hide_threshold <= 1.f) | 272 hide_threshold >= 0.f && hide_threshold <= 1.f) |
| 273 settings.top_controls_hide_threshold = hide_threshold; | 273 settings.top_controls_hide_threshold = hide_threshold; |
| 274 } | 274 } |
| 275 | 275 |
| 276 settings.use_pinch_virtual_viewport = | 276 settings.use_pinch_virtual_viewport = |
| 277 cmd->HasSwitch(cc::switches::kEnablePinchVirtualViewport); | 277 cmd->HasSwitch(cc::switches::kEnablePinchVirtualViewport); |
| 278 settings.allow_antialiasing &= | 278 settings.allow_antialiasing &= |
| 279 !cmd->HasSwitch(cc::switches::kDisableCompositedAntialiasing); | 279 !cmd->HasSwitch(cc::switches::kDisableCompositedAntialiasing); |
| 280 settings.single_thread_proxy_scheduler = | |
| 281 !cmd->HasSwitch(switches::kDisableSingleThreadProxyScheduler); | |
| 282 | 280 |
| 283 // These flags should be mirrored by UI versions in ui/compositor/. | 281 // These flags should be mirrored by UI versions in ui/compositor/. |
| 284 settings.initial_debug_state.show_debug_borders = | 282 settings.initial_debug_state.show_debug_borders = |
| 285 cmd->HasSwitch(cc::switches::kShowCompositedLayerBorders); | 283 cmd->HasSwitch(cc::switches::kShowCompositedLayerBorders); |
| 286 settings.initial_debug_state.show_fps_counter = | 284 settings.initial_debug_state.show_fps_counter = |
| 287 cmd->HasSwitch(cc::switches::kShowFPSCounter); | 285 cmd->HasSwitch(cc::switches::kShowFPSCounter); |
| 288 settings.initial_debug_state.show_layer_animation_bounds_rects = | 286 settings.initial_debug_state.show_layer_animation_bounds_rects = |
| 289 cmd->HasSwitch(cc::switches::kShowLayerAnimationBounds); | 287 cmd->HasSwitch(cc::switches::kShowLayerAnimationBounds); |
| 290 settings.initial_debug_state.show_paint_rects = | 288 settings.initial_debug_state.show_paint_rects = |
| 291 cmd->HasSwitch(switches::kShowPaintRects); | 289 cmd->HasSwitch(switches::kShowPaintRects); |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 404 #endif | 402 #endif |
| 405 | 403 |
| 406 compositor->Initialize(settings); | 404 compositor->Initialize(settings); |
| 407 | 405 |
| 408 return compositor.Pass(); | 406 return compositor.Pass(); |
| 409 } | 407 } |
| 410 | 408 |
| 411 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget, | 409 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget, |
| 412 bool threaded) | 410 bool threaded) |
| 413 : threaded_(threaded), | 411 : threaded_(threaded), |
| 412 suppress_schedule_composite_(false), |
| 414 widget_(widget) { | 413 widget_(widget) { |
| 415 } | 414 } |
| 416 | 415 |
| 417 RenderWidgetCompositor::~RenderWidgetCompositor() {} | 416 RenderWidgetCompositor::~RenderWidgetCompositor() {} |
| 418 | 417 |
| 419 const base::WeakPtr<cc::InputHandler>& | 418 const base::WeakPtr<cc::InputHandler>& |
| 420 RenderWidgetCompositor::GetInputHandler() { | 419 RenderWidgetCompositor::GetInputHandler() { |
| 421 return layer_tree_host_->GetInputHandler(); | 420 return layer_tree_host_->GetInputHandler(); |
| 422 } | 421 } |
| 423 | 422 |
| 423 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) { |
| 424 if (suppress_schedule_composite_ == suppress) |
| 425 return; |
| 426 |
| 427 if (suppress) |
| 428 TRACE_EVENT_ASYNC_BEGIN0("gpu", |
| 429 "RenderWidgetCompositor::SetSuppressScheduleComposite", this); |
| 430 else |
| 431 TRACE_EVENT_ASYNC_END0("gpu", |
| 432 "RenderWidgetCompositor::SetSuppressScheduleComposite", this); |
| 433 suppress_schedule_composite_ = suppress; |
| 434 } |
| 435 |
| 424 bool RenderWidgetCompositor::BeginMainFrameRequested() const { | 436 bool RenderWidgetCompositor::BeginMainFrameRequested() const { |
| 425 return layer_tree_host_->BeginMainFrameRequested(); | 437 return layer_tree_host_->BeginMainFrameRequested(); |
| 426 } | 438 } |
| 427 | 439 |
| 440 void RenderWidgetCompositor::UpdateAnimations(base::TimeTicks time) { |
| 441 layer_tree_host_->UpdateClientAnimations(time); |
| 442 } |
| 443 |
| 428 void RenderWidgetCompositor::SetNeedsDisplayOnAllLayers() { | 444 void RenderWidgetCompositor::SetNeedsDisplayOnAllLayers() { |
| 429 layer_tree_host_->SetNeedsDisplayOnAllLayers(); | 445 layer_tree_host_->SetNeedsDisplayOnAllLayers(); |
| 430 } | 446 } |
| 431 | 447 |
| 432 void RenderWidgetCompositor::SetRasterizeOnlyVisibleContent() { | 448 void RenderWidgetCompositor::SetRasterizeOnlyVisibleContent() { |
| 433 cc::LayerTreeDebugState current = layer_tree_host_->debug_state(); | 449 cc::LayerTreeDebugState current = layer_tree_host_->debug_state(); |
| 434 current.rasterize_only_visible_content = true; | 450 current.rasterize_only_visible_content = true; |
| 435 layer_tree_host_->SetDebugState(current); | 451 layer_tree_host_->SetDebugState(current); |
| 436 } | 452 } |
| 437 | 453 |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 526 this, | 542 this, |
| 527 this, | 543 this, |
| 528 shared_bitmap_manager, | 544 shared_bitmap_manager, |
| 529 settings, | 545 settings, |
| 530 base::MessageLoopProxy::current()); | 546 base::MessageLoopProxy::current()); |
| 531 } | 547 } |
| 532 DCHECK(layer_tree_host_); | 548 DCHECK(layer_tree_host_); |
| 533 } | 549 } |
| 534 | 550 |
| 535 void RenderWidgetCompositor::setSurfaceReady() { | 551 void RenderWidgetCompositor::setSurfaceReady() { |
| 536 // In tests without a RenderThreadImpl, don't set ready as this kicks | 552 layer_tree_host_->SetLayerTreeHostClientReady(); |
| 537 // off creating output surfaces that the test can't create. | |
| 538 if (RenderThreadImpl::current()) | |
| 539 layer_tree_host_->SetLayerTreeHostClientReady(); | |
| 540 } | 553 } |
| 541 | 554 |
| 542 void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) { | 555 void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) { |
| 543 layer_tree_host_->SetRootLayer( | 556 layer_tree_host_->SetRootLayer( |
| 544 static_cast<const WebLayerImpl*>(&layer)->layer()); | 557 static_cast<const WebLayerImpl*>(&layer)->layer()); |
| 545 } | 558 } |
| 546 | 559 |
| 547 void RenderWidgetCompositor::clearRootLayer() { | 560 void RenderWidgetCompositor::clearRootLayer() { |
| 548 layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>()); | 561 layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>()); |
| 549 } | 562 } |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 } | 695 } |
| 683 } | 696 } |
| 684 | 697 |
| 685 void RenderWidgetCompositor::compositeAndReadbackAsync( | 698 void RenderWidgetCompositor::compositeAndReadbackAsync( |
| 686 blink::WebCompositeAndReadbackAsyncCallback* callback) { | 699 blink::WebCompositeAndReadbackAsyncCallback* callback) { |
| 687 DCHECK(layer_tree_host_->root_layer()); | 700 DCHECK(layer_tree_host_->root_layer()); |
| 688 scoped_ptr<cc::CopyOutputRequest> request = | 701 scoped_ptr<cc::CopyOutputRequest> request = |
| 689 cc::CopyOutputRequest::CreateBitmapRequest( | 702 cc::CopyOutputRequest::CreateBitmapRequest( |
| 690 base::Bind(&CompositeAndReadbackAsyncCallback, callback)); | 703 base::Bind(&CompositeAndReadbackAsyncCallback, callback)); |
| 691 layer_tree_host_->root_layer()->RequestCopyOfOutput(request.Pass()); | 704 layer_tree_host_->root_layer()->RequestCopyOfOutput(request.Pass()); |
| 692 | 705 if (!threaded_) { |
| 693 if (!threaded_ && | 706 widget_->webwidget()->animate(0.0); |
| 694 !layer_tree_host_->settings().single_thread_proxy_scheduler) { | 707 widget_->webwidget()->layout(); |
| 695 layer_tree_host_->Composite(gfx::FrameTime::Now()); | 708 layer_tree_host_->Composite(gfx::FrameTime::Now()); |
| 696 } | 709 } |
| 697 } | 710 } |
| 698 | 711 |
| 699 void RenderWidgetCompositor::finishAllRendering() { | 712 void RenderWidgetCompositor::finishAllRendering() { |
| 700 layer_tree_host_->FinishAllRendering(); | 713 layer_tree_host_->FinishAllRendering(); |
| 701 } | 714 } |
| 702 | 715 |
| 703 void RenderWidgetCompositor::setDeferCommits(bool defer_commits) { | 716 void RenderWidgetCompositor::setDeferCommits(bool defer_commits) { |
| 704 layer_tree_host_->SetDeferCommits(defer_commits); | 717 layer_tree_host_->SetDeferCommits(defer_commits); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 780 void RenderWidgetCompositor::DidCommitAndDrawFrame() { | 793 void RenderWidgetCompositor::DidCommitAndDrawFrame() { |
| 781 widget_->didCommitAndDrawCompositorFrame(); | 794 widget_->didCommitAndDrawCompositorFrame(); |
| 782 } | 795 } |
| 783 | 796 |
| 784 void RenderWidgetCompositor::DidCompleteSwapBuffers() { | 797 void RenderWidgetCompositor::DidCompleteSwapBuffers() { |
| 785 widget_->didCompleteSwapBuffers(); | 798 widget_->didCompleteSwapBuffers(); |
| 786 if (!threaded_) | 799 if (!threaded_) |
| 787 widget_->OnSwapBuffersComplete(); | 800 widget_->OnSwapBuffersComplete(); |
| 788 } | 801 } |
| 789 | 802 |
| 803 void RenderWidgetCompositor::ScheduleComposite() { |
| 804 if (!suppress_schedule_composite_) |
| 805 widget_->scheduleComposite(); |
| 806 } |
| 807 |
| 790 void RenderWidgetCompositor::ScheduleAnimation() { | 808 void RenderWidgetCompositor::ScheduleAnimation() { |
| 791 widget_->scheduleAnimation(); | 809 widget_->scheduleAnimation(); |
| 792 } | 810 } |
| 793 | 811 |
| 794 void RenderWidgetCompositor::DidPostSwapBuffers() { | 812 void RenderWidgetCompositor::DidPostSwapBuffers() { |
| 795 widget_->OnSwapBuffersPosted(); | 813 widget_->OnSwapBuffersPosted(); |
| 796 } | 814 } |
| 797 | 815 |
| 798 void RenderWidgetCompositor::DidAbortSwapBuffers() { | 816 void RenderWidgetCompositor::DidAbortSwapBuffers() { |
| 799 widget_->OnSwapBuffersAborted(); | 817 widget_->OnSwapBuffersAborted(); |
| 800 } | 818 } |
| 801 | 819 |
| 802 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() { | 820 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() { |
| 803 cc::ContextProvider* provider = | 821 cc::ContextProvider* provider = |
| 804 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); | 822 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); |
| 805 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM(); | 823 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM(); |
| 806 } | 824 } |
| 807 | 825 |
| 808 } // namespace content | 826 } // namespace content |
| OLD | NEW |