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

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

Issue 551013002: Use Custome ListContainer to Allocate SharedQuadState (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@DQAllo
Patch Set: use ElementAt for unittest Created 6 years, 2 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
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 "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 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 surface->TakeCopyOutputRequests(&copy_requests); 181 surface->TakeCopyOutputRequests(&copy_requests);
182 182
183 bool merge_pass = copy_requests.empty(); 183 bool merge_pass = copy_requests.empty();
184 184
185 const RenderPassList& referenced_passes = render_pass_list; 185 const RenderPassList& referenced_passes = render_pass_list;
186 size_t passes_to_copy = 186 size_t passes_to_copy =
187 merge_pass ? referenced_passes.size() - 1 : referenced_passes.size(); 187 merge_pass ? referenced_passes.size() - 1 : referenced_passes.size();
188 for (size_t j = 0; j < passes_to_copy; ++j) { 188 for (size_t j = 0; j < passes_to_copy; ++j) {
189 const RenderPass& source = *referenced_passes[j]; 189 const RenderPass& source = *referenced_passes[j];
190 190
191 scoped_ptr<RenderPass> copy_pass(RenderPass::Create()); 191 size_t sqs_size = source.shared_quad_state_list.size();
192 size_t dq_size = source.quad_list.size();
193 scoped_ptr<RenderPass> copy_pass(RenderPass::Create(sqs_size, dq_size));
192 194
193 RenderPassId remapped_pass_id = RemapPassId(source.id, surface_id); 195 RenderPassId remapped_pass_id = RemapPassId(source.id, surface_id);
194 196
195 copy_pass->SetAll(remapped_pass_id, 197 copy_pass->SetAll(remapped_pass_id,
196 source.output_rect, 198 source.output_rect,
197 source.damage_rect, 199 source.damage_rect,
198 source.transform_to_root_target, 200 source.transform_to_root_target,
199 source.has_transparent_background); 201 source.has_transparent_background);
200 202
201 // Contributing passes aggregated in to the pass list need to take the 203 // Contributing passes aggregated in to the pass list need to take the
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 } 279 }
278 280
279 void SurfaceAggregator::CopyQuadsToPass( 281 void SurfaceAggregator::CopyQuadsToPass(
280 const QuadList& source_quad_list, 282 const QuadList& source_quad_list,
281 const SharedQuadStateList& source_shared_quad_state_list, 283 const SharedQuadStateList& source_shared_quad_state_list,
282 const gfx::Transform& content_to_target_transform, 284 const gfx::Transform& content_to_target_transform,
283 RenderPass* dest_pass, 285 RenderPass* dest_pass,
284 SurfaceId surface_id) { 286 SurfaceId surface_id) {
285 const SharedQuadState* last_copied_source_shared_quad_state = NULL; 287 const SharedQuadState* last_copied_source_shared_quad_state = NULL;
286 288
287 size_t sqs_i = 0; 289 SharedQuadStateList::ConstIterator sqs_iter =
290 source_shared_quad_state_list.begin();
288 for (QuadList::ConstIterator iter = source_quad_list.begin(); 291 for (QuadList::ConstIterator iter = source_quad_list.begin();
289 iter != source_quad_list.end(); 292 iter != source_quad_list.end();
290 ++iter) { 293 ++iter) {
291 const DrawQuad* quad = &*iter; 294 const DrawQuad* quad = &*iter;
292 while (quad->shared_quad_state != source_shared_quad_state_list[sqs_i]) { 295 while (quad->shared_quad_state != &(*sqs_iter)) {
danakj 2014/09/26 20:40:55 &*?
weiliangc 2014/10/01 23:02:00 Done.
293 ++sqs_i; 296 ++sqs_iter;
294 DCHECK_LT(sqs_i, source_shared_quad_state_list.size()); 297 DCHECK(sqs_iter != source_shared_quad_state_list.end());
295 } 298 }
296 DCHECK_EQ(quad->shared_quad_state, source_shared_quad_state_list[sqs_i]); 299 DCHECK_EQ(quad->shared_quad_state, &(*sqs_iter));
danakj 2014/09/26 20:40:55 &*?
weiliangc 2014/10/01 23:02:00 Done.
297 300
298 if (quad->material == DrawQuad::SURFACE_CONTENT) { 301 if (quad->material == DrawQuad::SURFACE_CONTENT) {
299 const SurfaceDrawQuad* surface_quad = SurfaceDrawQuad::MaterialCast(quad); 302 const SurfaceDrawQuad* surface_quad = SurfaceDrawQuad::MaterialCast(quad);
300 HandleSurfaceQuad(surface_quad, dest_pass); 303 HandleSurfaceQuad(surface_quad, dest_pass);
301 } else { 304 } else {
302 if (quad->shared_quad_state != last_copied_source_shared_quad_state) { 305 if (quad->shared_quad_state != last_copied_source_shared_quad_state) {
303 CopySharedQuadState( 306 CopySharedQuadState(
304 quad->shared_quad_state, content_to_target_transform, dest_pass); 307 quad->shared_quad_state, content_to_target_transform, dest_pass);
305 last_copied_source_shared_quad_state = quad->shared_quad_state; 308 last_copied_source_shared_quad_state = quad->shared_quad_state;
306 } 309 }
(...skipping 14 matching lines...) Expand all
321 } 324 }
322 } 325 }
323 } 326 }
324 } 327 }
325 328
326 void SurfaceAggregator::CopyPasses(const RenderPassList& source_pass_list, 329 void SurfaceAggregator::CopyPasses(const RenderPassList& source_pass_list,
327 const Surface* surface) { 330 const Surface* surface) {
328 for (size_t i = 0; i < source_pass_list.size(); ++i) { 331 for (size_t i = 0; i < source_pass_list.size(); ++i) {
329 const RenderPass& source = *source_pass_list[i]; 332 const RenderPass& source = *source_pass_list[i];
330 333
331 scoped_ptr<RenderPass> copy_pass(RenderPass::Create()); 334 size_t sqs_size = source.shared_quad_state_list.size();
335 size_t dq_size = source.quad_list.size();
336 scoped_ptr<RenderPass> copy_pass(RenderPass::Create(sqs_size, dq_size));
332 337
333 RenderPassId remapped_pass_id = 338 RenderPassId remapped_pass_id =
334 RemapPassId(source.id, surface->surface_id()); 339 RemapPassId(source.id, surface->surface_id());
335 340
336 copy_pass->SetAll(remapped_pass_id, 341 copy_pass->SetAll(remapped_pass_id,
337 source.output_rect, 342 source.output_rect,
338 DamageRectForSurface(surface, source), 343 DamageRectForSurface(surface, source),
339 source.transform_to_root_target, 344 source.transform_to_root_target,
340 source.has_transparent_background); 345 source.has_transparent_background);
341 346
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 surface->TakeLatencyInfo(&frame->metadata.latency_info); 398 surface->TakeLatencyInfo(&frame->metadata.latency_info);
394 } 399 }
395 400
396 // TODO(jamesr): Aggregate all resource references into the returned frame's 401 // TODO(jamesr): Aggregate all resource references into the returned frame's
397 // resource list. 402 // resource list.
398 403
399 return frame.Pass(); 404 return frame.Pass();
400 } 405 }
401 406
402 } // namespace cc 407 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698