Commit 5f4dc4f8 authored by ccameron@chromium.org's avatar ccameron@chromium.org

[cc] Consolidate UI resource destruction and recreation

This is in a lead-up to destroying UI resources when visibility is lost.

BUG=279438

Review URL: https://chromiumcodereview.appspot.com/23475021

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@221428 0039d316-1c4b-4281-b951-d872f2087c98
parent 370d7cb8
......@@ -444,7 +444,8 @@ void LayerTreeHost::DidLoseOutputSurface() {
if (output_surface_lost_)
return;
DidLoseUIResources();
bool resource_lost = true;
RecreateUIResources(resource_lost);
num_failed_recreate_attempts_ = 0;
output_surface_lost_ = true;
......@@ -1174,26 +1175,17 @@ void LayerTreeHost::DeleteUIResource(UIResourceId uid) {
ui_resource_client_map_.erase(uid);
}
void LayerTreeHost::UIResourceLost(UIResourceId uid) {
UIResourceClientMap::iterator iter = ui_resource_client_map_.find(uid);
if (iter == ui_resource_client_map_.end())
return;
UIResourceRequest request;
bool resource_lost = true;
request.type = UIResourceRequest::UIResourceCreate;
request.id = uid;
request.bitmap = iter->second->GetBitmap(uid, resource_lost);
DCHECK(request.bitmap.get());
ui_resource_request_queue_.push_back(request);
}
void LayerTreeHost::DidLoseUIResources() {
// When output surface is lost, we need to recreate the resource.
void LayerTreeHost::RecreateUIResources(bool resource_lost) {
for (UIResourceClientMap::iterator iter = ui_resource_client_map_.begin();
iter != ui_resource_client_map_.end();
++iter) {
UIResourceLost(iter->first);
UIResourceId uid = iter->first;
UIResourceRequest request;
request.type = UIResourceRequest::UIResourceCreate;
request.id = uid;
request.bitmap = iter->second->GetBitmap(uid, resource_lost);
DCHECK(request.bitmap.get());
ui_resource_request_queue_.push_back(request);
}
}
......
......@@ -323,9 +323,7 @@ class CC_EXPORT LayerTreeHost : NON_EXPORTED_BASE(public RateLimiterClient) {
bool AnimateLayersRecursive(Layer* current, base::TimeTicks time);
void UIResourceLost(UIResourceId id);
void DidLoseUIResources();
void RecreateUIResources(bool resource_lost);
typedef base::hash_map<UIResourceId, UIResourceClient*> UIResourceClientMap;
UIResourceClientMap ui_resource_client_map_;
......
......@@ -1598,8 +1598,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();
DeleteAllUIResources();
}
void LayerTreeHostImpl::CreateAndSetRenderer(
......@@ -2628,6 +2627,15 @@ void LayerTreeHostImpl::DeleteUIResource(UIResourceId uid) {
}
}
void LayerTreeHostImpl::DeleteAllUIResources() {
for (UIResourceMap::const_iterator iter = ui_resource_map_.begin();
iter != ui_resource_map_.end();
++iter) {
resource_provider_->DeleteResource(iter->second);
}
ui_resource_map_.clear();
}
ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource(
UIResourceId uid) const {
UIResourceMap::const_iterator iter = ui_resource_map_.find(uid);
......
......@@ -409,6 +409,7 @@ class CC_EXPORT LayerTreeHostImpl
scoped_refptr<UIResourceBitmap> bitmap);
// Deletes a UI resource. May safely be called more than once.
void DeleteUIResource(UIResourceId uid);
void DeleteAllUIResources();
ResourceProvider::ResourceId ResourceIdForUIResource(UIResourceId uid) const;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment