| 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 <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| 11 #include "cc/output/compositor_frame.h" | 11 #include "cc/output/compositor_frame.h" |
| 12 #include "content/public/common/common_param_traits.h" | 12 #include "content/public/common/common_param_traits.h" |
| 13 #include "ipc/ipc_message.h" | 13 #include "ipc/ipc_message.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 #include "third_party/khronos/GLES2/gl2ext.h" | 15 #include "third_party/khronos/GLES2/gl2ext.h" |
| 16 #include "third_party/skia/include/effects/SkBlurImageFilter.h" | 16 #include "third_party/skia/include/effects/SkBlurImageFilter.h" |
| 17 | 17 |
| 18 #if defined(OS_POSIX) | 18 #if defined(OS_POSIX) |
| 19 #include "base/file_descriptor_posix.h" | 19 #include "base/file_descriptor_posix.h" |
| 20 #endif | 20 #endif |
| 21 | 21 |
| 22 using cc::CheckerboardDrawQuad; | |
| 23 using cc::DelegatedFrameData; | 22 using cc::DelegatedFrameData; |
| 24 using cc::DebugBorderDrawQuad; | 23 using cc::DebugBorderDrawQuad; |
| 25 using cc::DrawQuad; | 24 using cc::DrawQuad; |
| 26 using cc::FilterOperation; | 25 using cc::FilterOperation; |
| 27 using cc::FilterOperations; | 26 using cc::FilterOperations; |
| 28 using cc::IOSurfaceDrawQuad; | 27 using cc::IOSurfaceDrawQuad; |
| 29 using cc::PictureDrawQuad; | 28 using cc::PictureDrawQuad; |
| 30 using cc::RenderPass; | 29 using cc::RenderPass; |
| 31 using cc::RenderPassId; | 30 using cc::RenderPassId; |
| 32 using cc::RenderPassDrawQuad; | 31 using cc::RenderPassDrawQuad; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 ASSERT_NE(DrawQuad::INVALID, a->material); | 71 ASSERT_NE(DrawQuad::INVALID, a->material); |
| 73 ASSERT_EQ(a->material, b->material); | 72 ASSERT_EQ(a->material, b->material); |
| 74 EXPECT_EQ(a->rect.ToString(), b->rect.ToString()); | 73 EXPECT_EQ(a->rect.ToString(), b->rect.ToString()); |
| 75 EXPECT_EQ(a->opaque_rect.ToString(), b->opaque_rect.ToString()); | 74 EXPECT_EQ(a->opaque_rect.ToString(), b->opaque_rect.ToString()); |
| 76 EXPECT_EQ(a->visible_rect.ToString(), b->visible_rect.ToString()); | 75 EXPECT_EQ(a->visible_rect.ToString(), b->visible_rect.ToString()); |
| 77 EXPECT_EQ(a->needs_blending, b->needs_blending); | 76 EXPECT_EQ(a->needs_blending, b->needs_blending); |
| 78 | 77 |
| 79 Compare(a->shared_quad_state, b->shared_quad_state); | 78 Compare(a->shared_quad_state, b->shared_quad_state); |
| 80 | 79 |
| 81 switch (a->material) { | 80 switch (a->material) { |
| 82 case DrawQuad::CHECKERBOARD: | |
| 83 Compare(CheckerboardDrawQuad::MaterialCast(a), | |
| 84 CheckerboardDrawQuad::MaterialCast(b)); | |
| 85 break; | |
| 86 case DrawQuad::DEBUG_BORDER: | 81 case DrawQuad::DEBUG_BORDER: |
| 87 Compare(DebugBorderDrawQuad::MaterialCast(a), | 82 Compare(DebugBorderDrawQuad::MaterialCast(a), |
| 88 DebugBorderDrawQuad::MaterialCast(b)); | 83 DebugBorderDrawQuad::MaterialCast(b)); |
| 89 break; | 84 break; |
| 90 case DrawQuad::IO_SURFACE_CONTENT: | 85 case DrawQuad::IO_SURFACE_CONTENT: |
| 91 Compare(IOSurfaceDrawQuad::MaterialCast(a), | 86 Compare(IOSurfaceDrawQuad::MaterialCast(a), |
| 92 IOSurfaceDrawQuad::MaterialCast(b)); | 87 IOSurfaceDrawQuad::MaterialCast(b)); |
| 93 break; | 88 break; |
| 94 case DrawQuad::PICTURE_CONTENT: | 89 case DrawQuad::PICTURE_CONTENT: |
| 95 Compare(PictureDrawQuad::MaterialCast(a), | 90 Compare(PictureDrawQuad::MaterialCast(a), |
| (...skipping 25 matching lines...) Expand all Loading... |
| 121 break; | 116 break; |
| 122 case DrawQuad::YUV_VIDEO_CONTENT: | 117 case DrawQuad::YUV_VIDEO_CONTENT: |
| 123 Compare(YUVVideoDrawQuad::MaterialCast(a), | 118 Compare(YUVVideoDrawQuad::MaterialCast(a), |
| 124 YUVVideoDrawQuad::MaterialCast(b)); | 119 YUVVideoDrawQuad::MaterialCast(b)); |
| 125 break; | 120 break; |
| 126 case DrawQuad::INVALID: | 121 case DrawQuad::INVALID: |
| 127 break; | 122 break; |
| 128 } | 123 } |
| 129 } | 124 } |
| 130 | 125 |
| 131 void Compare(const CheckerboardDrawQuad* a, const CheckerboardDrawQuad* b) { | |
| 132 EXPECT_EQ(a->color, b->color); | |
| 133 EXPECT_EQ(a->scale, b->scale); | |
| 134 } | |
| 135 | |
| 136 void Compare(const DebugBorderDrawQuad* a, const DebugBorderDrawQuad* b) { | 126 void Compare(const DebugBorderDrawQuad* a, const DebugBorderDrawQuad* b) { |
| 137 EXPECT_EQ(a->color, b->color); | 127 EXPECT_EQ(a->color, b->color); |
| 138 EXPECT_EQ(a->width, b->width); | 128 EXPECT_EQ(a->width, b->width); |
| 139 } | 129 } |
| 140 | 130 |
| 141 void Compare(const IOSurfaceDrawQuad* a, const IOSurfaceDrawQuad* b) { | 131 void Compare(const IOSurfaceDrawQuad* a, const IOSurfaceDrawQuad* b) { |
| 142 EXPECT_EQ(a->io_surface_size.ToString(), b->io_surface_size.ToString()); | 132 EXPECT_EQ(a->io_surface_size.ToString(), b->io_surface_size.ToString()); |
| 143 EXPECT_EQ(a->io_surface_resource_id(), b->io_surface_resource_id()); | 133 EXPECT_EQ(a->io_surface_resource_id(), b->io_surface_resource_id()); |
| 144 EXPECT_EQ(a->orientation, b->orientation); | 134 EXPECT_EQ(a->orientation, b->orientation); |
| 145 } | 135 } |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 arbitrary_blend_mode1, arbitrary_context_id1); | 310 arbitrary_blend_mode1, arbitrary_context_id1); |
| 321 | 311 |
| 322 scoped_ptr<RenderPass> pass_cmp = RenderPass::Create(); | 312 scoped_ptr<RenderPass> pass_cmp = RenderPass::Create(); |
| 323 pass_cmp->SetAll(root_id, arbitrary_rect1, arbitrary_rect2, arbitrary_matrix1, | 313 pass_cmp->SetAll(root_id, arbitrary_rect1, arbitrary_rect2, arbitrary_matrix1, |
| 324 arbitrary_bool1); | 314 arbitrary_bool1); |
| 325 | 315 |
| 326 SharedQuadState* shared_state1_cmp = | 316 SharedQuadState* shared_state1_cmp = |
| 327 pass_cmp->CreateAndAppendSharedQuadState(); | 317 pass_cmp->CreateAndAppendSharedQuadState(); |
| 328 shared_state1_cmp->CopyFrom(shared_state1_in); | 318 shared_state1_cmp->CopyFrom(shared_state1_in); |
| 329 | 319 |
| 330 CheckerboardDrawQuad* checkerboard_in = | |
| 331 pass_in->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); | |
| 332 checkerboard_in->SetAll(shared_state1_in, arbitrary_rect1, | |
| 333 arbitrary_rect2_inside_rect1, | |
| 334 arbitrary_rect1_inside_rect1, arbitrary_bool1, | |
| 335 arbitrary_color, arbitrary_float1); | |
| 336 pass_cmp->CopyFromAndAppendDrawQuad(checkerboard_in, | |
| 337 checkerboard_in->shared_quad_state); | |
| 338 | |
| 339 DebugBorderDrawQuad* debugborder_in = | 320 DebugBorderDrawQuad* debugborder_in = |
| 340 pass_in->CreateAndAppendDrawQuad<DebugBorderDrawQuad>(); | 321 pass_in->CreateAndAppendDrawQuad<DebugBorderDrawQuad>(); |
| 341 debugborder_in->SetAll(shared_state1_in, | 322 debugborder_in->SetAll(shared_state1_in, |
| 342 arbitrary_rect3, | 323 arbitrary_rect3, |
| 343 arbitrary_rect1_inside_rect3, | 324 arbitrary_rect1_inside_rect3, |
| 344 arbitrary_rect2_inside_rect3, | 325 arbitrary_rect2_inside_rect3, |
| 345 arbitrary_bool1, | 326 arbitrary_bool1, |
| 346 arbitrary_color, | 327 arbitrary_color, |
| 347 arbitrary_int); | 328 arbitrary_int); |
| 348 pass_cmp->CopyFromAndAppendDrawQuad(debugborder_in, | 329 pass_cmp->CopyFromAndAppendDrawQuad(debugborder_in, |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 arbitrary_color_space); | 439 arbitrary_color_space); |
| 459 pass_cmp->CopyFromAndAppendDrawQuad(yuvvideo_in, | 440 pass_cmp->CopyFromAndAppendDrawQuad(yuvvideo_in, |
| 460 yuvvideo_in->shared_quad_state); | 441 yuvvideo_in->shared_quad_state); |
| 461 | 442 |
| 462 // Make sure the in and cmp RenderPasses match. | 443 // Make sure the in and cmp RenderPasses match. |
| 463 Compare(child_pass_cmp.get(), child_pass_in.get()); | 444 Compare(child_pass_cmp.get(), child_pass_in.get()); |
| 464 ASSERT_EQ(0u, child_pass_in->shared_quad_state_list.size()); | 445 ASSERT_EQ(0u, child_pass_in->shared_quad_state_list.size()); |
| 465 ASSERT_EQ(0u, child_pass_in->quad_list.size()); | 446 ASSERT_EQ(0u, child_pass_in->quad_list.size()); |
| 466 Compare(pass_cmp.get(), pass_in.get()); | 447 Compare(pass_cmp.get(), pass_in.get()); |
| 467 ASSERT_EQ(3u, pass_in->shared_quad_state_list.size()); | 448 ASSERT_EQ(3u, pass_in->shared_quad_state_list.size()); |
| 468 ASSERT_EQ(10u, pass_in->quad_list.size()); | 449 ASSERT_EQ(9u, pass_in->quad_list.size()); |
| 469 for (cc::SharedQuadStateList::ConstIterator | 450 for (cc::SharedQuadStateList::ConstIterator |
| 470 cmp_iterator = pass_cmp->shared_quad_state_list.begin(), | 451 cmp_iterator = pass_cmp->shared_quad_state_list.begin(), |
| 471 in_iterator = pass_in->shared_quad_state_list.begin(); | 452 in_iterator = pass_in->shared_quad_state_list.begin(); |
| 472 in_iterator != pass_in->shared_quad_state_list.end(); | 453 in_iterator != pass_in->shared_quad_state_list.end(); |
| 473 ++cmp_iterator, ++in_iterator) { | 454 ++cmp_iterator, ++in_iterator) { |
| 474 Compare(*cmp_iterator, *in_iterator); | 455 Compare(*cmp_iterator, *in_iterator); |
| 475 } | 456 } |
| 476 for (auto in_iter = pass_in->quad_list.cbegin(), | 457 for (auto in_iter = pass_in->quad_list.cbegin(), |
| 477 cmp_iter = pass_cmp->quad_list.cbegin(); | 458 cmp_iter = pass_cmp->quad_list.cbegin(); |
| 478 in_iter != pass_in->quad_list.cend(); | 459 in_iter != pass_in->quad_list.cend(); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 503 // Make sure the out and cmp RenderPasses match. | 484 // Make sure the out and cmp RenderPasses match. |
| 504 scoped_ptr<RenderPass> child_pass_out = | 485 scoped_ptr<RenderPass> child_pass_out = |
| 505 frame_out.render_pass_list.take(frame_out.render_pass_list.begin()); | 486 frame_out.render_pass_list.take(frame_out.render_pass_list.begin()); |
| 506 Compare(child_pass_cmp.get(), child_pass_out.get()); | 487 Compare(child_pass_cmp.get(), child_pass_out.get()); |
| 507 ASSERT_EQ(0u, child_pass_out->shared_quad_state_list.size()); | 488 ASSERT_EQ(0u, child_pass_out->shared_quad_state_list.size()); |
| 508 ASSERT_EQ(0u, child_pass_out->quad_list.size()); | 489 ASSERT_EQ(0u, child_pass_out->quad_list.size()); |
| 509 scoped_ptr<RenderPass> pass_out = | 490 scoped_ptr<RenderPass> pass_out = |
| 510 frame_out.render_pass_list.take(frame_out.render_pass_list.begin() + 1); | 491 frame_out.render_pass_list.take(frame_out.render_pass_list.begin() + 1); |
| 511 Compare(pass_cmp.get(), pass_out.get()); | 492 Compare(pass_cmp.get(), pass_out.get()); |
| 512 ASSERT_EQ(3u, pass_out->shared_quad_state_list.size()); | 493 ASSERT_EQ(3u, pass_out->shared_quad_state_list.size()); |
| 513 ASSERT_EQ(10u, pass_out->quad_list.size()); | 494 ASSERT_EQ(9u, pass_out->quad_list.size()); |
| 514 for (cc::SharedQuadStateList::ConstIterator | 495 for (cc::SharedQuadStateList::ConstIterator |
| 515 cmp_iterator = pass_cmp->shared_quad_state_list.begin(), | 496 cmp_iterator = pass_cmp->shared_quad_state_list.begin(), |
| 516 out_iterator = pass_out->shared_quad_state_list.begin(); | 497 out_iterator = pass_out->shared_quad_state_list.begin(); |
| 517 out_iterator != pass_out->shared_quad_state_list.end(); | 498 out_iterator != pass_out->shared_quad_state_list.end(); |
| 518 ++cmp_iterator, ++out_iterator) { | 499 ++cmp_iterator, ++out_iterator) { |
| 519 Compare(*cmp_iterator, *out_iterator); | 500 Compare(*cmp_iterator, *out_iterator); |
| 520 } | 501 } |
| 521 for (auto out_iter = pass_out->quad_list.cbegin(), | 502 for (auto out_iter = pass_out->quad_list.cbegin(), |
| 522 cmp_iter = pass_cmp->quad_list.cbegin(); | 503 cmp_iter = pass_cmp->quad_list.cbegin(); |
| 523 out_iter != pass_out->quad_list.cend(); | 504 out_iter != pass_out->quad_list.cend(); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 547 SharedQuadState* shared_state1_in = pass_in->CreateAndAppendSharedQuadState(); | 528 SharedQuadState* shared_state1_in = pass_in->CreateAndAppendSharedQuadState(); |
| 548 shared_state1_in->SetAll(gfx::Transform(), | 529 shared_state1_in->SetAll(gfx::Transform(), |
| 549 gfx::Size(1, 1), | 530 gfx::Size(1, 1), |
| 550 gfx::Rect(), | 531 gfx::Rect(), |
| 551 gfx::Rect(), | 532 gfx::Rect(), |
| 552 false, | 533 false, |
| 553 1.f, | 534 1.f, |
| 554 SkXfermode::kSrcOver_Mode, | 535 SkXfermode::kSrcOver_Mode, |
| 555 0); | 536 0); |
| 556 | 537 |
| 557 CheckerboardDrawQuad* quad1 = | 538 SolidColorDrawQuad* quad1 = |
| 558 pass_in->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); | 539 pass_in->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
| 559 quad1->SetAll(shared_state1_in, gfx::Rect(10, 10), gfx::Rect(10, 10), | 540 quad1->SetAll(shared_state1_in, gfx::Rect(10, 10), gfx::Rect(10, 10), |
| 560 gfx::Rect(10, 10), false, SK_ColorRED, 1.f); | 541 gfx::Rect(10, 10), false, SK_ColorRED, false); |
| 561 | 542 |
| 562 // The second and third SharedQuadStates are not used. | 543 // The second and third SharedQuadStates are not used. |
| 563 SharedQuadState* shared_state2_in = pass_in->CreateAndAppendSharedQuadState(); | 544 SharedQuadState* shared_state2_in = pass_in->CreateAndAppendSharedQuadState(); |
| 564 shared_state2_in->SetAll(gfx::Transform(), | 545 shared_state2_in->SetAll(gfx::Transform(), |
| 565 gfx::Size(2, 2), | 546 gfx::Size(2, 2), |
| 566 gfx::Rect(), | 547 gfx::Rect(), |
| 567 gfx::Rect(), | 548 gfx::Rect(), |
| 568 false, | 549 false, |
| 569 1.f, | 550 1.f, |
| 570 SkXfermode::kSrcOver_Mode, | 551 SkXfermode::kSrcOver_Mode, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 584 SharedQuadState* shared_state4_in = pass_in->CreateAndAppendSharedQuadState(); | 565 SharedQuadState* shared_state4_in = pass_in->CreateAndAppendSharedQuadState(); |
| 585 shared_state4_in->SetAll(gfx::Transform(), | 566 shared_state4_in->SetAll(gfx::Transform(), |
| 586 gfx::Size(4, 4), | 567 gfx::Size(4, 4), |
| 587 gfx::Rect(), | 568 gfx::Rect(), |
| 588 gfx::Rect(), | 569 gfx::Rect(), |
| 589 false, | 570 false, |
| 590 1.f, | 571 1.f, |
| 591 SkXfermode::kSrcOver_Mode, | 572 SkXfermode::kSrcOver_Mode, |
| 592 0); | 573 0); |
| 593 | 574 |
| 594 CheckerboardDrawQuad* quad2 = | 575 SolidColorDrawQuad* quad2 = |
| 595 pass_in->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); | 576 pass_in->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
| 596 quad2->SetAll(shared_state4_in, gfx::Rect(10, 10), gfx::Rect(10, 10), | 577 quad2->SetAll(shared_state4_in, gfx::Rect(10, 10), gfx::Rect(10, 10), |
| 597 gfx::Rect(10, 10), false, SK_ColorRED, 1.f); | 578 gfx::Rect(10, 10), false, SK_ColorRED, false); |
| 598 | 579 |
| 599 // The fifth is not used again. | 580 // The fifth is not used again. |
| 600 SharedQuadState* shared_state5_in = pass_in->CreateAndAppendSharedQuadState(); | 581 SharedQuadState* shared_state5_in = pass_in->CreateAndAppendSharedQuadState(); |
| 601 shared_state5_in->SetAll(gfx::Transform(), | 582 shared_state5_in->SetAll(gfx::Transform(), |
| 602 gfx::Size(5, 5), | 583 gfx::Size(5, 5), |
| 603 gfx::Rect(), | 584 gfx::Rect(), |
| 604 gfx::Rect(), | 585 gfx::Rect(), |
| 605 false, | 586 false, |
| 606 1.f, | 587 1.f, |
| 607 SkXfermode::kSrcOver_Mode, | 588 SkXfermode::kSrcOver_Mode, |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 755 SoftwareFrameData frame_out; | 736 SoftwareFrameData frame_out; |
| 756 base::PickleIterator iter(msg); | 737 base::PickleIterator iter(msg); |
| 757 EXPECT_EQ( | 738 EXPECT_EQ( |
| 758 expect_read, | 739 expect_read, |
| 759 IPC::ParamTraits<SoftwareFrameData>::Read(&msg, &iter, &frame_out)); | 740 IPC::ParamTraits<SoftwareFrameData>::Read(&msg, &iter, &frame_out)); |
| 760 } | 741 } |
| 761 } | 742 } |
| 762 | 743 |
| 763 } // namespace | 744 } // namespace |
| 764 } // namespace content | 745 } // namespace content |
| OLD | NEW |