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 <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 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 403 #endif | 403 #endif |
| 404 | 404 |
| 405 compositor->Initialize(settings); | 405 compositor->Initialize(settings); |
| 406 | 406 |
| 407 return compositor.Pass(); | 407 return compositor.Pass(); |
| 408 } | 408 } |
| 409 | 409 |
| 410 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget, | 410 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget, |
| 411 bool threaded) | 411 bool threaded) |
| 412 : threaded_(threaded), | 412 : threaded_(threaded), |
| 413 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 |
| 424 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) { | 423 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) { |
|
enne (OOO)
2014/07/10 20:37:42
This no longer makes any sense in an FCM world, an
jamesr
2014/07/10 21:55:40
Which part doesn't make sense? Suppressing compos
danakj
2014/07/10 21:57:14
This is done by SetDeferCommits in WebViewImpl now
enne (OOO)
2014/07/10 22:03:49
SetSuppressScheduleComposite != SetDeferCommits.
| |
| 425 if (suppress_schedule_composite_ == suppress) | 424 layer_tree_host_->SetDeferCommits(suppress); |
| 426 return; | |
| 427 | |
| 428 if (suppress) | |
| 429 TRACE_EVENT_ASYNC_BEGIN0("gpu", | |
| 430 "RenderWidgetCompositor::SetSuppressScheduleComposite", this); | |
| 431 else | |
| 432 TRACE_EVENT_ASYNC_END0("gpu", | |
| 433 "RenderWidgetCompositor::SetSuppressScheduleComposite", this); | |
| 434 suppress_schedule_composite_ = suppress; | |
| 435 } | 425 } |
| 436 | 426 |
| 437 bool RenderWidgetCompositor::BeginMainFrameRequested() const { | 427 bool RenderWidgetCompositor::BeginMainFrameRequested() const { |
| 438 return layer_tree_host_->BeginMainFrameRequested(); | 428 return layer_tree_host_->BeginMainFrameRequested(); |
| 439 } | 429 } |
| 440 | 430 |
| 441 void RenderWidgetCompositor::UpdateAnimations(base::TimeTicks time) { | |
| 442 layer_tree_host_->UpdateClientAnimations(time); | |
| 443 } | |
| 444 | |
| 445 void RenderWidgetCompositor::SetNeedsDisplayOnAllLayers() { | 431 void RenderWidgetCompositor::SetNeedsDisplayOnAllLayers() { |
| 446 layer_tree_host_->SetNeedsDisplayOnAllLayers(); | 432 layer_tree_host_->SetNeedsDisplayOnAllLayers(); |
| 447 } | 433 } |
| 448 | 434 |
| 449 void RenderWidgetCompositor::SetRasterizeOnlyVisibleContent() { | 435 void RenderWidgetCompositor::SetRasterizeOnlyVisibleContent() { |
| 450 cc::LayerTreeDebugState current = layer_tree_host_->debug_state(); | 436 cc::LayerTreeDebugState current = layer_tree_host_->debug_state(); |
| 451 current.rasterize_only_visible_content = true; | 437 current.rasterize_only_visible_content = true; |
| 452 layer_tree_host_->SetDebugState(current); | 438 layer_tree_host_->SetDebugState(current); |
| 453 } | 439 } |
| 454 | 440 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 527 layer_tree_host_ = cc::LayerTreeHost::CreateThreaded( | 513 layer_tree_host_ = cc::LayerTreeHost::CreateThreaded( |
| 528 this, shared_bitmap_manager, settings, compositor_message_loop_proxy); | 514 this, shared_bitmap_manager, settings, compositor_message_loop_proxy); |
| 529 } else { | 515 } else { |
| 530 layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded( | 516 layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded( |
| 531 this, this, shared_bitmap_manager, settings); | 517 this, this, shared_bitmap_manager, settings); |
| 532 } | 518 } |
| 533 DCHECK(layer_tree_host_); | 519 DCHECK(layer_tree_host_); |
| 534 } | 520 } |
| 535 | 521 |
| 536 void RenderWidgetCompositor::setSurfaceReady() { | 522 void RenderWidgetCompositor::setSurfaceReady() { |
| 537 layer_tree_host_->SetLayerTreeHostClientReady(); | 523 // In tests without a RenderThreadImpl, don't set ready as this kicks |
| 524 // off creating output surfaces that the test can't create. | |
| 525 if (RenderThreadImpl::current()) | |
| 526 layer_tree_host_->SetLayerTreeHostClientReady(); | |
| 538 } | 527 } |
| 539 | 528 |
| 540 void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) { | 529 void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) { |
| 541 layer_tree_host_->SetRootLayer( | 530 layer_tree_host_->SetRootLayer( |
| 542 static_cast<const WebLayerImpl*>(&layer)->layer()); | 531 static_cast<const WebLayerImpl*>(&layer)->layer()); |
| 543 } | 532 } |
| 544 | 533 |
| 545 void RenderWidgetCompositor::clearRootLayer() { | 534 void RenderWidgetCompositor::clearRootLayer() { |
| 546 layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>()); | 535 layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>()); |
| 547 } | 536 } |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 680 } | 669 } |
| 681 } | 670 } |
| 682 | 671 |
| 683 void RenderWidgetCompositor::compositeAndReadbackAsync( | 672 void RenderWidgetCompositor::compositeAndReadbackAsync( |
| 684 blink::WebCompositeAndReadbackAsyncCallback* callback) { | 673 blink::WebCompositeAndReadbackAsyncCallback* callback) { |
| 685 DCHECK(layer_tree_host_->root_layer()); | 674 DCHECK(layer_tree_host_->root_layer()); |
| 686 scoped_ptr<cc::CopyOutputRequest> request = | 675 scoped_ptr<cc::CopyOutputRequest> request = |
| 687 cc::CopyOutputRequest::CreateBitmapRequest( | 676 cc::CopyOutputRequest::CreateBitmapRequest( |
| 688 base::Bind(&CompositeAndReadbackAsyncCallback, callback)); | 677 base::Bind(&CompositeAndReadbackAsyncCallback, callback)); |
| 689 layer_tree_host_->root_layer()->RequestCopyOfOutput(request.Pass()); | 678 layer_tree_host_->root_layer()->RequestCopyOfOutput(request.Pass()); |
| 690 if (!threaded_) { | 679 |
| 691 widget_->webwidget()->animate(0.0); | 680 // Synchronous non-scheduled compositors need an immediate composite |
| 692 widget_->webwidget()->layout(); | 681 // so that the readback comes back. |
| 682 if (!layer_tree_host_->settings().single_thread_proxy_scheduler) | |
| 693 layer_tree_host_->Composite(gfx::FrameTime::Now()); | 683 layer_tree_host_->Composite(gfx::FrameTime::Now()); |
| 694 } | |
| 695 } | 684 } |
| 696 | 685 |
| 697 void RenderWidgetCompositor::finishAllRendering() { | 686 void RenderWidgetCompositor::finishAllRendering() { |
| 698 layer_tree_host_->FinishAllRendering(); | 687 layer_tree_host_->FinishAllRendering(); |
| 699 } | 688 } |
| 700 | 689 |
| 701 void RenderWidgetCompositor::setDeferCommits(bool defer_commits) { | 690 void RenderWidgetCompositor::setDeferCommits(bool defer_commits) { |
| 702 layer_tree_host_->SetDeferCommits(defer_commits); | 691 layer_tree_host_->SetDeferCommits(defer_commits); |
| 703 } | 692 } |
| 704 | 693 |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 778 void RenderWidgetCompositor::DidCommitAndDrawFrame() { | 767 void RenderWidgetCompositor::DidCommitAndDrawFrame() { |
| 779 widget_->didCommitAndDrawCompositorFrame(); | 768 widget_->didCommitAndDrawCompositorFrame(); |
| 780 } | 769 } |
| 781 | 770 |
| 782 void RenderWidgetCompositor::DidCompleteSwapBuffers() { | 771 void RenderWidgetCompositor::DidCompleteSwapBuffers() { |
| 783 widget_->didCompleteSwapBuffers(); | 772 widget_->didCompleteSwapBuffers(); |
| 784 if (!threaded_) | 773 if (!threaded_) |
| 785 widget_->OnSwapBuffersComplete(); | 774 widget_->OnSwapBuffersComplete(); |
| 786 } | 775 } |
| 787 | 776 |
| 788 void RenderWidgetCompositor::ScheduleComposite() { | |
| 789 if (!suppress_schedule_composite_) | |
| 790 widget_->scheduleComposite(); | |
| 791 } | |
| 792 | |
| 793 void RenderWidgetCompositor::ScheduleAnimation() { | 777 void RenderWidgetCompositor::ScheduleAnimation() { |
| 794 widget_->scheduleAnimation(); | 778 widget_->scheduleAnimation(); |
| 795 } | 779 } |
| 796 | 780 |
| 797 void RenderWidgetCompositor::DidPostSwapBuffers() { | 781 void RenderWidgetCompositor::DidPostSwapBuffers() { |
| 798 widget_->OnSwapBuffersPosted(); | 782 widget_->OnSwapBuffersPosted(); |
| 799 } | 783 } |
| 800 | 784 |
| 801 void RenderWidgetCompositor::DidAbortSwapBuffers() { | 785 void RenderWidgetCompositor::DidAbortSwapBuffers() { |
| 802 widget_->OnSwapBuffersAborted(); | 786 widget_->OnSwapBuffersAborted(); |
| 803 } | 787 } |
| 804 | 788 |
| 805 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() { | 789 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() { |
| 806 cc::ContextProvider* provider = | 790 cc::ContextProvider* provider = |
| 807 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); | 791 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); |
| 808 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM(); | 792 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM(); |
| 809 } | 793 } |
| 810 | 794 |
| 811 } // namespace content | 795 } // namespace content |
| OLD | NEW |