Index: cc/delegated_renderer_layer_impl.cc |
diff --git a/cc/delegated_renderer_layer_impl.cc b/cc/delegated_renderer_layer_impl.cc |
index 156032a0b808a51958188de7c5e032668a29e91f..6a980e44e83b3fb050dd8db2c497550b2dbb73a0 100644 |
--- a/cc/delegated_renderer_layer_impl.cc |
+++ b/cc/delegated_renderer_layer_impl.cc |
@@ -77,20 +77,20 @@ void DelegatedRendererLayerImpl::SetFrameData( |
setUpdateRect(gfx::UnionRects(updateRect(), damage_in_layer)); |
} |
- // Save the resources from the last frame. |
- ResourceProvider::ResourceIdSet new_resources; |
- |
// Receive the current frame's resources from the child compositor. |
ResourceProvider* resource_provider = layerTreeImpl()->resource_provider(); |
resource_provider->receiveFromChild(child_id_, frame_data->resource_list); |
+ const ResourceProvider::ResourceIdMap& resource_map = |
+ resource_provider->getChildToParentMap(child_id_); |
// Remap resource ids in the current frame's quads to the parent's namespace. |
bool invalid_frame = false; |
+ ResourceProvider::ResourceIdSet used_resources; |
DrawQuad::ResourceIteratorCallback remap_callback = base::Bind( |
&ResourceRemapHelper, |
&invalid_frame, |
- resource_provider->getChildToParentMap(child_id_), |
- &new_resources); |
+ resource_map, |
+ &used_resources); |
for (size_t i = 0; i < frame_data->render_pass_list.size(); ++i) { |
RenderPass* pass = frame_data->render_pass_list[i]; |
for (size_t j = 0; j < pass->quad_list.size(); ++j) { |
@@ -100,35 +100,23 @@ void DelegatedRendererLayerImpl::SetFrameData( |
} |
// If the frame has invalid data in it, don't display it. |
- if (invalid_frame) { |
- // Keep the resources given to us this frame. |
- for (ResourceProvider::ResourceIdSet::iterator it = new_resources.begin(); |
- it != new_resources.end(); |
- ++it) |
- resources_.insert(*it); |
+ if (invalid_frame) |
return; |
- } |
- |
- // Save the resources that this layer owns now. |
- ResourceProvider::ResourceIdSet previous_frame_resources; |
- previous_frame_resources.swap(resources_); |
- resources_.swap(new_resources); |
// Save the remapped quads on the layer. This steals the quads and render |
// passes from the frame_data. |
SetRenderPasses(frame_data->render_pass_list); |
- // Release the resources from the previous frame to prepare them for transport |
- // back to the child compositor. |
+ // Release unused resources to prepare them for transport back to the child |
+ // compositor. |
ResourceProvider::ResourceIdArray unused_resources; |
- for (ResourceProvider::ResourceIdSet::iterator it = |
- previous_frame_resources.begin(); |
- it != previous_frame_resources.end(); |
+ for (ResourceProvider::ResourceIdMap::const_iterator it = |
+ resource_map.begin(); |
+ it != resource_map.end(); |
++it) { |
- bool resource_is_not_in_current_frame = |
- resources_.find(*it) == resources_.end(); |
+ bool resource_is_not_in_current_frame = !used_resources.count(it->second); |
if (resource_is_not_in_current_frame) |
- unused_resources.push_back(*it); |
+ unused_resources.push_back(it->second); |
piman
2013/03/04 17:20:45
How do these get fed back into the next frame if i
danakj
2013/03/04 17:39:27
If the next frame needs them, I would expect it to
|
} |
resource_provider->prepareSendToChild( |
child_id_, unused_resources, resources_for_ack); |