OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/surface.h" | 5 #include "cc/surfaces/surface.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 bool referenced_surfaces_changed = | 82 bool referenced_surfaces_changed = |
83 (referenced_surfaces_ != new_referenced_surfaces); | 83 (referenced_surfaces_ != new_referenced_surfaces); |
84 referenced_surfaces_ = new_referenced_surfaces; | 84 referenced_surfaces_ = new_referenced_surfaces; |
85 std::vector<uint32_t> satisfies_sequences = | 85 std::vector<uint32_t> satisfies_sequences = |
86 std::move(current_frame_.metadata.satisfies_sequences); | 86 std::move(current_frame_.metadata.satisfies_sequences); |
87 | 87 |
88 if (referenced_surfaces_changed || !satisfies_sequences.empty()) { | 88 if (referenced_surfaces_changed || !satisfies_sequences.empty()) { |
89 // Notify the manager that sequences were satisfied either if some new | 89 // Notify the manager that sequences were satisfied either if some new |
90 // sequences were satisfied, or if the set of referenced surfaces changed | 90 // sequences were satisfied, or if the set of referenced surfaces changed |
91 // to force a GC to happen. | 91 // to force a GC to happen. |
92 factory_->manager()->DidSatisfySequences(surface_id_.client_id(), | 92 factory_->manager()->DidSatisfySequences(surface_id_.frame_sink_id(), |
93 &satisfies_sequences); | 93 &satisfies_sequences); |
94 } | 94 } |
95 } | 95 } |
96 | 96 |
97 void Surface::RequestCopyOfOutput( | 97 void Surface::RequestCopyOfOutput( |
98 std::unique_ptr<CopyOutputRequest> copy_request) { | 98 std::unique_ptr<CopyOutputRequest> copy_request) { |
99 if (current_frame_.delegated_frame_data && | 99 if (current_frame_.delegated_frame_data && |
100 !current_frame_.delegated_frame_data->render_pass_list.empty()) { | 100 !current_frame_.delegated_frame_data->render_pass_list.empty()) { |
101 std::vector<std::unique_ptr<CopyOutputRequest>>& copy_requests = | 101 std::vector<std::unique_ptr<CopyOutputRequest>>& copy_requests = |
102 current_frame_.delegated_frame_data->render_pass_list.back() | 102 current_frame_.delegated_frame_data->render_pass_list.back() |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 callback.Run(); | 158 callback.Run(); |
159 } | 159 } |
160 } | 160 } |
161 | 161 |
162 void Surface::AddDestructionDependency(SurfaceSequence sequence) { | 162 void Surface::AddDestructionDependency(SurfaceSequence sequence) { |
163 destruction_dependencies_.push_back(sequence); | 163 destruction_dependencies_.push_back(sequence); |
164 } | 164 } |
165 | 165 |
166 void Surface::SatisfyDestructionDependencies( | 166 void Surface::SatisfyDestructionDependencies( |
167 std::unordered_set<SurfaceSequence, SurfaceSequenceHash>* sequences, | 167 std::unordered_set<SurfaceSequence, SurfaceSequenceHash>* sequences, |
168 std::unordered_set<uint32_t>* valid_client_ids) { | 168 std::unordered_set<FrameSinkId, FrameSinkIdHash>* valid_frame_sink_ids) { |
169 destruction_dependencies_.erase( | 169 destruction_dependencies_.erase( |
170 std::remove_if(destruction_dependencies_.begin(), | 170 std::remove_if(destruction_dependencies_.begin(), |
171 destruction_dependencies_.end(), | 171 destruction_dependencies_.end(), |
172 [sequences, valid_client_ids](SurfaceSequence seq) { | 172 [sequences, valid_frame_sink_ids](SurfaceSequence seq) { |
173 return (!!sequences->erase(seq) || | 173 return (!!sequences->erase(seq) || |
174 !valid_client_ids->count(seq.client_id)); | 174 !valid_frame_sink_ids->count(seq.frame_sink_id)); |
175 }), | 175 }), |
176 destruction_dependencies_.end()); | 176 destruction_dependencies_.end()); |
177 } | 177 } |
178 | 178 |
179 void Surface::UnrefFrameResources(DelegatedFrameData* frame_data) { | 179 void Surface::UnrefFrameResources(DelegatedFrameData* frame_data) { |
180 ReturnedResourceArray resources; | 180 ReturnedResourceArray resources; |
181 TransferableResource::ReturnResources(frame_data->resource_list, &resources); | 181 TransferableResource::ReturnResources(frame_data->resource_list, &resources); |
182 // No point in returning same sync token to sender. | 182 // No point in returning same sync token to sender. |
183 for (auto& resource : resources) | 183 for (auto& resource : resources) |
184 resource.sync_token.Clear(); | 184 resource.sync_token.Clear(); |
185 factory_->UnrefResources(resources); | 185 factory_->UnrefResources(resources); |
186 } | 186 } |
187 | 187 |
188 void Surface::ClearCopyRequests() { | 188 void Surface::ClearCopyRequests() { |
189 if (current_frame_.delegated_frame_data) { | 189 if (current_frame_.delegated_frame_data) { |
190 for (const auto& render_pass : | 190 for (const auto& render_pass : |
191 current_frame_.delegated_frame_data->render_pass_list) { | 191 current_frame_.delegated_frame_data->render_pass_list) { |
192 for (const auto& copy_request : render_pass->copy_requests) | 192 for (const auto& copy_request : render_pass->copy_requests) |
193 copy_request->SendEmptyResult(); | 193 copy_request->SendEmptyResult(); |
194 } | 194 } |
195 } | 195 } |
196 } | 196 } |
197 | 197 |
198 } // namespace cc | 198 } // namespace cc |
OLD | NEW |