| 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 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 Loading... |
| 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 Loading... |
| 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, ©_requests, ©_pass->copy_requests); | 448 MoveMatchingRequests(source.id, ©_requests, ©_pass->copy_requests); |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 |
| OLD | NEW |