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 1131050dc695a131dfee529af78852843b05ae7e..cc72e84bb27ec308b0c20c70da47b62ee285d90e 100644 |
--- a/cc/trees/layer_tree_host_impl.cc |
+++ b/cc/trees/layer_tree_host_impl.cc |
@@ -1536,11 +1536,15 @@ void LayerTreeHostImpl::SetVisible(bool visible) { |
DidVisibilityChange(this, visible_); |
EnforceManagedMemoryPolicy(ActualManagedMemoryPolicy()); |
- // Evict tiles immediately if invisible since this tab may never get another |
- // draw or timer tick. |
- if (!visible_) |
+ if (!visible_) { |
+ // Evict tiles immediately if invisible since this tab may never get another |
+ // draw or timer tick. |
ManageTiles(); |
+ // Evict UI resources |
+ ReleaseUIResources(); |
+ } |
+ |
if (!renderer_) |
return; |
@@ -1576,8 +1580,7 @@ void LayerTreeHostImpl::ReleaseTreeResources() { |
if (recycle_tree_ && recycle_tree_->root_layer()) |
SendReleaseResourcesRecursive(recycle_tree_->root_layer()); |
- // Remove all existing maps from UIResourceId to ResourceId. |
- ui_resource_map_.clear(); |
+ ReleaseUIResources(); |
} |
void LayerTreeHostImpl::CreateAndSetRenderer( |
@@ -2548,4 +2551,13 @@ ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource( |
return 0; |
} |
+void LayerTreeHostImpl::ReleaseUIResources() { |
+ for (UIResourceMap::const_iterator iter = ui_resource_map_.begin(); |
+ iter != ui_resource_map_.end(); |
+ ++iter) { |
+ resource_provider_->DeleteResource(iter->second); |
+ } |
+ ui_resource_map_.clear(); |
+} |
+ |
} // namespace cc |