| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |