From 174c6d466c98f31a8f1017241499a23038297f38 Mon Sep 17 00:00:00 2001 From: "enne@chromium.org" Date: Tue, 12 Aug 2014 01:43:06 +0000 Subject: 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 --- content/renderer/gpu/render_widget_compositor.cc | 36 ++++++------------------ content/renderer/gpu/render_widget_compositor.h | 4 --- 2 files changed, 9 insertions(+), 31 deletions(-) (limited to 'content/renderer/gpu') 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::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::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& 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 layer_tree_host_; }; -- cgit v1.1