| Index: content/browser/renderer_host/compositor_impl_android.cc
|
| diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc
|
| index 0c1830ddb4443d0f406b0b853cfd7f39064e45c3..bc9028a6bbc7b25838370f3dbdc5f75757075abd 100644
|
| --- a/content/browser/renderer_host/compositor_impl_android.cc
|
| +++ b/content/browser/renderer_host/compositor_impl_android.cc
|
| @@ -404,6 +404,9 @@ CompositorImpl::CompositorImpl(CompositorClient* client,
|
| DCHECK(root_window);
|
| DCHECK(root_window->GetLayer() == nullptr);
|
| root_window->SetLayer(cc::Layer::Create());
|
| + readback_layer_tree_ = cc::Layer::Create();
|
| + readback_layer_tree_->SetHideLayerAndSubtree(true);
|
| + root_window->GetLayer()->AddChild(readback_layer_tree_);
|
| root_window->AttachCompositor(this);
|
| CreateLayerTreeHost();
|
| resource_manager_.Init(host_.get());
|
| @@ -514,6 +517,13 @@ void CompositorImpl::SetVisible(bool visible) {
|
| TRACE_EVENT1("cc", "CompositorImpl::SetVisible", "visible", visible);
|
| if (!visible) {
|
| DCHECK(host_->visible());
|
| +
|
| + // Make a best effort to try to complete pending readbacks.
|
| + // TODO(crbug.com/637035): Consider doing this in a better way,
|
| + // ideally with the guarantee of readbacks completing.
|
| + if (display_.get() && HavePendingReadbacks())
|
| + display_->ForceImmediateDrawAndSwapIfPossible();
|
| +
|
| host_->SetVisible(false);
|
| if (!host_->output_surface_lost())
|
| host_->ReleaseOutputSurface();
|
| @@ -751,7 +761,7 @@ void CompositorImpl::DidCommit() {
|
| }
|
|
|
| void CompositorImpl::AttachLayerForReadback(scoped_refptr<cc::Layer> layer) {
|
| - root_window_->GetLayer()->AddChild(layer);
|
| + readback_layer_tree_->AddChild(layer);
|
| }
|
|
|
| void CompositorImpl::RequestCopyOfOutputOnRootLayer(
|
| @@ -785,4 +795,8 @@ void CompositorImpl::SetNeedsAnimate() {
|
| host_->SetNeedsAnimate();
|
| }
|
|
|
| +bool CompositorImpl::HavePendingReadbacks() {
|
| + return !readback_layer_tree_->children().empty();
|
| +}
|
| +
|
| } // namespace content
|
|
|