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

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

Issue 1156303013: Don't make unnecessary copy of ChildToParentMap (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 for (auto& request : copy_requests) { 221 for (auto& request : copy_requests) {
222 request.second->SendEmptyResult(); 222 request.second->SendEmptyResult();
223 delete request.second; 223 delete request.second;
224 } 224 }
225 return; 225 return;
226 } 226 }
227 227
228 SurfaceSet::iterator it = referenced_surfaces_.insert(surface_id).first; 228 SurfaceSet::iterator it = referenced_surfaces_.insert(surface_id).first;
229 // TODO(vmpstr): provider check is a hack for unittests that don't set up a 229 // TODO(vmpstr): provider check is a hack for unittests that don't set up a
230 // resource provider. 230 // resource provider.
231 ResourceProvider::ResourceIdMap empty_map;
231 const ResourceProvider::ResourceIdMap& child_to_parent_map = 232 const ResourceProvider::ResourceIdMap& child_to_parent_map =
232 provider_ ? provider_->GetChildToParentMap(ChildIdForSurface(surface)) 233 provider_ ? provider_->GetChildToParentMap(ChildIdForSurface(surface))
233 : ResourceProvider::ResourceIdMap(); 234 : empty_map;
234 bool merge_pass = 235 bool merge_pass =
235 surface_quad->shared_quad_state->opacity == 1.f && copy_requests.empty(); 236 surface_quad->shared_quad_state->opacity == 1.f && copy_requests.empty();
236 237
237 gfx::Rect surface_damage = DamageRectForSurface( 238 gfx::Rect surface_damage = DamageRectForSurface(
238 surface, *render_pass_list.back(), surface_quad->visible_rect); 239 surface, *render_pass_list.back(), surface_quad->visible_rect);
239 const RenderPassList& referenced_passes = render_pass_list; 240 const RenderPassList& referenced_passes = render_pass_list;
240 size_t passes_to_copy = 241 size_t passes_to_copy =
241 merge_pass ? referenced_passes.size() - 1 : referenced_passes.size(); 242 merge_pass ? referenced_passes.size() - 1 : referenced_passes.size();
242 for (size_t j = 0; j < passes_to_copy; ++j) { 243 for (size_t j = 0; j < passes_to_copy; ++j) {
243 const RenderPass& source = *referenced_passes[j]; 244 const RenderPass& source = *referenced_passes[j];
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 surface->TakeCopyOutputRequests(&copy_requests); 433 surface->TakeCopyOutputRequests(&copy_requests);
433 434
434 const RenderPassList& source_pass_list = frame_data->render_pass_list; 435 const RenderPassList& source_pass_list = frame_data->render_pass_list;
435 bool invalid_frame = ValidateResources(surface, frame_data); 436 bool invalid_frame = ValidateResources(surface, frame_data);
436 DCHECK(!invalid_frame); 437 DCHECK(!invalid_frame);
437 if (invalid_frame) 438 if (invalid_frame)
438 return; 439 return;
439 440
440 // TODO(vmpstr): provider check is a hack for unittests that don't set up a 441 // TODO(vmpstr): provider check is a hack for unittests that don't set up a
441 // resource provider. 442 // resource provider.
443 ResourceProvider::ResourceIdMap empty_map;
442 const ResourceProvider::ResourceIdMap& child_to_parent_map = 444 const ResourceProvider::ResourceIdMap& child_to_parent_map =
443 provider_ ? provider_->GetChildToParentMap(ChildIdForSurface(surface)) 445 provider_ ? provider_->GetChildToParentMap(ChildIdForSurface(surface))
444 : ResourceProvider::ResourceIdMap(); 446 : empty_map;
445 for (size_t i = 0; i < source_pass_list.size(); ++i) { 447 for (size_t i = 0; i < source_pass_list.size(); ++i) {
446 const RenderPass& source = *source_pass_list[i]; 448 const RenderPass& source = *source_pass_list[i];
447 449
448 size_t sqs_size = source.shared_quad_state_list.size(); 450 size_t sqs_size = source.shared_quad_state_list.size();
449 size_t dq_size = source.quad_list.size(); 451 size_t dq_size = source.quad_list.size();
450 scoped_ptr<RenderPass> copy_pass(RenderPass::Create(sqs_size, dq_size)); 452 scoped_ptr<RenderPass> copy_pass(RenderPass::Create(sqs_size, dq_size));
451 453
452 MoveMatchingRequests(source.id, &copy_requests, &copy_pass->copy_requests); 454 MoveMatchingRequests(source.id, &copy_requests, &copy_pass->copy_requests);
453 455
454 RenderPassId remapped_pass_id = 456 RenderPassId remapped_pass_id =
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 546
545 void SurfaceAggregator::SetFullDamageForSurface(SurfaceId surface_id) { 547 void SurfaceAggregator::SetFullDamageForSurface(SurfaceId surface_id) {
546 auto it = previous_contained_surfaces_.find(surface_id); 548 auto it = previous_contained_surfaces_.find(surface_id);
547 if (it == previous_contained_surfaces_.end()) 549 if (it == previous_contained_surfaces_.end())
548 return; 550 return;
549 // Set the last drawn index as 0 to ensure full damage next time it's drawn. 551 // Set the last drawn index as 0 to ensure full damage next time it's drawn.
550 it->second = 0; 552 it->second = 0;
551 } 553 }
552 554
553 } // namespace cc 555 } // 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