Chromium Code Reviews| Index: cc/trees/layer_tree_host_impl.cc |
| =================================================================== |
| --- cc/trees/layer_tree_host_impl.cc (revision 210393) |
| +++ cc/trees/layer_tree_host_impl.cc (working copy) |
| @@ -40,6 +40,7 @@ |
| #include "cc/resources/memory_history.h" |
| #include "cc/resources/picture_layer_tiling.h" |
| #include "cc/resources/prioritized_resource_manager.h" |
| +#include "cc/resources/ui_resource_bitmap.h" |
| #include "cc/scheduler/delay_based_time_source.h" |
| #include "cc/scheduler/texture_uploader.h" |
| #include "cc/trees/damage_tracker.h" |
| @@ -49,6 +50,7 @@ |
| #include "cc/trees/quad_culler.h" |
| #include "cc/trees/single_thread_proxy.h" |
| #include "cc/trees/tree_synchronizer.h" |
| +#include "gpu/GLES2/gl2extchromium.h" |
| #include "ui/gfx/size_conversions.h" |
| #include "ui/gfx/vector2d_conversions.h" |
| @@ -1298,6 +1300,20 @@ |
| } |
| void LayerTreeHostImpl::DidLoseOutputSurface() { |
| + // When output surface is lost, notify the client of the lost and remove |
| + // exisiting entries. |
|
enne (OOO)
2013/07/22 23:09:15
typo: exisiting => existing
powei
2013/07/24 02:28:29
Done.
|
| + for (UIResourceMap::iterator iter = ui_resource_map_.begin(); |
| + iter != ui_resource_map_.end(); |
| + iter++) { |
| + client_->UIResourceLostOnImplThread(iter->first); |
|
enne (OOO)
2013/07/22 23:09:15
I am still a little confused about this path. It
aelias_OOO_until_Jul13
2013/07/23 00:06:48
I agree with Enne, the loop should be in LayerTree
powei
2013/07/24 02:28:29
Done.
powei
2013/07/24 02:28:29
Done.
|
| + } |
| + // Remove all map from existing UIResourceId to ResourceId. |
| + ui_resource_map_.clear(); |
| + // Remove all pending UI resource requests because there might be |
| + // deletion requests, which can no longer be honored (or already |
| + // gone anyways). |
| + ui_resource_request_queue_.clear(); |
| + |
| // TODO(jamesr): The renderer_ check is needed to make some of the |
| // LayerTreeHostContextTest tests pass, but shouldn't be necessary (or |
| // important) in production. We should adjust the test to not need this. |
| @@ -1430,6 +1446,19 @@ |
| stats.total_rasterize_time_for_now_bins_on_pending_tree); |
| } |
| + while (ui_resource_request_queue_.size() > 0) { |
| + UIResourceRequest req = ui_resource_request_queue_.front(); |
| + ui_resource_request_queue_.pop_front(); |
| + switch (req.type) { |
| + case UIResourceCreate: |
| + CreateUIResource(req.id, req.bitmap); |
|
enne (OOO)
2013/07/22 23:09:15
In general activation is gated on having all of yo
aelias_OOO_until_Jul13
2013/07/23 00:06:48
Yes, the assumption is that for v1 of this patch,
powei
2013/07/24 02:28:29
Done.
powei
2013/07/24 02:28:29
Done.
|
| + break; |
| + case UIResourceDelete: |
| + DeleteUIResource(req.id); |
| + break; |
| + } |
| + } |
| + |
| client_->DidActivatePendingTree(); |
| } |
| @@ -2362,4 +2391,39 @@ |
| debug_state_ = debug_state; |
| } |
| +void LayerTreeHostImpl::CreateUIResource( |
| + UIResourceId uid, |
| + scoped_refptr<UIResourceBitmap> bitmap) { |
| + ResourceProvider::ResourceId id = |
| + resource_provider_->CreateGLTexture(bitmap->GetSize(), |
|
enne (OOO)
2013/07/22 23:09:15
CreateGLTexture in LayerTreeHostImpl? What if ther
powei
2013/07/24 02:28:29
Done.
|
| + GL_RGBA, |
|
enne (OOO)
2013/07/22 23:09:15
Should you DCHECK that bitmap's format is RGBA8 an
powei
2013/07/24 02:28:29
Done.
|
| + GL_TEXTURE_POOL_UNMANAGED_CHROMIUM, |
| + ResourceProvider::TextureUsageAny); |
| + |
| + ui_resource_map_[uid] = id; |
|
enne (OOO)
2013/07/22 23:09:15
Can you DCHECK that it doesn't previously exist?
powei
2013/07/24 02:28:29
Done.
|
| + gfx::Size bitmap_size = bitmap->GetSize(); |
| + resource_provider_->SetPixels(id, |
| + reinterpret_cast<uint8_t*>(bitmap->GetPixels()), |
| + gfx::Rect(bitmap_size), |
| + gfx::Rect(bitmap_size), |
| + gfx::Vector2d(0, 0)); |
| +} |
| + |
| +void LayerTreeHostImpl::DeleteUIResource(UIResourceId uid) { |
| + ResourceProvider::ResourceId id = ResourceIdForUIResource(uid); |
| + if (id) { |
| + resource_provider_->DeleteResource(id); |
| + ui_resource_map_.erase(uid); |
| + } |
| +} |
| + |
| +ResourceProvider::ResourceId |
| +LayerTreeHostImpl::ResourceIdForUIResource(UIResourceId uid) const { |
| + if (ui_resource_map_.find(uid) != ui_resource_map_.end()) { |
|
enne (OOO)
2013/07/22 23:09:15
If you're going to find and then do something with
powei
2013/07/24 02:28:29
Done.
|
| + return ui_resource_map_.find(uid)->second; |
| + } |
| + return 0; |
| +} |
| + |
| + |
| } // namespace cc |