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 |