| Index: cc/trees/layer_tree_host.cc
|
| diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
|
| index 27659e054bea869e8bcc1940036e2f5d82fead9b..23e092975c0b24af439756f56b3c7134d05b4484 100644
|
| --- a/cc/trees/layer_tree_host.cc
|
| +++ b/cc/trees/layer_tree_host.cc
|
| @@ -61,7 +61,7 @@ RendererCapabilities::RendererCapabilities()
|
| RendererCapabilities::~RendererCapabilities() {}
|
|
|
| UIResourceRequest::UIResourceRequest()
|
| - : type(UIResourceInvalidRequest), id(0), bitmap(NULL) {}
|
| + : type(UIResourceInvalidRequest), id(0) {}
|
|
|
| UIResourceRequest::~UIResourceRequest() {}
|
|
|
| @@ -1123,53 +1123,70 @@ void LayerTreeHost::AnimateLayers(base::TimeTicks time) {
|
| UIResourceId LayerTreeHost::CreateUIResource(UIResourceClient* client) {
|
| DCHECK(client);
|
|
|
| - UIResourceRequest request;
|
| - bool resource_lost = false;
|
| - request.type = UIResourceRequest::UIResourceCreate;
|
| - request.id = next_ui_resource_id_++;
|
| + UIResourceId next_id = next_ui_resource_id_++;
|
|
|
| - DCHECK(ui_resource_client_map_.find(request.id) ==
|
| + DCHECK(ui_resource_client_map_.find(next_id) ==
|
| ui_resource_client_map_.end());
|
|
|
| - request.bitmap = client->GetBitmap(request.id, resource_lost);
|
| + bool resource_lost = false;
|
| + UIResourceRequest request;
|
| + request.type = UIResourceRequest::UIResourceCreate;
|
| + request.id = next_id;
|
| + request.bitmap = client->GetBitmap(next_id, resource_lost);
|
| ui_resource_request_queue_.push_back(request);
|
| - ui_resource_client_map_[request.id] = client;
|
| +
|
| + UIResourceClientData data;
|
| + data.client = client;
|
| + data.size = request.bitmap.GetSize();
|
| +
|
| + ui_resource_client_map_[request.id] = data;
|
| return request.id;
|
| }
|
|
|
| // Deletes a UI resource. May safely be called more than once.
|
| void LayerTreeHost::DeleteUIResource(UIResourceId uid) {
|
| - UIResourceClientMap::iterator iter = ui_resource_client_map_.find(uid);
|
| - if (iter == ui_resource_client_map_.end())
|
| + UIResourceClientMap::iterator it = ui_resource_client_map_.find(uid);
|
| + if (it == ui_resource_client_map_.end())
|
| return;
|
|
|
| UIResourceRequest request;
|
| request.type = UIResourceRequest::UIResourceDelete;
|
| request.id = uid;
|
| ui_resource_request_queue_.push_back(request);
|
| - ui_resource_client_map_.erase(uid);
|
| + ui_resource_client_map_.erase(it);
|
| +}
|
| +
|
| +// Returns the size of a resource given its id.
|
| +gfx::Size LayerTreeHost::GetUIResourceSize(UIResourceId uid) const {
|
| + UIResourceClientMap::const_iterator it = ui_resource_client_map_.find(uid);
|
| + if (it == ui_resource_client_map_.end())
|
| + return gfx::Size();
|
| +
|
| + const UIResourceClientData& data = it->second;
|
| + return data.size;
|
| }
|
|
|
| void LayerTreeHost::UIResourceLost(UIResourceId uid) {
|
| - UIResourceClientMap::iterator iter = ui_resource_client_map_.find(uid);
|
| - if (iter == ui_resource_client_map_.end())
|
| + UIResourceClientMap::iterator it = ui_resource_client_map_.find(uid);
|
| + if (it == ui_resource_client_map_.end())
|
| return;
|
|
|
| - UIResourceRequest request;
|
| + UIResourceClientData data = it->second;
|
| bool resource_lost = true;
|
| + UIResourceRequest request;
|
| request.type = UIResourceRequest::UIResourceCreate;
|
| request.id = uid;
|
| - request.bitmap = iter->second->GetBitmap(uid, resource_lost);
|
| - DCHECK(request.bitmap.get());
|
| + request.bitmap = data.client->GetBitmap(uid, resource_lost);
|
| +
|
| ui_resource_request_queue_.push_back(request);
|
| }
|
|
|
| void LayerTreeHost::DidLoseUIResources() {
|
| // When output surface is lost, we need to recreate the resource.
|
| - for (UIResourceClientMap::iterator iter = ui_resource_client_map_.begin();
|
| - iter != ui_resource_client_map_.end();
|
| - ++iter) {
|
| - UIResourceLost(iter->first);
|
| + for (UIResourceClientMap::iterator it = ui_resource_client_map_.begin();
|
| + it != ui_resource_client_map_.end();
|
| + ++it) {
|
| + UIResourceLost(it->first);
|
| }
|
| }
|
|
|
|
|