Index: cc/delegated_renderer_layer.cc |
diff --git a/cc/delegated_renderer_layer.cc b/cc/delegated_renderer_layer.cc |
index 7e06e4fc52938ec8b6320040cee530b262caf852..297a5e894573fdfd772259937c17eb0b57958cf8 100644 |
--- a/cc/delegated_renderer_layer.cc |
+++ b/cc/delegated_renderer_layer.cc |
@@ -37,10 +37,11 @@ void DelegatedRendererLayer::pushPropertiesTo(LayerImpl* impl) { |
delegated_impl->SetDisplaySize(display_size_); |
- if (!frame_data_) |
- return; |
- |
- if (frame_size_.IsEmpty()) { |
+ if (!frame_data_) { |
+ delegated_impl->SetFrameData(scoped_ptr<DelegatedFrameData>(), |
+ gfx::Rect(), |
+ &unused_resources_for_child_compositor_); |
+ } else if (frame_size_.IsEmpty()) { |
scoped_ptr<DelegatedFrameData> empty_frame(new DelegatedFrameData); |
delegated_impl->SetFrameData(empty_frame.Pass(), |
gfx::Rect(), |
@@ -75,6 +76,16 @@ void DelegatedRendererLayer::SetFrameData( |
RenderPass* root_pass = frame_data_->render_pass_list.back(); |
damage_in_frame_.Union(root_pass->damage_rect); |
frame_size_ = root_pass->output_rect.size(); |
+ |
+ // TODO(danakj): This could be optimized to only add resources to the |
+ // frame_data_ if they are actually used in the frame. For now, it will |
+ // cause the parent (this layer) to hold onto some resources it doesn't |
+ // need to for an extra frame. |
+ for (size_t i = 0; i < unused_resources_for_child_compositor_.size(); ++i) { |
+ frame_data_->resource_list.push_back( |
+ unused_resources_for_child_compositor_[i]); |
+ } |
+ unused_resources_for_child_compositor_.clear(); |
} else { |
frame_size_ = gfx::Size(); |
} |