diff options
author | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-12 01:43:06 +0000 |
---|---|---|
committer | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-12 01:44:17 +0000 |
commit | 174c6d466c98f31a8f1017241499a23038297f38 (patch) | |
tree | 9c37260847c0bee1b94a462038ff7dc065324593 /content/renderer/gpu | |
parent | f83ef232a24922c700fe63357ccddcb700a01c27 (diff) | |
download | chromium_src-174c6d466c98f31a8f1017241499a23038297f38.zip chromium_src-174c6d466c98f31a8f1017241499a23038297f38.tar.gz chromium_src-174c6d466c98f31a8f1017241499a23038297f38.tar.bz2 |
Make SingleThreadProxy a SchedulerClient
This makes ui::Compositor no longer in charge of
scheduling commits and draws, deferring it to cc::Scheduler.
Other compositors that use SingleThreadProxy are left calling composite
synchronously and now pass a flag to indicate that this is their
intention. This patch doesn't remove synchronous composite, but now
makes it mutually exclusive with scheduling.
BUG=329552, 287250
Review URL: https://codereview.chromium.org/134623005
Cr-Commit-Position: refs/heads/master@{#288866}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@288866 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer/gpu')
-rw-r--r-- | content/renderer/gpu/render_widget_compositor.cc | 36 | ||||
-rw-r--r-- | content/renderer/gpu/render_widget_compositor.h | 4 |
2 files changed, 9 insertions, 31 deletions
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc index 64e0982..baf1ac1 100644 --- a/content/renderer/gpu/render_widget_compositor.cc +++ b/content/renderer/gpu/render_widget_compositor.cc @@ -277,6 +277,8 @@ scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create( cmd->HasSwitch(cc::switches::kEnablePinchVirtualViewport); settings.allow_antialiasing &= !cmd->HasSwitch(cc::switches::kDisableCompositedAntialiasing); + settings.single_thread_proxy_scheduler = + !cmd->HasSwitch(switches::kDisableSingleThreadProxyScheduler); // These flags should be mirrored by UI versions in ui/compositor/. settings.initial_debug_state.show_debug_borders = @@ -409,7 +411,6 @@ scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create( RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget, bool threaded) : threaded_(threaded), - suppress_schedule_composite_(false), widget_(widget) { } @@ -420,27 +421,10 @@ RenderWidgetCompositor::GetInputHandler() { return layer_tree_host_->GetInputHandler(); } -void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) { - if (suppress_schedule_composite_ == suppress) - return; - - if (suppress) - TRACE_EVENT_ASYNC_BEGIN0("gpu", - "RenderWidgetCompositor::SetSuppressScheduleComposite", this); - else - TRACE_EVENT_ASYNC_END0("gpu", - "RenderWidgetCompositor::SetSuppressScheduleComposite", this); - suppress_schedule_composite_ = suppress; -} - bool RenderWidgetCompositor::BeginMainFrameRequested() const { return layer_tree_host_->BeginMainFrameRequested(); } -void RenderWidgetCompositor::UpdateAnimations(base::TimeTicks time) { - layer_tree_host_->UpdateClientAnimations(time); -} - void RenderWidgetCompositor::SetNeedsDisplayOnAllLayers() { layer_tree_host_->SetNeedsDisplayOnAllLayers(); } @@ -549,7 +533,10 @@ void RenderWidgetCompositor::Initialize(cc::LayerTreeSettings settings) { } void RenderWidgetCompositor::setSurfaceReady() { - layer_tree_host_->SetLayerTreeHostClientReady(); + // In tests without a RenderThreadImpl, don't set ready as this kicks + // off creating output surfaces that the test can't create. + if (RenderThreadImpl::current()) + layer_tree_host_->SetLayerTreeHostClientReady(); } void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) { @@ -702,9 +689,9 @@ void RenderWidgetCompositor::compositeAndReadbackAsync( cc::CopyOutputRequest::CreateBitmapRequest( base::Bind(&CompositeAndReadbackAsyncCallback, callback)); layer_tree_host_->root_layer()->RequestCopyOfOutput(request.Pass()); - if (!threaded_) { - widget_->webwidget()->animate(0.0); - widget_->webwidget()->layout(); + + if (!threaded_ && + !layer_tree_host_->settings().single_thread_proxy_scheduler) { layer_tree_host_->Composite(gfx::FrameTime::Now()); } } @@ -800,11 +787,6 @@ void RenderWidgetCompositor::DidCompleteSwapBuffers() { widget_->OnSwapBuffersComplete(); } -void RenderWidgetCompositor::ScheduleComposite() { - if (!suppress_schedule_composite_) - widget_->scheduleComposite(); -} - void RenderWidgetCompositor::ScheduleAnimation() { widget_->scheduleAnimation(); } diff --git a/content/renderer/gpu/render_widget_compositor.h b/content/renderer/gpu/render_widget_compositor.h index e0541ec..79a03b4 100644 --- a/content/renderer/gpu/render_widget_compositor.h +++ b/content/renderer/gpu/render_widget_compositor.h @@ -44,9 +44,7 @@ class RenderWidgetCompositor : public blink::WebLayerTreeView, virtual ~RenderWidgetCompositor(); const base::WeakPtr<cc::InputHandler>& GetInputHandler(); - void SetSuppressScheduleComposite(bool suppress); bool BeginMainFrameRequested() const; - void UpdateAnimations(base::TimeTicks time); void SetNeedsDisplayOnAllLayers(); void SetRasterizeOnlyVisibleContent(); void UpdateTopControlsState(cc::TopControlsState constraints, @@ -143,7 +141,6 @@ class RenderWidgetCompositor : public blink::WebLayerTreeView, virtual void RateLimitSharedMainThreadContext() OVERRIDE; // cc::LayerTreeHostSingleThreadClient implementation. - virtual void ScheduleComposite() OVERRIDE; virtual void ScheduleAnimation() OVERRIDE; virtual void DidPostSwapBuffers() OVERRIDE; virtual void DidAbortSwapBuffers() OVERRIDE; @@ -154,7 +151,6 @@ class RenderWidgetCompositor : public blink::WebLayerTreeView, void Initialize(cc::LayerTreeSettings settings); bool threaded_; - bool suppress_schedule_composite_; RenderWidget* widget_; scoped_ptr<cc::LayerTreeHost> layer_tree_host_; }; |