| Index: cc/trees/single_thread_proxy.cc
|
| diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc
|
| index 8e7d46671e2a0f1cc7c9ae2dd40388959e6c8fc0..6e3aff1fd21fbe2bddd826fd22ab1b4f77e782b8 100644
|
| --- a/cc/trees/single_thread_proxy.cc
|
| +++ b/cc/trees/single_thread_proxy.cc
|
| @@ -60,6 +60,7 @@ bool SingleThreadProxy::CompositeAndReadback(void* pixels, gfx::Rect rect) {
|
| LayerTreeHostImpl::FrameData frame;
|
| if (!CommitAndComposite(base::TimeTicks::Now(),
|
| device_viewport_damage_rect,
|
| + true, // for_readback
|
| &frame))
|
| return false;
|
|
|
| @@ -337,6 +338,7 @@ void SingleThreadProxy::CompositeImmediately(base::TimeTicks frame_begin_time) {
|
| LayerTreeHostImpl::FrameData frame;
|
| if (CommitAndComposite(frame_begin_time,
|
| device_viewport_damage_rect,
|
| + false, // for_readback
|
| &frame)) {
|
| layer_tree_host_impl_->SwapBuffers(frame);
|
| DidSwapFrame();
|
| @@ -370,6 +372,7 @@ void SingleThreadProxy::ForceSerializeOnSwapBuffers() {
|
| bool SingleThreadProxy::CommitAndComposite(
|
| base::TimeTicks frame_begin_time,
|
| gfx::Rect device_viewport_damage_rect,
|
| + bool for_readback,
|
| LayerTreeHostImpl::FrameData* frame) {
|
| DCHECK(Proxy::IsMainThread());
|
|
|
| @@ -397,6 +400,7 @@ bool SingleThreadProxy::CommitAndComposite(
|
| bool result = DoComposite(offscreen_context_provider,
|
| frame_begin_time,
|
| device_viewport_damage_rect,
|
| + for_readback,
|
| frame);
|
| layer_tree_host_->DidBeginFrame();
|
| return result;
|
| @@ -412,6 +416,7 @@ bool SingleThreadProxy::DoComposite(
|
| scoped_refptr<cc::ContextProvider> offscreen_context_provider,
|
| base::TimeTicks frame_begin_time,
|
| gfx::Rect device_viewport_damage_rect,
|
| + bool for_readback,
|
| LayerTreeHostImpl::FrameData* frame) {
|
| DCHECK(!layer_tree_host_->output_surface_lost());
|
|
|
| @@ -423,11 +428,13 @@ bool SingleThreadProxy::DoComposite(
|
| layer_tree_host_impl_->resource_provider()->
|
| set_offscreen_context_provider(offscreen_context_provider);
|
|
|
| + bool can_do_readback = layer_tree_host_impl_->renderer()->CanReadPixels();
|
| +
|
| // We guard PrepareToDraw() with CanDraw() because it always returns a valid
|
| // frame, so can only be used when such a frame is possible. Since
|
| // DrawLayers() depends on the result of PrepareToDraw(), it is guarded on
|
| // CanDraw() as well.
|
| - if (!ShouldComposite()) {
|
| + if (!ShouldComposite() || (for_readback && !can_do_readback)) {
|
| layer_tree_host_impl_->UpdateBackgroundAnimateTicking(true);
|
| return false;
|
| }
|
|
|