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 std::vector<SurfaceId> referenced_surfaces = surface->referenced_surfaces(); | |
86 | 94 |
87 surface_factory_.SubmitCompositorFrame( | 95 referenced_surfaces.insert(referenced_surfaces.end(), |
vmpstr
2017/02/10 00:24:40
This is, somewhat poor from an API perspective.
i
Fady Samuel
2017/02/10 00:55:30
I have renamed referenced_surfaces => active_refer
| |
88 local_surface_id, std::move(frame), | 96 surface->pending_referenced_surfaces().begin(), |
89 base::Bind(&CompositorFrameSinkSupport::DidReceiveCompositorFrameAck, | 97 surface->pending_referenced_surfaces().end()); |
90 weak_factory_.GetWeakPtr())); | 98 reference_tracker_.UpdateReferences(local_surface_id, referenced_surfaces); |
91 | 99 |
92 UpdateSurfaceReferences(last_surface_id, local_surface_id); | 100 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 } | 101 } |
99 | 102 |
100 if (display_) | 103 if (display_) |
101 display_->SetLocalSurfaceId(local_surface_id, device_scale_factor); | 104 display_->SetLocalSurfaceId(local_surface_id, device_scale_factor); |
102 } | 105 } |
103 | 106 |
104 void CompositorFrameSinkSupport::Require(const LocalSurfaceId& local_surface_id, | 107 void CompositorFrameSinkSupport::Require(const LocalSurfaceId& local_surface_id, |
105 const SurfaceSequence& sequence) { | 108 const SurfaceSequence& sequence) { |
106 surface_manager_->RequireSequence(SurfaceId(frame_sink_id_, local_surface_id), | 109 surface_manager_->RequireSequence(SurfaceId(frame_sink_id_, local_surface_id), |
107 sequence); | 110 sequence); |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
247 return; | 250 return; |
248 | 251 |
249 added_frame_observer_ = needs_begin_frame_; | 252 added_frame_observer_ = needs_begin_frame_; |
250 if (needs_begin_frame_) | 253 if (needs_begin_frame_) |
251 begin_frame_source_->AddObserver(this); | 254 begin_frame_source_->AddObserver(this); |
252 else | 255 else |
253 begin_frame_source_->RemoveObserver(this); | 256 begin_frame_source_->RemoveObserver(this); |
254 } | 257 } |
255 | 258 |
256 } // namespace cc | 259 } // namespace cc |
OLD | NEW |