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 "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/containers/hash_tables.h" | 8 #include "base/containers/hash_tables.h" |
9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 bool invalid_frame = false; | 121 bool invalid_frame = false; |
122 DrawQuad::ResourceIteratorCallback remap = | 122 DrawQuad::ResourceIteratorCallback remap = |
123 base::Bind(&ResourceRemapHelper, | 123 base::Bind(&ResourceRemapHelper, |
124 &invalid_frame, | 124 &invalid_frame, |
125 provider_->GetChildToParentMap(child_id), | 125 provider_->GetChildToParentMap(child_id), |
126 &referenced_resources); | 126 &referenced_resources); |
127 for (RenderPassList::iterator it = render_pass_list->begin(); | 127 for (RenderPassList::iterator it = render_pass_list->begin(); |
128 it != render_pass_list->end(); | 128 it != render_pass_list->end(); |
129 ++it) { | 129 ++it) { |
130 QuadList& quad_list = (*it)->quad_list; | 130 QuadList& quad_list = (*it)->quad_list; |
131 for (QuadList::iterator quad_it = quad_list.begin(); | 131 for (QuadList::Iterator quad_it = quad_list.begin(); |
132 quad_it != quad_list.end(); | 132 quad_it != quad_list.end(); |
133 ++quad_it) { | 133 ++quad_it) { |
134 (*quad_it)->IterateResources(remap); | 134 quad_it->IterateResources(remap); |
135 } | 135 } |
136 } | 136 } |
137 if (!invalid_frame) | 137 if (!invalid_frame) |
138 provider_->DeclareUsedResourcesFromChild(child_id, referenced_resources); | 138 provider_->DeclareUsedResourcesFromChild(child_id, referenced_resources); |
139 | 139 |
140 return invalid_frame; | 140 return invalid_frame; |
141 } | 141 } |
142 | 142 |
143 gfx::Rect SurfaceAggregator::DamageRectForSurface(const Surface* surface, | 143 gfx::Rect SurfaceAggregator::DamageRectForSurface(const Surface* surface, |
144 const RenderPass& source) { | 144 const RenderPass& source) { |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 dest_pass, | 227 dest_pass, |
228 surface_id); | 228 surface_id); |
229 } else { | 229 } else { |
230 RenderPassId remapped_pass_id = RemapPassId(last_pass.id, surface_id); | 230 RenderPassId remapped_pass_id = RemapPassId(last_pass.id, surface_id); |
231 | 231 |
232 dest_pass_list_->back()->copy_requests.swap(copy_requests); | 232 dest_pass_list_->back()->copy_requests.swap(copy_requests); |
233 | 233 |
234 SharedQuadState* shared_quad_state = | 234 SharedQuadState* shared_quad_state = |
235 dest_pass->CreateAndAppendSharedQuadState(); | 235 dest_pass->CreateAndAppendSharedQuadState(); |
236 shared_quad_state->CopyFrom(surface_quad->shared_quad_state); | 236 shared_quad_state->CopyFrom(surface_quad->shared_quad_state); |
237 scoped_ptr<RenderPassDrawQuad> quad(new RenderPassDrawQuad); | 237 RenderPassDrawQuad* quad = |
| 238 dest_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); |
238 quad->SetNew(shared_quad_state, | 239 quad->SetNew(shared_quad_state, |
239 surface_quad->rect, | 240 surface_quad->rect, |
240 surface_quad->visible_rect, | 241 surface_quad->visible_rect, |
241 remapped_pass_id, | 242 remapped_pass_id, |
242 0, | 243 0, |
243 gfx::RectF(), | 244 gfx::RectF(), |
244 FilterOperations(), | 245 FilterOperations(), |
245 gfx::Vector2dF(), | 246 gfx::Vector2dF(), |
246 FilterOperations()); | 247 FilterOperations()); |
247 dest_pass->quad_list.push_back(quad.PassAs<DrawQuad>()); | |
248 } | 248 } |
249 dest_pass->damage_rect = | 249 dest_pass->damage_rect = |
250 gfx::UnionRects(dest_pass->damage_rect, | 250 gfx::UnionRects(dest_pass->damage_rect, |
251 MathUtil::MapEnclosingClippedRect( | 251 MathUtil::MapEnclosingClippedRect( |
252 surface_quad->quadTransform(), | 252 surface_quad->quadTransform(), |
253 DamageRectForSurface(surface, last_pass))); | 253 DamageRectForSurface(surface, last_pass))); |
254 | 254 |
255 referenced_surfaces_.erase(it); | 255 referenced_surfaces_.erase(it); |
256 } | 256 } |
257 | 257 |
(...skipping 19 matching lines...) Expand all Loading... |
277 } | 277 } |
278 | 278 |
279 void SurfaceAggregator::CopyQuadsToPass( | 279 void SurfaceAggregator::CopyQuadsToPass( |
280 const QuadList& source_quad_list, | 280 const QuadList& source_quad_list, |
281 const SharedQuadStateList& source_shared_quad_state_list, | 281 const SharedQuadStateList& source_shared_quad_state_list, |
282 const gfx::Transform& content_to_target_transform, | 282 const gfx::Transform& content_to_target_transform, |
283 RenderPass* dest_pass, | 283 RenderPass* dest_pass, |
284 SurfaceId surface_id) { | 284 SurfaceId surface_id) { |
285 const SharedQuadState* last_copied_source_shared_quad_state = NULL; | 285 const SharedQuadState* last_copied_source_shared_quad_state = NULL; |
286 | 286 |
287 for (size_t i = 0, sqs_i = 0; i < source_quad_list.size(); ++i) { | 287 size_t sqs_i = 0; |
288 DrawQuad* quad = source_quad_list[i]; | 288 for (QuadList::ConstIterator iter = source_quad_list.begin(); |
| 289 iter != source_quad_list.end(); |
| 290 ++iter) { |
| 291 const DrawQuad* quad = &*iter; |
289 while (quad->shared_quad_state != source_shared_quad_state_list[sqs_i]) { | 292 while (quad->shared_quad_state != source_shared_quad_state_list[sqs_i]) { |
290 ++sqs_i; | 293 ++sqs_i; |
291 DCHECK_LT(sqs_i, source_shared_quad_state_list.size()); | 294 DCHECK_LT(sqs_i, source_shared_quad_state_list.size()); |
292 } | 295 } |
293 DCHECK_EQ(quad->shared_quad_state, source_shared_quad_state_list[sqs_i]); | 296 DCHECK_EQ(quad->shared_quad_state, source_shared_quad_state_list[sqs_i]); |
294 | 297 |
295 if (quad->material == DrawQuad::SURFACE_CONTENT) { | 298 if (quad->material == DrawQuad::SURFACE_CONTENT) { |
296 const SurfaceDrawQuad* surface_quad = SurfaceDrawQuad::MaterialCast(quad); | 299 const SurfaceDrawQuad* surface_quad = SurfaceDrawQuad::MaterialCast(quad); |
297 HandleSurfaceQuad(surface_quad, dest_pass); | 300 HandleSurfaceQuad(surface_quad, dest_pass); |
298 } else { | 301 } else { |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
390 surface->TakeLatencyInfo(&frame->metadata.latency_info); | 393 surface->TakeLatencyInfo(&frame->metadata.latency_info); |
391 } | 394 } |
392 | 395 |
393 // TODO(jamesr): Aggregate all resource references into the returned frame's | 396 // TODO(jamesr): Aggregate all resource references into the returned frame's |
394 // resource list. | 397 // resource list. |
395 | 398 |
396 return frame.Pass(); | 399 return frame.Pass(); |
397 } | 400 } |
398 | 401 |
399 } // namespace cc | 402 } // namespace cc |
OLD | NEW |