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

Side by Side Diff: content/common/cc_messages.cc

Issue 448303002: Use custom ListContainer to allocate DrawQuads (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@perftest
Patch Set: change header files to try fix compile error 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
« no previous file with comments | « cc/trees/layer_tree_host_unittest_delegated.cc ('k') | content/common/cc_messages_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/common/cc_messages.h" 5 #include "content/common/cc_messages.h"
6 6
7 #include "cc/output/compositor_frame.h" 7 #include "cc/output/compositor_frame.h"
8 #include "cc/output/filter_operations.h" 8 #include "cc/output/filter_operations.h"
9 #include "cc/quads/largest_draw_quad.h" 9 #include "cc/quads/largest_draw_quad.h"
10 #include "content/public/common/common_param_traits.h" 10 #include "content/public/common/common_param_traits.h"
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 WriteParam(m, p.id); 292 WriteParam(m, p.id);
293 WriteParam(m, p.output_rect); 293 WriteParam(m, p.output_rect);
294 WriteParam(m, p.damage_rect); 294 WriteParam(m, p.damage_rect);
295 WriteParam(m, p.transform_to_root_target); 295 WriteParam(m, p.transform_to_root_target);
296 WriteParam(m, p.has_transparent_background); 296 WriteParam(m, p.has_transparent_background);
297 WriteParam(m, p.shared_quad_state_list.size()); 297 WriteParam(m, p.shared_quad_state_list.size());
298 WriteParam(m, p.quad_list.size()); 298 WriteParam(m, p.quad_list.size());
299 299
300 size_t shared_quad_state_index = 0; 300 size_t shared_quad_state_index = 0;
301 size_t last_shared_quad_state_index = kuint32max; 301 size_t last_shared_quad_state_index = kuint32max;
302 for (size_t i = 0; i < p.quad_list.size(); ++i) { 302 for (cc::QuadList::ConstIterator iter = p.quad_list.begin();
303 const cc::DrawQuad* quad = p.quad_list[i]; 303 iter != p.quad_list.end();
304 ++iter) {
305 const cc::DrawQuad* quad = &*iter;
304 DCHECK(quad->rect.Contains(quad->visible_rect)) 306 DCHECK(quad->rect.Contains(quad->visible_rect))
305 << quad->material << " rect: " << quad->rect.ToString() 307 << quad->material << " rect: " << quad->rect.ToString()
306 << " visible_rect: " << quad->visible_rect.ToString(); 308 << " visible_rect: " << quad->visible_rect.ToString();
307 DCHECK(quad->opaque_rect.IsEmpty() || 309 DCHECK(quad->opaque_rect.IsEmpty() ||
308 quad->rect.Contains(quad->opaque_rect)) 310 quad->rect.Contains(quad->opaque_rect))
309 << quad->material << " rect: " << quad->rect.ToString() 311 << quad->material << " rect: " << quad->rect.ToString()
310 << " opaque_rect: " << quad->opaque_rect.ToString(); 312 << " opaque_rect: " << quad->opaque_rect.ToString();
311 313
312 switch (quad->material) { 314 switch (quad->material) {
313 case cc::DrawQuad::CHECKERBOARD: 315 case cc::DrawQuad::CHECKERBOARD:
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 to_reserve += p.shared_quad_state_list.size() * sizeof(cc::SharedQuadState); 388 to_reserve += p.shared_quad_state_list.size() * sizeof(cc::SharedQuadState);
387 389
388 // The shared_quad_state_index for each quad. 390 // The shared_quad_state_index for each quad.
389 to_reserve += p.quad_list.size() * sizeof(size_t); 391 to_reserve += p.quad_list.size() * sizeof(size_t);
390 392
391 // The largest quad type, verified by a unit test. 393 // The largest quad type, verified by a unit test.
392 to_reserve += p.quad_list.size() * sizeof(cc::kLargestDrawQuad); 394 to_reserve += p.quad_list.size() * sizeof(cc::kLargestDrawQuad);
393 return to_reserve; 395 return to_reserve;
394 } 396 }
395 397
396 template<typename QuadType> 398 template <typename QuadType>
397 static scoped_ptr<cc::DrawQuad> ReadDrawQuad(const Message* m, 399 static cc::DrawQuad* ReadDrawQuad(const Message* m,
398 PickleIterator* iter) { 400 PickleIterator* iter,
399 scoped_ptr<QuadType> quad(new QuadType); 401 cc::RenderPass* render_pass) {
400 if (!ReadParam(m, iter, quad.get())) 402 QuadType* quad = render_pass->CreateAndAppendDrawQuad<QuadType>();
401 return scoped_ptr<QuadType>().template PassAs<cc::DrawQuad>(); 403 if (!ReadParam(m, iter, quad))
402 return quad.template PassAs<cc::DrawQuad>(); 404 return NULL;
405 return quad;
403 } 406 }
404 407
405 bool ParamTraits<cc::RenderPass>::Read( 408 bool ParamTraits<cc::RenderPass>::Read(
406 const Message* m, PickleIterator* iter, param_type* p) { 409 const Message* m, PickleIterator* iter, param_type* p) {
407 cc::RenderPassId id(-1, -1); 410 cc::RenderPassId id(-1, -1);
408 gfx::Rect output_rect; 411 gfx::Rect output_rect;
409 gfx::Rect damage_rect; 412 gfx::Rect damage_rect;
410 gfx::Transform transform_to_root_target; 413 gfx::Transform transform_to_root_target;
411 bool has_transparent_background; 414 bool has_transparent_background;
412 size_t shared_quad_state_list_size; 415 size_t shared_quad_state_list_size;
(...skipping 14 matching lines...) Expand all
427 transform_to_root_target, 430 transform_to_root_target,
428 has_transparent_background); 431 has_transparent_background);
429 432
430 size_t last_shared_quad_state_index = kuint32max; 433 size_t last_shared_quad_state_index = kuint32max;
431 for (size_t i = 0; i < quad_list_size; ++i) { 434 for (size_t i = 0; i < quad_list_size; ++i) {
432 cc::DrawQuad::Material material; 435 cc::DrawQuad::Material material;
433 PickleIterator temp_iter = *iter; 436 PickleIterator temp_iter = *iter;
434 if (!ReadParam(m, &temp_iter, &material)) 437 if (!ReadParam(m, &temp_iter, &material))
435 return false; 438 return false;
436 439
437 scoped_ptr<cc::DrawQuad> draw_quad; 440 cc::DrawQuad* draw_quad = NULL;
438 switch (material) { 441 switch (material) {
439 case cc::DrawQuad::CHECKERBOARD: 442 case cc::DrawQuad::CHECKERBOARD:
440 draw_quad = ReadDrawQuad<cc::CheckerboardDrawQuad>(m, iter); 443 draw_quad = ReadDrawQuad<cc::CheckerboardDrawQuad>(m, iter, p);
441 break; 444 break;
442 case cc::DrawQuad::DEBUG_BORDER: 445 case cc::DrawQuad::DEBUG_BORDER:
443 draw_quad = ReadDrawQuad<cc::DebugBorderDrawQuad>(m, iter); 446 draw_quad = ReadDrawQuad<cc::DebugBorderDrawQuad>(m, iter, p);
444 break; 447 break;
445 case cc::DrawQuad::IO_SURFACE_CONTENT: 448 case cc::DrawQuad::IO_SURFACE_CONTENT:
446 draw_quad = ReadDrawQuad<cc::IOSurfaceDrawQuad>(m, iter); 449 draw_quad = ReadDrawQuad<cc::IOSurfaceDrawQuad>(m, iter, p);
447 break; 450 break;
448 case cc::DrawQuad::PICTURE_CONTENT: 451 case cc::DrawQuad::PICTURE_CONTENT:
449 NOTREACHED(); 452 NOTREACHED();
450 return false; 453 return false;
451 case cc::DrawQuad::SURFACE_CONTENT: 454 case cc::DrawQuad::SURFACE_CONTENT:
452 draw_quad = ReadDrawQuad<cc::SurfaceDrawQuad>(m, iter); 455 draw_quad = ReadDrawQuad<cc::SurfaceDrawQuad>(m, iter, p);
453 break; 456 break;
454 case cc::DrawQuad::TEXTURE_CONTENT: 457 case cc::DrawQuad::TEXTURE_CONTENT:
455 draw_quad = ReadDrawQuad<cc::TextureDrawQuad>(m, iter); 458 draw_quad = ReadDrawQuad<cc::TextureDrawQuad>(m, iter, p);
456 break; 459 break;
457 case cc::DrawQuad::RENDER_PASS: 460 case cc::DrawQuad::RENDER_PASS:
458 draw_quad = ReadDrawQuad<cc::RenderPassDrawQuad>(m, iter); 461 draw_quad = ReadDrawQuad<cc::RenderPassDrawQuad>(m, iter, p);
459 break; 462 break;
460 case cc::DrawQuad::SOLID_COLOR: 463 case cc::DrawQuad::SOLID_COLOR:
461 draw_quad = ReadDrawQuad<cc::SolidColorDrawQuad>(m, iter); 464 draw_quad = ReadDrawQuad<cc::SolidColorDrawQuad>(m, iter, p);
462 break; 465 break;
463 case cc::DrawQuad::TILED_CONTENT: 466 case cc::DrawQuad::TILED_CONTENT:
464 draw_quad = ReadDrawQuad<cc::TileDrawQuad>(m, iter); 467 draw_quad = ReadDrawQuad<cc::TileDrawQuad>(m, iter, p);
465 break; 468 break;
466 case cc::DrawQuad::STREAM_VIDEO_CONTENT: 469 case cc::DrawQuad::STREAM_VIDEO_CONTENT:
467 draw_quad = ReadDrawQuad<cc::StreamVideoDrawQuad>(m, iter); 470 draw_quad = ReadDrawQuad<cc::StreamVideoDrawQuad>(m, iter, p);
468 break; 471 break;
469 case cc::DrawQuad::YUV_VIDEO_CONTENT: 472 case cc::DrawQuad::YUV_VIDEO_CONTENT:
470 draw_quad = ReadDrawQuad<cc::YUVVideoDrawQuad>(m, iter); 473 draw_quad = ReadDrawQuad<cc::YUVVideoDrawQuad>(m, iter, p);
471 break; 474 break;
472 case cc::DrawQuad::INVALID: 475 case cc::DrawQuad::INVALID:
473 break; 476 break;
474 } 477 }
475 if (!draw_quad) 478 if (!draw_quad)
476 return false; 479 return false;
477 if (!draw_quad->rect.Contains(draw_quad->visible_rect)) { 480 if (!draw_quad->rect.Contains(draw_quad->visible_rect)) {
478 LOG(ERROR) << "Quad with invalid visible rect " << draw_quad->material 481 LOG(ERROR) << "Quad with invalid visible rect " << draw_quad->material
479 << " rect: " << draw_quad->rect.ToString() 482 << " rect: " << draw_quad->rect.ToString()
480 << " visible_rect: " << draw_quad->visible_rect.ToString(); 483 << " visible_rect: " << draw_quad->visible_rect.ToString();
(...skipping 19 matching lines...) Expand all
500 503
501 // If the quad has a new shared quad state, read it in. 504 // If the quad has a new shared quad state, read it in.
502 if (last_shared_quad_state_index != shared_quad_state_index) { 505 if (last_shared_quad_state_index != shared_quad_state_index) {
503 cc::SharedQuadState* state = p->CreateAndAppendSharedQuadState(); 506 cc::SharedQuadState* state = p->CreateAndAppendSharedQuadState();
504 if (!ReadParam(m, iter, state)) 507 if (!ReadParam(m, iter, state))
505 return false; 508 return false;
506 last_shared_quad_state_index = shared_quad_state_index; 509 last_shared_quad_state_index = shared_quad_state_index;
507 } 510 }
508 511
509 draw_quad->shared_quad_state = p->shared_quad_state_list.back(); 512 draw_quad->shared_quad_state = p->shared_quad_state_list.back();
510 p->quad_list.push_back(draw_quad.Pass());
511 } 513 }
512 514
513 return true; 515 return true;
514 } 516 }
515 517
516 void ParamTraits<cc::RenderPass>::Log( 518 void ParamTraits<cc::RenderPass>::Log(
517 const param_type& p, std::string* l) { 519 const param_type& p, std::string* l) {
518 l->append("RenderPass(("); 520 l->append("RenderPass((");
519 LogParam(p.id, l); 521 LogParam(p.id, l);
520 l->append("), "); 522 l->append("), ");
521 LogParam(p.output_rect, l); 523 LogParam(p.output_rect, l);
522 l->append(", "); 524 l->append(", ");
523 LogParam(p.damage_rect, l); 525 LogParam(p.damage_rect, l);
524 l->append(", "); 526 l->append(", ");
525 LogParam(p.transform_to_root_target, l); 527 LogParam(p.transform_to_root_target, l);
526 l->append(", "); 528 l->append(", ");
527 LogParam(p.has_transparent_background, l); 529 LogParam(p.has_transparent_background, l);
528 l->append(", "); 530 l->append(", ");
529 531
530 l->append("["); 532 l->append("[");
531 for (size_t i = 0; i < p.shared_quad_state_list.size(); ++i) { 533 for (size_t i = 0; i < p.shared_quad_state_list.size(); ++i) {
532 if (i) 534 if (i)
533 l->append(", "); 535 l->append(", ");
534 LogParam(*p.shared_quad_state_list[i], l); 536 LogParam(*p.shared_quad_state_list[i], l);
535 } 537 }
536 l->append("], ["); 538 l->append("], [");
537 for (size_t i = 0; i < p.quad_list.size(); ++i) { 539 for (cc::QuadList::ConstIterator iter = p.quad_list.begin();
538 if (i) 540 iter != p.quad_list.end();
541 ++iter) {
542 if (iter != p.quad_list.begin())
539 l->append(", "); 543 l->append(", ");
540 const cc::DrawQuad* quad = p.quad_list[i]; 544 const cc::DrawQuad* quad = &*iter;
541 switch (quad->material) { 545 switch (quad->material) {
542 case cc::DrawQuad::CHECKERBOARD: 546 case cc::DrawQuad::CHECKERBOARD:
543 LogParam(*cc::CheckerboardDrawQuad::MaterialCast(quad), l); 547 LogParam(*cc::CheckerboardDrawQuad::MaterialCast(quad), l);
544 break; 548 break;
545 case cc::DrawQuad::DEBUG_BORDER: 549 case cc::DrawQuad::DEBUG_BORDER:
546 LogParam(*cc::DebugBorderDrawQuad::MaterialCast(quad), l); 550 LogParam(*cc::DebugBorderDrawQuad::MaterialCast(quad), l);
547 break; 551 break;
548 case cc::DrawQuad::IO_SURFACE_CONTENT: 552 case cc::DrawQuad::IO_SURFACE_CONTENT:
549 LogParam(*cc::IOSurfaceDrawQuad::MaterialCast(quad), l); 553 LogParam(*cc::IOSurfaceDrawQuad::MaterialCast(quad), l);
550 break; 554 break;
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 l->append(", "); 799 l->append(", ");
796 LogParam(p.size, l); 800 LogParam(p.size, l);
797 l->append(", "); 801 l->append(", ");
798 LogParam(p.damage_rect, l); 802 LogParam(p.damage_rect, l);
799 l->append(", "); 803 l->append(", ");
800 LogParam(p.bitmap_id, l); 804 LogParam(p.bitmap_id, l);
801 l->append(")"); 805 l->append(")");
802 } 806 }
803 807
804 } // namespace IPC 808 } // namespace IPC
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_unittest_delegated.cc ('k') | content/common/cc_messages_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698