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 |