| Index: content/renderer/gpu/render_widget_compositor.cc | 
| diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc | 
| index 64e0982bc250d659c9c6f6b84fc762c4ef452a94..baf1ac13f675e9954fa11e1fbae7c52262119241 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(); | 
| } | 
|  |