| Index: cc/trees/layer_tree_host_impl.cc
|
| diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
|
| index 08e4ac16366b7a4e3b1de129cd5b81d1c7a994d1..d52fae4480f014409e4a5b5b258d955535c75289 100644
|
| --- a/cc/trees/layer_tree_host_impl.cc
|
| +++ b/cc/trees/layer_tree_host_impl.cc
|
| @@ -201,7 +201,8 @@ LayerTreeHostImpl::LayerTreeHostImpl(
|
| external_stencil_test_enabled_(false),
|
| animation_registrar_(AnimationRegistrar::Create()),
|
| rendering_stats_instrumentation_(rendering_stats_instrumentation),
|
| - need_to_update_visible_tiles_before_draw_(false) {
|
| + need_to_update_visible_tiles_before_draw_(false),
|
| + ui_resource_eviction_count_(0) {
|
| DCHECK(proxy_->IsImplThread());
|
| DidVisibilityChange(this, visible_);
|
|
|
| @@ -311,6 +312,12 @@ bool LayerTreeHostImpl::CanDraw() const {
|
| TRACE_EVENT_SCOPE_THREAD);
|
| return false;
|
| }
|
| + if (active_tree_->UIResourcesEvictedHaveNotBeenRecreated()) {
|
| + TRACE_EVENT_INSTANT0(
|
| + "cc", "LayerTreeHostImpl::CanDraw UI resources evicted not recreated",
|
| + TRACE_EVENT_SCOPE_THREAD);
|
| + return false;
|
| + }
|
| return true;
|
| }
|
|
|
| @@ -1558,6 +1565,9 @@ void LayerTreeHostImpl::SetVisible(bool visible) {
|
| DidVisibilityChange(this, visible_);
|
| EnforceManagedMemoryPolicy(ActualManagedMemoryPolicy());
|
|
|
| + if (!visible_)
|
| + DeleteAllUIResources();
|
| +
|
| // Evict tiles immediately if invisible since this tab may never get another
|
| // draw or timer tick.
|
| if (!visible_)
|
| @@ -2639,12 +2649,20 @@ void LayerTreeHostImpl::DeleteUIResource(UIResourceId uid) {
|
| }
|
|
|
| void LayerTreeHostImpl::DeleteAllUIResources() {
|
| + if (ui_resource_map_.empty())
|
| + return;
|
| +
|
| for (UIResourceMap::const_iterator iter = ui_resource_map_.begin();
|
| iter != ui_resource_map_.end();
|
| ++iter) {
|
| resource_provider_->DeleteResource(iter->second);
|
| }
|
| ui_resource_map_.clear();
|
| +
|
| + ui_resource_eviction_count_ += 1;
|
| + client_->SetNeedsCommitOnImplThread();
|
| + client_->OnCanDrawStateChanged(CanDraw());
|
| + client_->RenewTreePriority();
|
| }
|
|
|
| ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource(
|
|
|