Index: cc/surfaces/surface.cc |
diff --git a/cc/surfaces/surface.cc b/cc/surfaces/surface.cc |
index 282974d22c31ab7fca705000b8d7a35ecd2a3279..d1b59d6b55f22478e65ce5a27a2f3f562dfcbb4c 100644 |
--- a/cc/surfaces/surface.cc |
+++ b/cc/surfaces/surface.cc |
@@ -65,6 +65,9 @@ |
previous_frame_surface_id_ = surface_id(); |
+ std::vector<SurfaceId> new_referenced_surfaces; |
+ new_referenced_surfaces = current_frame_->metadata.referenced_surfaces; |
+ |
if (previous_frame) |
UnrefFrameResources(*previous_frame); |
@@ -72,7 +75,19 @@ |
draw_callback_.Run(); |
draw_callback_ = callback; |
- referenced_surfaces_ = current_frame_->metadata.referenced_surfaces; |
+ bool referenced_surfaces_changed = |
+ (referenced_surfaces_ != new_referenced_surfaces); |
+ referenced_surfaces_ = new_referenced_surfaces; |
+ std::vector<uint32_t> satisfies_sequences = |
+ std::move(current_frame_->metadata.satisfies_sequences); |
+ |
+ if (referenced_surfaces_changed || !satisfies_sequences.empty()) { |
+ // Notify the manager that sequences were satisfied either if some new |
+ // sequences were satisfied, or if the set of referenced surfaces changed |
+ // to force a GC to happen. |
+ factory_->manager()->DidSatisfySequences(surface_id_.frame_sink_id(), |
+ &satisfies_sequences); |
+ } |
} |
void Surface::EvictFrame() { |