| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/surfaces/compositor_frame_sink_support.h" | 5 #include "cc/surfaces/compositor_frame_sink_support.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 needs_begin_frame_ = needs_begin_frame; | 69 needs_begin_frame_ = needs_begin_frame; |
| 70 UpdateNeedsBeginFramesInternal(); | 70 UpdateNeedsBeginFramesInternal(); |
| 71 } | 71 } |
| 72 | 72 |
| 73 void CompositorFrameSinkSupport::SubmitCompositorFrame( | 73 void CompositorFrameSinkSupport::SubmitCompositorFrame( |
| 74 const LocalSurfaceId& local_surface_id, | 74 const LocalSurfaceId& local_surface_id, |
| 75 CompositorFrame frame) { | 75 CompositorFrame frame) { |
| 76 ++ack_pending_count_; | 76 ++ack_pending_count_; |
| 77 float device_scale_factor = frame.metadata.device_scale_factor; | 77 float device_scale_factor = frame.metadata.device_scale_factor; |
| 78 | 78 |
| 79 surface_factory_.SubmitCompositorFrame( |
| 80 local_surface_id, std::move(frame), |
| 81 base::Bind(&CompositorFrameSinkSupport::DidReceiveCompositorFrameAck, |
| 82 weak_factory_.GetWeakPtr())); |
| 83 |
| 79 if (surface_manager_->using_surface_references()) { | 84 if (surface_manager_->using_surface_references()) { |
| 80 SurfaceId last_surface_id = reference_tracker_.current_surface_id(); | 85 SurfaceId last_surface_id = reference_tracker_.current_surface_id(); |
| 81 | 86 |
| 82 // Populate list of surface references to add and remove based on reference | 87 // Populate list of surface references to add and remove based on reference |
| 83 // surfaces in current frame compared with the last frame. | 88 // surfaces in current frame compared with the last frame. The list of |
| 84 reference_tracker_.UpdateReferences(local_surface_id, | 89 // surface references includes references from both the pending and active |
| 85 frame.metadata.referenced_surfaces); | 90 // frame if any. |
| 91 SurfaceId current_surface_id(frame_sink_id_, local_surface_id); |
| 92 Surface* surface = surface_manager_->GetSurfaceForId(current_surface_id); |
| 93 // TODO(fsamuel): This is pretty inefficent. We copy over referenced |
| 94 // surfaces. Then we pass them into the ReferencedSurfaceTracker to copy |
| 95 // them again into a set. ReferencedSurfaceTracker should just take in two |
| 96 // vectors, one for pending referenced surfaces and one for active |
| 97 // referenced surfaces. |
| 98 std::vector<SurfaceId> referenced_surfaces = |
| 99 surface->active_referenced_surfaces(); |
| 86 | 100 |
| 87 surface_factory_.SubmitCompositorFrame( | 101 referenced_surfaces.insert(referenced_surfaces.end(), |
| 88 local_surface_id, std::move(frame), | 102 surface->pending_referenced_surfaces().begin(), |
| 89 base::Bind(&CompositorFrameSinkSupport::DidReceiveCompositorFrameAck, | 103 surface->pending_referenced_surfaces().end()); |
| 90 weak_factory_.GetWeakPtr())); | 104 reference_tracker_.UpdateReferences(local_surface_id, referenced_surfaces); |
| 91 | 105 |
| 92 UpdateSurfaceReferences(last_surface_id, local_surface_id); | 106 UpdateSurfaceReferences(last_surface_id, local_surface_id); |
| 93 } else { | |
| 94 surface_factory_.SubmitCompositorFrame( | |
| 95 local_surface_id, std::move(frame), | |
| 96 base::Bind(&CompositorFrameSinkSupport::DidReceiveCompositorFrameAck, | |
| 97 weak_factory_.GetWeakPtr())); | |
| 98 } | 107 } |
| 99 | 108 |
| 100 if (display_) | 109 if (display_) |
| 101 display_->SetLocalSurfaceId(local_surface_id, device_scale_factor); | 110 display_->SetLocalSurfaceId(local_surface_id, device_scale_factor); |
| 102 } | 111 } |
| 103 | 112 |
| 104 void CompositorFrameSinkSupport::Require(const LocalSurfaceId& local_surface_id, | 113 void CompositorFrameSinkSupport::Require(const LocalSurfaceId& local_surface_id, |
| 105 const SurfaceSequence& sequence) { | 114 const SurfaceSequence& sequence) { |
| 106 surface_manager_->RequireSequence(SurfaceId(frame_sink_id_, local_surface_id), | 115 surface_manager_->RequireSequence(SurfaceId(frame_sink_id_, local_surface_id), |
| 107 sequence); | 116 sequence); |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 return; | 256 return; |
| 248 | 257 |
| 249 added_frame_observer_ = needs_begin_frame_; | 258 added_frame_observer_ = needs_begin_frame_; |
| 250 if (needs_begin_frame_) | 259 if (needs_begin_frame_) |
| 251 begin_frame_source_->AddObserver(this); | 260 begin_frame_source_->AddObserver(this); |
| 252 else | 261 else |
| 253 begin_frame_source_->RemoveObserver(this); | 262 begin_frame_source_->RemoveObserver(this); |
| 254 } | 263 } |
| 255 | 264 |
| 256 } // namespace cc | 265 } // namespace cc |
| OLD | NEW |