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