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 |