Chromium Code Reviews| Index: cc/trees/layer_tree_host.cc |
| =================================================================== |
| --- cc/trees/layer_tree_host.cc (revision 210393) |
| +++ cc/trees/layer_tree_host.cc (working copy) |
| @@ -73,7 +73,8 @@ |
| LayerTreeHost::LayerTreeHost(LayerTreeHostClient* client, |
| const LayerTreeSettings& settings) |
| - : animating_(false), |
| + : ui_resource_id_(1), |
| + animating_(false), |
| needs_full_tree_sync_(true), |
| needs_filter_context_(false), |
| client_(client), |
| @@ -248,7 +249,6 @@ |
| // after the commit, but on the main thread. |
| void LayerTreeHost::FinishCommitOnImplThread(LayerTreeHostImpl* host_impl) { |
| DCHECK(proxy_->IsImplThread()); |
| - |
| // If there are linked evicted backings, these backings' resources may be put |
| // into the impl tree, so we can't draw yet. Determine this before clearing |
| // all evicted backings. |
| @@ -349,6 +349,26 @@ |
| pending_page_scale_animation_.reset(); |
| } |
| + if (!ui_resource_request_queue_.empty()) { |
| + if (settings_.impl_side_painting) { |
| + host_impl->set_ui_resource_request_queue(ui_resource_request_queue_); |
| + ui_resource_request_queue_.clear(); |
| + } else { |
| + while (ui_resource_request_queue_.size() > 0) { |
|
enne (OOO)
2013/07/22 23:09:15
Can you share this commit-time queue-processing fu
powei
2013/07/24 02:28:29
Done.
|
| + UIResourceRequest req = ui_resource_request_queue_.front(); |
| + ui_resource_request_queue_.pop_front(); |
| + switch (req.type) { |
| + case UIResourceCreate: |
| + host_impl->CreateUIResource(req.id, req.bitmap); |
| + break; |
| + case UIResourceDelete: |
| + host_impl->DeleteUIResource(req.id); |
| + break; |
| + } |
| + } |
| + } |
| + } |
| + |
| DCHECK(!sync_tree->ViewportSizeInvalid()); |
| if (new_impl_tree_has_no_evicted_resources) { |
| @@ -1055,4 +1075,41 @@ |
| return proxy_->CapturePicture(); |
| } |
| + |
| +UIResourceId |
| +LayerTreeHost::CreateUIResource(const UIResourceCallback& bitmap_cb) { |
| + UIResourceRequest request; |
| + request.type = UIResourceCreate; |
| + request.id = ui_resource_id_++; |
| + // The boolean parameter indicates this retrieval is not due to a |
|
enne (OOO)
2013/07/22 23:09:15
style nit: Rather than a comment, just say "bool r
powei
2013/07/24 02:28:29
Done.
|
| + // resource lost. |
| + request.bitmap = bitmap_cb.Run(false); |
| + ui_resource_request_queue_.push_back(request); |
| + ui_resource_client_map_[request.id] = bitmap_cb; |
|
enne (OOO)
2013/07/22 23:09:15
Can you DCHECK that this doesn't exist in the map
powei
2013/07/24 02:28:29
Done.
|
| + return request.id; |
| +} |
| + |
| +// Deletes a UI resource. May safely be called more than once. |
| +void LayerTreeHost::DeleteUIResource(UIResourceId uid) { |
| + if (ui_resource_client_map_.find(uid) != ui_resource_client_map_.end()) { |
| + UIResourceRequest request; |
| + request.type = UIResourceDelete; |
| + request.id = uid; |
| + ui_resource_request_queue_.push_back(request); |
| + ui_resource_client_map_.erase(uid); |
| + } |
| +} |
| + |
| +void LayerTreeHost::UIResourceLost(UIResourceId id) { |
| + UIResourceClientMap::iterator iter = ui_resource_client_map_.find(id); |
| + if (iter != ui_resource_client_map_.end()) { |
| + UIResourceRequest request; |
| + request.type = UIResourceCreate; |
| + request.id = id; |
| + request.bitmap = iter->second.Run(true); |
|
aelias_OOO_until_Jul13
2013/07/23 00:06:48
I think that if this callback is a destroyed weak_
powei
2013/07/24 02:28:29
I don't know if a weak_ptr can be passed with the
|
| + ui_resource_request_queue_.push_back(request); |
| + } |
| +} |
| + |
| + |
| } // namespace cc |