Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: cc/surfaces/surface.cc

Issue 2369793002: WIP: Propagate SurfaceID up window tree hierarchy
Patch Set: Fix input events: EventDispatcher ignores container windows Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/surfaces/surface.h ('k') | cc/surfaces/surface_factory.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « cc/surfaces/surface.h ('k') | cc/surfaces/surface_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698