| Index: cc/surfaces/compositor_frame_sink_support.cc
|
| diff --git a/cc/surfaces/compositor_frame_sink_support.cc b/cc/surfaces/compositor_frame_sink_support.cc
|
| index e7848f8021f16e3d3cadc78723a0076d505d2e9f..f79f22cb54f6342330d69186cab853c42545429b 100644
|
| --- a/cc/surfaces/compositor_frame_sink_support.cc
|
| +++ b/cc/surfaces/compositor_frame_sink_support.cc
|
| @@ -76,25 +76,34 @@ void CompositorFrameSinkSupport::SubmitCompositorFrame(
|
| ++ack_pending_count_;
|
| float device_scale_factor = frame.metadata.device_scale_factor;
|
|
|
| + surface_factory_.SubmitCompositorFrame(
|
| + local_surface_id, std::move(frame),
|
| + base::Bind(&CompositorFrameSinkSupport::DidReceiveCompositorFrameAck,
|
| + weak_factory_.GetWeakPtr()));
|
| +
|
| if (surface_manager_->using_surface_references()) {
|
| SurfaceId last_surface_id = reference_tracker_.current_surface_id();
|
|
|
| // Populate list of surface references to add and remove based on reference
|
| - // surfaces in current frame compared with the last frame.
|
| - reference_tracker_.UpdateReferences(local_surface_id,
|
| - frame.metadata.referenced_surfaces);
|
| -
|
| - surface_factory_.SubmitCompositorFrame(
|
| - local_surface_id, std::move(frame),
|
| - base::Bind(&CompositorFrameSinkSupport::DidReceiveCompositorFrameAck,
|
| - weak_factory_.GetWeakPtr()));
|
| + // surfaces in current frame compared with the last frame. The list of
|
| + // surface references includes references from both the pending and active
|
| + // frame if any.
|
| + SurfaceId current_surface_id(frame_sink_id_, local_surface_id);
|
| + Surface* surface = surface_manager_->GetSurfaceForId(current_surface_id);
|
| + // TODO(fsamuel): This is pretty inefficent. We copy over referenced
|
| + // surfaces. Then we pass them into the ReferencedSurfaceTracker to copy
|
| + // them again into a set. ReferencedSurfaceTracker should just take in two
|
| + // vectors, one for pending referenced surfaces and one for active
|
| + // referenced surfaces.
|
| + std::vector<SurfaceId> referenced_surfaces =
|
| + surface->active_referenced_surfaces();
|
| +
|
| + referenced_surfaces.insert(referenced_surfaces.end(),
|
| + surface->pending_referenced_surfaces().begin(),
|
| + surface->pending_referenced_surfaces().end());
|
| + reference_tracker_.UpdateReferences(local_surface_id, referenced_surfaces);
|
|
|
| UpdateSurfaceReferences(last_surface_id, local_surface_id);
|
| - } else {
|
| - surface_factory_.SubmitCompositorFrame(
|
| - local_surface_id, std::move(frame),
|
| - base::Bind(&CompositorFrameSinkSupport::DidReceiveCompositorFrameAck,
|
| - weak_factory_.GetWeakPtr()));
|
| }
|
|
|
| if (display_)
|
|
|