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

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

Issue 1080243002: Avoid copying ChildToParentMap in SurfaceAggregator. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@surfaceperftest
Patch Set: Created 5 years, 8 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 | « no previous file | no next file » | 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_aggregator.h" 5 #include "cc/surfaces/surface_aggregator.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 162
163 int child_id = ChildIdForSurface(surface); 163 int child_id = ChildIdForSurface(surface);
164 if (surface->factory()) 164 if (surface->factory())
165 surface->factory()->RefResources(frame_data->resource_list); 165 surface->factory()->RefResources(frame_data->resource_list);
166 provider_->ReceiveFromChild(child_id, frame_data->resource_list); 166 provider_->ReceiveFromChild(child_id, frame_data->resource_list);
167 167
168 typedef ResourceProvider::ResourceIdArray IdArray; 168 typedef ResourceProvider::ResourceIdArray IdArray;
169 IdArray referenced_resources; 169 IdArray referenced_resources;
170 170
171 bool invalid_frame = false; 171 bool invalid_frame = false;
172 DrawQuad::ResourceIteratorCallback remap = base::Bind( 172 DrawQuad::ResourceIteratorCallback remap =
173 &ValidateResourceHelper, &invalid_frame, 173 base::Bind(&ValidateResourceHelper, &invalid_frame,
174 provider_->GetChildToParentMap(child_id), &referenced_resources); 174 base::ConstRef(provider_->GetChildToParentMap(child_id)),
175 &referenced_resources);
175 for (const auto& render_pass : frame_data->render_pass_list) { 176 for (const auto& render_pass : frame_data->render_pass_list) {
176 for (const auto& quad : render_pass->quad_list) 177 for (const auto& quad : render_pass->quad_list)
177 quad->IterateResources(remap); 178 quad->IterateResources(remap);
178 } 179 }
179 180
180 if (!invalid_frame) 181 if (!invalid_frame)
181 provider_->DeclareUsedResourcesFromChild(child_id, referenced_resources); 182 provider_->DeclareUsedResourcesFromChild(child_id, referenced_resources);
182 183
183 return invalid_frame; 184 return invalid_frame;
184 } 185 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 request.second->SendEmptyResult(); 228 request.second->SendEmptyResult();
228 delete request.second; 229 delete request.second;
229 } 230 }
230 return; 231 return;
231 } 232 }
232 233
233 SurfaceSet::iterator it = referenced_surfaces_.insert(surface_id).first; 234 SurfaceSet::iterator it = referenced_surfaces_.insert(surface_id).first;
234 DrawQuad::ResourceIteratorCallback remap; 235 DrawQuad::ResourceIteratorCallback remap;
235 if (provider_) { 236 if (provider_) {
236 int child_id = ChildIdForSurface(surface); 237 int child_id = ChildIdForSurface(surface);
237 remap = base::Bind(&ResourceRemapHelper, 238 remap =
238 provider_->GetChildToParentMap(child_id)); 239 base::Bind(&ResourceRemapHelper,
240 base::ConstRef(provider_->GetChildToParentMap(child_id)));
239 } 241 }
240 242
241 bool merge_pass = surface_quad->opacity() == 1.f && copy_requests.empty(); 243 bool merge_pass = surface_quad->opacity() == 1.f && copy_requests.empty();
242 244
243 gfx::Rect surface_damage = DamageRectForSurface( 245 gfx::Rect surface_damage = DamageRectForSurface(
244 surface, *render_pass_list.back(), surface_quad->visible_rect); 246 surface, *render_pass_list.back(), surface_quad->visible_rect);
245 const RenderPassList& referenced_passes = render_pass_list; 247 const RenderPassList& referenced_passes = render_pass_list;
246 size_t passes_to_copy = 248 size_t passes_to_copy =
247 merge_pass ? referenced_passes.size() - 1 : referenced_passes.size(); 249 merge_pass ? referenced_passes.size() - 1 : referenced_passes.size();
248 for (size_t j = 0; j < passes_to_copy; ++j) { 250 for (size_t j = 0; j < passes_to_copy; ++j) {
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 426
425 const RenderPassList& source_pass_list = frame_data->render_pass_list; 427 const RenderPassList& source_pass_list = frame_data->render_pass_list;
426 bool invalid_frame = ValidateResources(surface, frame_data); 428 bool invalid_frame = ValidateResources(surface, frame_data);
427 DCHECK(!invalid_frame); 429 DCHECK(!invalid_frame);
428 if (invalid_frame) 430 if (invalid_frame)
429 return; 431 return;
430 432
431 DrawQuad::ResourceIteratorCallback remap; 433 DrawQuad::ResourceIteratorCallback remap;
432 if (provider_) { 434 if (provider_) {
433 int child_id = ChildIdForSurface(surface); 435 int child_id = ChildIdForSurface(surface);
434 remap = base::Bind(&ResourceRemapHelper, 436 remap =
435 provider_->GetChildToParentMap(child_id)); 437 base::Bind(&ResourceRemapHelper,
438 base::ConstRef(provider_->GetChildToParentMap(child_id)));
436 } 439 }
437 440
438 for (size_t i = 0; i < source_pass_list.size(); ++i) { 441 for (size_t i = 0; i < source_pass_list.size(); ++i) {
439 const RenderPass& source = *source_pass_list[i]; 442 const RenderPass& source = *source_pass_list[i];
440 443
441 size_t sqs_size = source.shared_quad_state_list.size(); 444 size_t sqs_size = source.shared_quad_state_list.size();
442 size_t dq_size = source.quad_list.size(); 445 size_t dq_size = source.quad_list.size();
443 scoped_ptr<RenderPass> copy_pass(RenderPass::Create(sqs_size, dq_size)); 446 scoped_ptr<RenderPass> copy_pass(RenderPass::Create(sqs_size, dq_size));
444 447
445 MoveMatchingRequests(source.id, &copy_requests, &copy_pass->copy_requests); 448 MoveMatchingRequests(source.id, &copy_requests, &copy_pass->copy_requests);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 void SurfaceAggregator::ReleaseResources(SurfaceId surface_id) { 532 void SurfaceAggregator::ReleaseResources(SurfaceId surface_id) {
530 SurfaceToResourceChildIdMap::iterator it = 533 SurfaceToResourceChildIdMap::iterator it =
531 surface_id_to_resource_child_id_.find(surface_id); 534 surface_id_to_resource_child_id_.find(surface_id);
532 if (it != surface_id_to_resource_child_id_.end()) { 535 if (it != surface_id_to_resource_child_id_.end()) {
533 provider_->DestroyChild(it->second); 536 provider_->DestroyChild(it->second);
534 surface_id_to_resource_child_id_.erase(it); 537 surface_id_to_resource_child_id_.erase(it);
535 } 538 }
536 } 539 }
537 540
538 } // namespace cc 541 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698