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

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

Issue 551013002: Use Custome ListContainer to Allocate SharedQuadState (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@DQAllo
Patch Set: use C++ range based loop 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 (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 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 l->append(") "); 287 l->append(") ");
288 } 288 }
289 289
290 void ParamTraits<cc::RenderPass>::Write( 290 void ParamTraits<cc::RenderPass>::Write(
291 Message* m, const param_type& p) { 291 Message* m, const param_type& p) {
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());
298 WriteParam(m, p.quad_list.size()); 297 WriteParam(m, p.quad_list.size());
299 298
300 size_t shared_quad_state_index = 0; 299 cc::SharedQuadStateList::ConstIterator shared_quad_state_iter =
301 size_t last_shared_quad_state_index = kuint32max; 300 p.shared_quad_state_list.begin();
302 for (cc::QuadList::ConstIterator iter = p.quad_list.begin(); 301 cc::SharedQuadStateList::ConstIterator last_shared_quad_state_iter =
303 iter != p.quad_list.end(); 302 p.shared_quad_state_list.end();
304 ++iter) { 303 for (const auto& quad : p.quad_list) {
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() || quad.rect.Contains(quad.opaque_rect))
309 DCHECK(quad->opaque_rect.IsEmpty() || 308 << quad.material << " rect: " << quad.rect.ToString()
310 quad->rect.Contains(quad->opaque_rect)) 309 << " opaque_rect: " << quad.opaque_rect.ToString();
311 << quad->material << " rect: " << quad->rect.ToString()
312 << " opaque_rect: " << quad->opaque_rect.ToString();
313 310
314 switch (quad->material) { 311 switch (quad.material) {
315 case cc::DrawQuad::CHECKERBOARD: 312 case cc::DrawQuad::CHECKERBOARD:
316 WriteParam(m, *cc::CheckerboardDrawQuad::MaterialCast(quad)); 313 WriteParam(m, *cc::CheckerboardDrawQuad::MaterialCast(&quad));
317 break; 314 break;
318 case cc::DrawQuad::DEBUG_BORDER: 315 case cc::DrawQuad::DEBUG_BORDER:
319 WriteParam(m, *cc::DebugBorderDrawQuad::MaterialCast(quad)); 316 WriteParam(m, *cc::DebugBorderDrawQuad::MaterialCast(&quad));
320 break; 317 break;
321 case cc::DrawQuad::IO_SURFACE_CONTENT: 318 case cc::DrawQuad::IO_SURFACE_CONTENT:
322 WriteParam(m, *cc::IOSurfaceDrawQuad::MaterialCast(quad)); 319 WriteParam(m, *cc::IOSurfaceDrawQuad::MaterialCast(&quad));
323 break; 320 break;
324 case cc::DrawQuad::PICTURE_CONTENT: 321 case cc::DrawQuad::PICTURE_CONTENT:
325 NOTREACHED(); 322 NOTREACHED();
326 break; 323 break;
327 case cc::DrawQuad::TEXTURE_CONTENT: 324 case cc::DrawQuad::TEXTURE_CONTENT:
328 WriteParam(m, *cc::TextureDrawQuad::MaterialCast(quad)); 325 WriteParam(m, *cc::TextureDrawQuad::MaterialCast(&quad));
329 break; 326 break;
330 case cc::DrawQuad::RENDER_PASS: 327 case cc::DrawQuad::RENDER_PASS:
331 WriteParam(m, *cc::RenderPassDrawQuad::MaterialCast(quad)); 328 WriteParam(m, *cc::RenderPassDrawQuad::MaterialCast(&quad));
332 break; 329 break;
333 case cc::DrawQuad::SOLID_COLOR: 330 case cc::DrawQuad::SOLID_COLOR:
334 WriteParam(m, *cc::SolidColorDrawQuad::MaterialCast(quad)); 331 WriteParam(m, *cc::SolidColorDrawQuad::MaterialCast(&quad));
335 break; 332 break;
336 case cc::DrawQuad::SURFACE_CONTENT: 333 case cc::DrawQuad::SURFACE_CONTENT:
337 WriteParam(m, *cc::SurfaceDrawQuad::MaterialCast(quad)); 334 WriteParam(m, *cc::SurfaceDrawQuad::MaterialCast(&quad));
338 break; 335 break;
339 case cc::DrawQuad::TILED_CONTENT: 336 case cc::DrawQuad::TILED_CONTENT:
340 WriteParam(m, *cc::TileDrawQuad::MaterialCast(quad)); 337 WriteParam(m, *cc::TileDrawQuad::MaterialCast(&quad));
341 break; 338 break;
342 case cc::DrawQuad::STREAM_VIDEO_CONTENT: 339 case cc::DrawQuad::STREAM_VIDEO_CONTENT:
343 WriteParam(m, *cc::StreamVideoDrawQuad::MaterialCast(quad)); 340 WriteParam(m, *cc::StreamVideoDrawQuad::MaterialCast(&quad));
344 break; 341 break;
345 case cc::DrawQuad::YUV_VIDEO_CONTENT: 342 case cc::DrawQuad::YUV_VIDEO_CONTENT:
346 WriteParam(m, *cc::YUVVideoDrawQuad::MaterialCast(quad)); 343 WriteParam(m, *cc::YUVVideoDrawQuad::MaterialCast(&quad));
347 break; 344 break;
348 case cc::DrawQuad::INVALID: 345 case cc::DrawQuad::INVALID:
349 break; 346 break;
350 } 347 }
351 348
352 const cc::ScopedPtrVector<cc::SharedQuadState>& sqs_list =
353 p.shared_quad_state_list;
354
355 // This is an invalid index.
356 size_t bad_index = sqs_list.size();
357
358 // Null shared quad states should not occur. 349 // Null shared quad states should not occur.
359 DCHECK(quad->shared_quad_state); 350 DCHECK(quad.shared_quad_state);
360 if (!quad->shared_quad_state) {
361 WriteParam(m, bad_index);
362 continue;
363 }
364 351
365 // SharedQuadStates should appear in the order they are used by DrawQuads. 352 // SharedQuadStates should appear in the order they are used by DrawQuads.
366 // Find the SharedQuadState for this DrawQuad. 353 // Find the SharedQuadState for this DrawQuad.
367 while (shared_quad_state_index < sqs_list.size() && 354 while (shared_quad_state_iter != p.shared_quad_state_list.end() &&
368 quad->shared_quad_state != sqs_list[shared_quad_state_index]) 355 quad.shared_quad_state != &*shared_quad_state_iter)
369 ++shared_quad_state_index; 356 ++shared_quad_state_iter;
370 357
371 DCHECK_LT(shared_quad_state_index, sqs_list.size()); 358 DCHECK(shared_quad_state_iter != p.shared_quad_state_list.end());
372 if (shared_quad_state_index >= sqs_list.size()) {
373 WriteParam(m, bad_index);
374 continue;
375 }
376 359
377 WriteParam(m, shared_quad_state_index); 360 if (shared_quad_state_iter != last_shared_quad_state_iter) {
378 if (shared_quad_state_index != last_shared_quad_state_index) { 361 WriteParam(m, true);
379 WriteParam(m, *sqs_list[shared_quad_state_index]); 362 WriteParam(m, *shared_quad_state_iter);
380 last_shared_quad_state_index = shared_quad_state_index; 363 last_shared_quad_state_iter = shared_quad_state_iter;
364 } else {
365 WriteParam(m, false);
381 } 366 }
382 } 367 }
383 } 368 }
384 369
385 static size_t ReserveSizeForRenderPassWrite(const cc::RenderPass& p) { 370 static size_t ReserveSizeForRenderPassWrite(const cc::RenderPass& p) {
386 size_t to_reserve = sizeof(cc::RenderPass); 371 size_t to_reserve = sizeof(cc::RenderPass);
387 372
373 // Whether the quad points to a new shared quad state for each quad.
374 to_reserve += p.quad_list.size() * sizeof(bool);
375
376 // Shared quad state is only written when a quad contains a shared quad state
377 // that has not been written.
388 to_reserve += p.shared_quad_state_list.size() * sizeof(cc::SharedQuadState); 378 to_reserve += p.shared_quad_state_list.size() * sizeof(cc::SharedQuadState);
389 379
390 // The shared_quad_state_index for each quad.
391 to_reserve += p.quad_list.size() * sizeof(size_t);
392
393 // The largest quad type, verified by a unit test. 380 // The largest quad type, verified by a unit test.
394 to_reserve += p.quad_list.size() * sizeof(cc::kLargestDrawQuad); 381 to_reserve += p.quad_list.size() * sizeof(cc::kLargestDrawQuad);
395 return to_reserve; 382 return to_reserve;
396 } 383 }
397 384
398 template <typename QuadType> 385 template <typename QuadType>
399 static cc::DrawQuad* ReadDrawQuad(const Message* m, 386 static cc::DrawQuad* ReadDrawQuad(const Message* m,
400 PickleIterator* iter, 387 PickleIterator* iter,
401 cc::RenderPass* render_pass) { 388 cc::RenderPass* render_pass) {
402 QuadType* quad = render_pass->CreateAndAppendDrawQuad<QuadType>(); 389 QuadType* quad = render_pass->CreateAndAppendDrawQuad<QuadType>();
403 if (!ReadParam(m, iter, quad)) 390 if (!ReadParam(m, iter, quad))
404 return NULL; 391 return NULL;
405 return quad; 392 return quad;
406 } 393 }
407 394
408 bool ParamTraits<cc::RenderPass>::Read( 395 bool ParamTraits<cc::RenderPass>::Read(
409 const Message* m, PickleIterator* iter, param_type* p) { 396 const Message* m, PickleIterator* iter, param_type* p) {
410 cc::RenderPassId id(-1, -1); 397 cc::RenderPassId id(-1, -1);
411 gfx::Rect output_rect; 398 gfx::Rect output_rect;
412 gfx::Rect damage_rect; 399 gfx::Rect damage_rect;
413 gfx::Transform transform_to_root_target; 400 gfx::Transform transform_to_root_target;
414 bool has_transparent_background; 401 bool has_transparent_background;
415 size_t shared_quad_state_list_size;
416 size_t quad_list_size; 402 size_t quad_list_size;
417 403
418 if (!ReadParam(m, iter, &id) || 404 if (!ReadParam(m, iter, &id) ||
419 !ReadParam(m, iter, &output_rect) || 405 !ReadParam(m, iter, &output_rect) ||
420 !ReadParam(m, iter, &damage_rect) || 406 !ReadParam(m, iter, &damage_rect) ||
421 !ReadParam(m, iter, &transform_to_root_target) || 407 !ReadParam(m, iter, &transform_to_root_target) ||
422 !ReadParam(m, iter, &has_transparent_background) || 408 !ReadParam(m, iter, &has_transparent_background) ||
423 !ReadParam(m, iter, &shared_quad_state_list_size) ||
424 !ReadParam(m, iter, &quad_list_size)) 409 !ReadParam(m, iter, &quad_list_size))
425 return false; 410 return false;
426 411
427 p->SetAll(id, 412 p->SetAll(id,
428 output_rect, 413 output_rect,
429 damage_rect, 414 damage_rect,
430 transform_to_root_target, 415 transform_to_root_target,
431 has_transparent_background); 416 has_transparent_background);
432 417
433 size_t last_shared_quad_state_index = kuint32max;
434 for (size_t i = 0; i < quad_list_size; ++i) { 418 for (size_t i = 0; i < quad_list_size; ++i) {
435 cc::DrawQuad::Material material; 419 cc::DrawQuad::Material material;
436 PickleIterator temp_iter = *iter; 420 PickleIterator temp_iter = *iter;
437 if (!ReadParam(m, &temp_iter, &material)) 421 if (!ReadParam(m, &temp_iter, &material))
438 return false; 422 return false;
439 423
440 cc::DrawQuad* draw_quad = NULL; 424 cc::DrawQuad* draw_quad = NULL;
441 switch (material) { 425 switch (material) {
442 case cc::DrawQuad::CHECKERBOARD: 426 case cc::DrawQuad::CHECKERBOARD:
443 draw_quad = ReadDrawQuad<cc::CheckerboardDrawQuad>(m, iter, p); 427 draw_quad = ReadDrawQuad<cc::CheckerboardDrawQuad>(m, iter, p);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 return false; 468 return false;
485 } 469 }
486 if (!draw_quad->opaque_rect.IsEmpty() && 470 if (!draw_quad->opaque_rect.IsEmpty() &&
487 !draw_quad->rect.Contains(draw_quad->opaque_rect)) { 471 !draw_quad->rect.Contains(draw_quad->opaque_rect)) {
488 LOG(ERROR) << "Quad with invalid opaque rect " << draw_quad->material 472 LOG(ERROR) << "Quad with invalid opaque rect " << draw_quad->material
489 << " rect: " << draw_quad->rect.ToString() 473 << " rect: " << draw_quad->rect.ToString()
490 << " opaque_rect: " << draw_quad->opaque_rect.ToString(); 474 << " opaque_rect: " << draw_quad->opaque_rect.ToString();
491 return false; 475 return false;
492 } 476 }
493 477
494 size_t shared_quad_state_index; 478 bool has_new_shared_quad_state;
495 if (!ReadParam(m, iter, &shared_quad_state_index)) 479 if (!ReadParam(m, iter, &has_new_shared_quad_state))
496 return false;
497 if (shared_quad_state_index >= shared_quad_state_list_size)
498 return false;
499 // SharedQuadState indexes should be in ascending order.
500 if (last_shared_quad_state_index != kuint32max &&
501 shared_quad_state_index < last_shared_quad_state_index)
502 return false; 480 return false;
503 481
504 // If the quad has a new shared quad state, read it in. 482 // If the quad has a new shared quad state, read it in.
505 if (last_shared_quad_state_index != shared_quad_state_index) { 483 if (has_new_shared_quad_state) {
506 cc::SharedQuadState* state = p->CreateAndAppendSharedQuadState(); 484 cc::SharedQuadState* state = p->CreateAndAppendSharedQuadState();
507 if (!ReadParam(m, iter, state)) 485 if (!ReadParam(m, iter, state))
508 return false; 486 return false;
509 last_shared_quad_state_index = shared_quad_state_index;
510 } 487 }
511 488
512 draw_quad->shared_quad_state = p->shared_quad_state_list.back(); 489 draw_quad->shared_quad_state = p->shared_quad_state_list.back();
513 } 490 }
514 491
515 return true; 492 return true;
516 } 493 }
517 494
518 void ParamTraits<cc::RenderPass>::Log( 495 void ParamTraits<cc::RenderPass>::Log(
519 const param_type& p, std::string* l) { 496 const param_type& p, std::string* l) {
520 l->append("RenderPass(("); 497 l->append("RenderPass((");
521 LogParam(p.id, l); 498 LogParam(p.id, l);
522 l->append("), "); 499 l->append("), ");
523 LogParam(p.output_rect, l); 500 LogParam(p.output_rect, l);
524 l->append(", "); 501 l->append(", ");
525 LogParam(p.damage_rect, l); 502 LogParam(p.damage_rect, l);
526 l->append(", "); 503 l->append(", ");
527 LogParam(p.transform_to_root_target, l); 504 LogParam(p.transform_to_root_target, l);
528 l->append(", "); 505 l->append(", ");
529 LogParam(p.has_transparent_background, l); 506 LogParam(p.has_transparent_background, l);
530 l->append(", "); 507 l->append(", ");
531 508
532 l->append("["); 509 l->append("[");
533 for (size_t i = 0; i < p.shared_quad_state_list.size(); ++i) { 510 for (const auto& shared_quad_state : p.shared_quad_state_list) {
534 if (i) 511 if (&shared_quad_state != p.shared_quad_state_list.front())
535 l->append(", "); 512 l->append(", ");
536 LogParam(*p.shared_quad_state_list[i], l); 513 LogParam(shared_quad_state, l);
537 } 514 }
538 l->append("], ["); 515 l->append("], [");
539 for (cc::QuadList::ConstIterator iter = p.quad_list.begin(); 516 for (const auto& quad : p.quad_list) {
540 iter != p.quad_list.end(); 517 if (&quad != p.quad_list.front())
541 ++iter) {
542 if (iter != p.quad_list.begin())
543 l->append(", "); 518 l->append(", ");
544 const cc::DrawQuad* quad = &*iter; 519 switch (quad.material) {
545 switch (quad->material) {
546 case cc::DrawQuad::CHECKERBOARD: 520 case cc::DrawQuad::CHECKERBOARD:
547 LogParam(*cc::CheckerboardDrawQuad::MaterialCast(quad), l); 521 LogParam(*cc::CheckerboardDrawQuad::MaterialCast(&quad), l);
548 break; 522 break;
549 case cc::DrawQuad::DEBUG_BORDER: 523 case cc::DrawQuad::DEBUG_BORDER:
550 LogParam(*cc::DebugBorderDrawQuad::MaterialCast(quad), l); 524 LogParam(*cc::DebugBorderDrawQuad::MaterialCast(&quad), l);
551 break; 525 break;
552 case cc::DrawQuad::IO_SURFACE_CONTENT: 526 case cc::DrawQuad::IO_SURFACE_CONTENT:
553 LogParam(*cc::IOSurfaceDrawQuad::MaterialCast(quad), l); 527 LogParam(*cc::IOSurfaceDrawQuad::MaterialCast(&quad), l);
554 break; 528 break;
555 case cc::DrawQuad::PICTURE_CONTENT: 529 case cc::DrawQuad::PICTURE_CONTENT:
556 NOTREACHED(); 530 NOTREACHED();
557 break; 531 break;
558 case cc::DrawQuad::TEXTURE_CONTENT: 532 case cc::DrawQuad::TEXTURE_CONTENT:
559 LogParam(*cc::TextureDrawQuad::MaterialCast(quad), l); 533 LogParam(*cc::TextureDrawQuad::MaterialCast(&quad), l);
560 break; 534 break;
561 case cc::DrawQuad::RENDER_PASS: 535 case cc::DrawQuad::RENDER_PASS:
562 LogParam(*cc::RenderPassDrawQuad::MaterialCast(quad), l); 536 LogParam(*cc::RenderPassDrawQuad::MaterialCast(&quad), l);
563 break; 537 break;
564 case cc::DrawQuad::SOLID_COLOR: 538 case cc::DrawQuad::SOLID_COLOR:
565 LogParam(*cc::SolidColorDrawQuad::MaterialCast(quad), l); 539 LogParam(*cc::SolidColorDrawQuad::MaterialCast(&quad), l);
566 break; 540 break;
567 case cc::DrawQuad::SURFACE_CONTENT: 541 case cc::DrawQuad::SURFACE_CONTENT:
568 LogParam(*cc::SurfaceDrawQuad::MaterialCast(quad), l); 542 LogParam(*cc::SurfaceDrawQuad::MaterialCast(&quad), l);
569 break; 543 break;
570 case cc::DrawQuad::TILED_CONTENT: 544 case cc::DrawQuad::TILED_CONTENT:
571 LogParam(*cc::TileDrawQuad::MaterialCast(quad), l); 545 LogParam(*cc::TileDrawQuad::MaterialCast(&quad), l);
572 break; 546 break;
573 case cc::DrawQuad::STREAM_VIDEO_CONTENT: 547 case cc::DrawQuad::STREAM_VIDEO_CONTENT:
574 LogParam(*cc::StreamVideoDrawQuad::MaterialCast(quad), l); 548 LogParam(*cc::StreamVideoDrawQuad::MaterialCast(&quad), l);
575 break; 549 break;
576 case cc::DrawQuad::YUV_VIDEO_CONTENT: 550 case cc::DrawQuad::YUV_VIDEO_CONTENT:
577 LogParam(*cc::YUVVideoDrawQuad::MaterialCast(quad), l); 551 LogParam(*cc::YUVVideoDrawQuad::MaterialCast(&quad), l);
578 break; 552 break;
579 case cc::DrawQuad::INVALID: 553 case cc::DrawQuad::INVALID:
580 break; 554 break;
581 } 555 }
582 } 556 }
583 l->append("])"); 557 l->append("])");
584 } 558 }
585 559
586 namespace { 560 namespace {
587 enum CompositorFrameType { 561 enum CompositorFrameType {
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 } 686 }
713 687
714 void ParamTraits<cc::DelegatedFrameData>::Write(Message* m, 688 void ParamTraits<cc::DelegatedFrameData>::Write(Message* m,
715 const param_type& p) { 689 const param_type& p) {
716 DCHECK_NE(0u, p.render_pass_list.size()); 690 DCHECK_NE(0u, p.render_pass_list.size());
717 691
718 size_t to_reserve = sizeof(p.device_scale_factor); 692 size_t to_reserve = sizeof(p.device_scale_factor);
719 to_reserve += p.resource_list.size() * sizeof(cc::TransferableResource); 693 to_reserve += p.resource_list.size() * sizeof(cc::TransferableResource);
720 for (size_t i = 0; i < p.render_pass_list.size(); ++i) { 694 for (size_t i = 0; i < p.render_pass_list.size(); ++i) {
721 const cc::RenderPass* pass = p.render_pass_list[i]; 695 const cc::RenderPass* pass = p.render_pass_list[i];
696 to_reserve += sizeof(size_t) * 2;
722 to_reserve += ReserveSizeForRenderPassWrite(*pass); 697 to_reserve += ReserveSizeForRenderPassWrite(*pass);
723 } 698 }
724 m->Reserve(to_reserve); 699 m->Reserve(to_reserve);
725 700
726 WriteParam(m, p.device_scale_factor); 701 WriteParam(m, p.device_scale_factor);
727 WriteParam(m, p.resource_list); 702 WriteParam(m, p.resource_list);
728 WriteParam(m, p.render_pass_list.size()); 703 WriteParam(m, p.render_pass_list.size());
729 for (size_t i = 0; i < p.render_pass_list.size(); ++i) 704 for (size_t i = 0; i < p.render_pass_list.size(); ++i) {
705 WriteParam(m, p.render_pass_list[i]->quad_list.size());
706 WriteParam(m, p.render_pass_list[i]->shared_quad_state_list.size());
730 WriteParam(m, *p.render_pass_list[i]); 707 WriteParam(m, *p.render_pass_list[i]);
708 }
731 } 709 }
732 710
733 bool ParamTraits<cc::DelegatedFrameData>::Read(const Message* m, 711 bool ParamTraits<cc::DelegatedFrameData>::Read(const Message* m,
734 PickleIterator* iter, 712 PickleIterator* iter,
735 param_type* p) { 713 param_type* p) {
736 if (!ReadParam(m, iter, &p->device_scale_factor)) 714 if (!ReadParam(m, iter, &p->device_scale_factor))
737 return false; 715 return false;
738 716
739 const static size_t kMaxRenderPasses = 10000; 717 const static size_t kMaxRenderPasses = 10000;
718 const static size_t kMaxSharedQuadStateListSize = 100000;
719 const static size_t kMaxQuadListSize = 100000;
danakj 2014/10/02 15:32:48 actually i wonder if this is too few for webview,
danakj 2014/10/03 15:39:49 Missed this one?
740 720
741 size_t num_render_passes; 721 size_t num_render_passes;
742 if (!ReadParam(m, iter, &p->resource_list) || 722 if (!ReadParam(m, iter, &p->resource_list) ||
743 !ReadParam(m, iter, &num_render_passes) || 723 !ReadParam(m, iter, &num_render_passes) ||
744 num_render_passes > kMaxRenderPasses || num_render_passes == 0) 724 num_render_passes > kMaxRenderPasses || num_render_passes == 0)
745 return false; 725 return false;
746 for (size_t i = 0; i < num_render_passes; ++i) { 726 for (size_t i = 0; i < num_render_passes; ++i) {
747 scoped_ptr<cc::RenderPass> render_pass = cc::RenderPass::Create(); 727 size_t quad_list_size;
728 size_t shared_quad_state_list_size;
729 if (!ReadParam(m, iter, &quad_list_size) ||
730 !ReadParam(m, iter, &shared_quad_state_list_size) ||
731 quad_list_size > kMaxQuadListSize ||
732 shared_quad_state_list_size > kMaxSharedQuadStateListSize)
733 return false;
734 scoped_ptr<cc::RenderPass> render_pass =
735 cc::RenderPass::Create(shared_quad_state_list_size, quad_list_size);
748 if (!ReadParam(m, iter, render_pass.get())) 736 if (!ReadParam(m, iter, render_pass.get()))
749 return false; 737 return false;
750 p->render_pass_list.push_back(render_pass.Pass()); 738 p->render_pass_list.push_back(render_pass.Pass());
751 } 739 }
752 return true; 740 return true;
753 } 741 }
754 742
755 void ParamTraits<cc::DelegatedFrameData>::Log(const param_type& p, 743 void ParamTraits<cc::DelegatedFrameData>::Log(const param_type& p,
756 std::string* l) { 744 std::string* l) {
757 l->append("DelegatedFrameData("); 745 l->append("DelegatedFrameData(");
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 l->append(", "); 787 l->append(", ");
800 LogParam(p.size, l); 788 LogParam(p.size, l);
801 l->append(", "); 789 l->append(", ");
802 LogParam(p.damage_rect, l); 790 LogParam(p.damage_rect, l);
803 l->append(", "); 791 l->append(", ");
804 LogParam(p.bitmap_id, l); 792 LogParam(p.bitmap_id, l);
805 l->append(")"); 793 l->append(")");
806 } 794 }
807 795
808 } // namespace IPC 796 } // namespace IPC
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698