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