| 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_)
 | 
| 
 |