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_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 Loading... |
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 Loading... |
432 surface->TakeCopyOutputRequests(©_requests); | 433 surface->TakeCopyOutputRequests(©_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, ©_requests, ©_pass->copy_requests); | 454 MoveMatchingRequests(source.id, ©_requests, ©_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 Loading... |
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 |
OLD | NEW |