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