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 "ipc/ipc_message.h" | 12 #include "ipc/ipc_message.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
14 #include "third_party/khronos/GLES2/gl2ext.h" | 14 #include "third_party/khronos/GLES2/gl2ext.h" |
15 #include "third_party/skia/include/effects/SkBlurImageFilter.h" | 15 #include "third_party/skia/include/effects/SkBlurImageFilter.h" |
16 | 16 |
17 using cc::CheckerboardDrawQuad; | 17 using cc::CheckerboardDrawQuad; |
18 using cc::DelegatedFrameData; | 18 using cc::DelegatedFrameData; |
19 using cc::DebugBorderDrawQuad; | 19 using cc::DebugBorderDrawQuad; |
20 using cc::DrawQuad; | 20 using cc::DrawQuad; |
21 using cc::FilterOperation; | 21 using cc::FilterOperation; |
22 using cc::FilterOperations; | 22 using cc::FilterOperations; |
23 using cc::IOSurfaceDrawQuad; | 23 using cc::IOSurfaceDrawQuad; |
24 using cc::PictureDrawQuad; | 24 using cc::PictureDrawQuad; |
25 using cc::RenderPass; | 25 using cc::RenderPass; |
26 using cc::RenderPassDrawQuad; | 26 using cc::RenderPassDrawQuad; |
27 using cc::ResourceProvider; | 27 using cc::ResourceProvider; |
28 using cc::SharedQuadState; | 28 using cc::SharedQuadState; |
29 using cc::SolidColorDrawQuad; | 29 using cc::SolidColorDrawQuad; |
| 30 using cc::SurfaceDrawQuad; |
30 using cc::TextureDrawQuad; | 31 using cc::TextureDrawQuad; |
31 using cc::TileDrawQuad; | 32 using cc::TileDrawQuad; |
32 using cc::TransferableResource; | 33 using cc::TransferableResource; |
33 using cc::StreamVideoDrawQuad; | 34 using cc::StreamVideoDrawQuad; |
34 using cc::VideoLayerImpl; | 35 using cc::VideoLayerImpl; |
35 using cc::YUVVideoDrawQuad; | 36 using cc::YUVVideoDrawQuad; |
36 using gfx::Transform; | 37 using gfx::Transform; |
37 | 38 |
38 namespace content { | 39 namespace content { |
39 namespace { | 40 namespace { |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 TileDrawQuad::MaterialCast(b)); | 99 TileDrawQuad::MaterialCast(b)); |
99 break; | 100 break; |
100 case DrawQuad::SOLID_COLOR: | 101 case DrawQuad::SOLID_COLOR: |
101 Compare(SolidColorDrawQuad::MaterialCast(a), | 102 Compare(SolidColorDrawQuad::MaterialCast(a), |
102 SolidColorDrawQuad::MaterialCast(b)); | 103 SolidColorDrawQuad::MaterialCast(b)); |
103 break; | 104 break; |
104 case DrawQuad::STREAM_VIDEO_CONTENT: | 105 case DrawQuad::STREAM_VIDEO_CONTENT: |
105 Compare(StreamVideoDrawQuad::MaterialCast(a), | 106 Compare(StreamVideoDrawQuad::MaterialCast(a), |
106 StreamVideoDrawQuad::MaterialCast(b)); | 107 StreamVideoDrawQuad::MaterialCast(b)); |
107 break; | 108 break; |
| 109 case DrawQuad::SURFACE_CONTENT: |
| 110 Compare(SurfaceDrawQuad::MaterialCast(a), |
| 111 SurfaceDrawQuad::MaterialCast(b)); |
| 112 break; |
108 case DrawQuad::YUV_VIDEO_CONTENT: | 113 case DrawQuad::YUV_VIDEO_CONTENT: |
109 Compare(YUVVideoDrawQuad::MaterialCast(a), | 114 Compare(YUVVideoDrawQuad::MaterialCast(a), |
110 YUVVideoDrawQuad::MaterialCast(b)); | 115 YUVVideoDrawQuad::MaterialCast(b)); |
111 break; | 116 break; |
112 case DrawQuad::INVALID: | 117 case DrawQuad::INVALID: |
113 break; | 118 break; |
114 } | 119 } |
115 } | 120 } |
116 | 121 |
117 void Compare(const CheckerboardDrawQuad* a, const CheckerboardDrawQuad* b) { | 122 void Compare(const CheckerboardDrawQuad* a, const CheckerboardDrawQuad* b) { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 void Compare(const SolidColorDrawQuad* a, const SolidColorDrawQuad* b) { | 157 void Compare(const SolidColorDrawQuad* a, const SolidColorDrawQuad* b) { |
153 EXPECT_EQ(a->color, b->color); | 158 EXPECT_EQ(a->color, b->color); |
154 EXPECT_EQ(a->force_anti_aliasing_off, b->force_anti_aliasing_off); | 159 EXPECT_EQ(a->force_anti_aliasing_off, b->force_anti_aliasing_off); |
155 } | 160 } |
156 | 161 |
157 void Compare(const StreamVideoDrawQuad* a, const StreamVideoDrawQuad* b) { | 162 void Compare(const StreamVideoDrawQuad* a, const StreamVideoDrawQuad* b) { |
158 EXPECT_EQ(a->resource_id, b->resource_id); | 163 EXPECT_EQ(a->resource_id, b->resource_id); |
159 EXPECT_EQ(a->matrix, b->matrix); | 164 EXPECT_EQ(a->matrix, b->matrix); |
160 } | 165 } |
161 | 166 |
| 167 void Compare(const SurfaceDrawQuad* a, const SurfaceDrawQuad* b) { |
| 168 EXPECT_EQ(a->surface_id, b->surface_id); |
| 169 } |
| 170 |
162 void Compare(const TextureDrawQuad* a, const TextureDrawQuad* b) { | 171 void Compare(const TextureDrawQuad* a, const TextureDrawQuad* b) { |
163 EXPECT_EQ(a->resource_id, b->resource_id); | 172 EXPECT_EQ(a->resource_id, b->resource_id); |
164 EXPECT_EQ(a->premultiplied_alpha, b->premultiplied_alpha); | 173 EXPECT_EQ(a->premultiplied_alpha, b->premultiplied_alpha); |
165 EXPECT_EQ(a->uv_top_left, b->uv_top_left); | 174 EXPECT_EQ(a->uv_top_left, b->uv_top_left); |
166 EXPECT_EQ(a->uv_bottom_right, b->uv_bottom_right); | 175 EXPECT_EQ(a->uv_bottom_right, b->uv_bottom_right); |
167 EXPECT_EQ(a->background_color, b->background_color); | 176 EXPECT_EQ(a->background_color, b->background_color); |
168 EXPECT_EQ(a->vertex_opacity[0], b->vertex_opacity[0]); | 177 EXPECT_EQ(a->vertex_opacity[0], b->vertex_opacity[0]); |
169 EXPECT_EQ(a->vertex_opacity[1], b->vertex_opacity[1]); | 178 EXPECT_EQ(a->vertex_opacity[1], b->vertex_opacity[1]); |
170 EXPECT_EQ(a->vertex_opacity[2], b->vertex_opacity[2]); | 179 EXPECT_EQ(a->vertex_opacity[2], b->vertex_opacity[2]); |
171 EXPECT_EQ(a->vertex_opacity[3], b->vertex_opacity[3]); | 180 EXPECT_EQ(a->vertex_opacity[3], b->vertex_opacity[3]); |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
355 streamvideo_in->SetAll(shared_state3_in.get(), | 364 streamvideo_in->SetAll(shared_state3_in.get(), |
356 arbitrary_rect2, | 365 arbitrary_rect2, |
357 arbitrary_rect2_inside_rect2, | 366 arbitrary_rect2_inside_rect2, |
358 arbitrary_rect1_inside_rect2, | 367 arbitrary_rect1_inside_rect2, |
359 arbitrary_bool1, | 368 arbitrary_bool1, |
360 arbitrary_resourceid2, | 369 arbitrary_resourceid2, |
361 arbitrary_matrix); | 370 arbitrary_matrix); |
362 scoped_ptr<DrawQuad> streamvideo_cmp = streamvideo_in->Copy( | 371 scoped_ptr<DrawQuad> streamvideo_cmp = streamvideo_in->Copy( |
363 streamvideo_in->shared_quad_state); | 372 streamvideo_in->shared_quad_state); |
364 | 373 |
| 374 int arbitrary_surface_id = 3; |
| 375 scoped_ptr<SurfaceDrawQuad> surface_in = SurfaceDrawQuad::Create(); |
| 376 surface_in->SetAll(shared_state3_in.get(), |
| 377 arbitrary_rect2, |
| 378 arbitrary_rect2_inside_rect2, |
| 379 arbitrary_rect1_inside_rect2, |
| 380 arbitrary_bool1, |
| 381 arbitrary_surface_id); |
| 382 scoped_ptr<DrawQuad> surface_cmp = surface_in->Copy( |
| 383 surface_in->shared_quad_state); |
| 384 |
365 scoped_ptr<TextureDrawQuad> texture_in = TextureDrawQuad::Create(); | 385 scoped_ptr<TextureDrawQuad> texture_in = TextureDrawQuad::Create(); |
366 texture_in->SetAll(shared_state3_in.get(), | 386 texture_in->SetAll(shared_state3_in.get(), |
367 arbitrary_rect2, | 387 arbitrary_rect2, |
368 arbitrary_rect2_inside_rect2, | 388 arbitrary_rect2_inside_rect2, |
369 arbitrary_rect1_inside_rect2, | 389 arbitrary_rect1_inside_rect2, |
370 arbitrary_bool1, | 390 arbitrary_bool1, |
371 arbitrary_resourceid1, | 391 arbitrary_resourceid1, |
372 arbitrary_bool2, | 392 arbitrary_bool2, |
373 arbitrary_pointf1, | 393 arbitrary_pointf1, |
374 arbitrary_pointf2, | 394 arbitrary_pointf2, |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 | 435 |
416 pass_in->shared_quad_state_list.push_back(shared_state1_in.Pass()); | 436 pass_in->shared_quad_state_list.push_back(shared_state1_in.Pass()); |
417 pass_in->quad_list.push_back(checkerboard_in.PassAs<DrawQuad>()); | 437 pass_in->quad_list.push_back(checkerboard_in.PassAs<DrawQuad>()); |
418 pass_in->quad_list.push_back(debugborder_in.PassAs<DrawQuad>()); | 438 pass_in->quad_list.push_back(debugborder_in.PassAs<DrawQuad>()); |
419 pass_in->quad_list.push_back(iosurface_in.PassAs<DrawQuad>()); | 439 pass_in->quad_list.push_back(iosurface_in.PassAs<DrawQuad>()); |
420 pass_in->quad_list.push_back(renderpass_in.PassAs<DrawQuad>()); | 440 pass_in->quad_list.push_back(renderpass_in.PassAs<DrawQuad>()); |
421 pass_in->shared_quad_state_list.push_back(shared_state2_in.Pass()); | 441 pass_in->shared_quad_state_list.push_back(shared_state2_in.Pass()); |
422 pass_in->shared_quad_state_list.push_back(shared_state3_in.Pass()); | 442 pass_in->shared_quad_state_list.push_back(shared_state3_in.Pass()); |
423 pass_in->quad_list.push_back(solidcolor_in.PassAs<DrawQuad>()); | 443 pass_in->quad_list.push_back(solidcolor_in.PassAs<DrawQuad>()); |
424 pass_in->quad_list.push_back(streamvideo_in.PassAs<DrawQuad>()); | 444 pass_in->quad_list.push_back(streamvideo_in.PassAs<DrawQuad>()); |
| 445 pass_in->quad_list.push_back(surface_in.PassAs<DrawQuad>()); |
425 pass_in->quad_list.push_back(texture_in.PassAs<DrawQuad>()); | 446 pass_in->quad_list.push_back(texture_in.PassAs<DrawQuad>()); |
426 pass_in->quad_list.push_back(tile_in.PassAs<DrawQuad>()); | 447 pass_in->quad_list.push_back(tile_in.PassAs<DrawQuad>()); |
427 pass_in->quad_list.push_back(yuvvideo_in.PassAs<DrawQuad>()); | 448 pass_in->quad_list.push_back(yuvvideo_in.PassAs<DrawQuad>()); |
428 | 449 |
429 scoped_ptr<RenderPass> pass_cmp = RenderPass::Create(); | 450 scoped_ptr<RenderPass> pass_cmp = RenderPass::Create(); |
430 pass_cmp->SetAll(arbitrary_id, | 451 pass_cmp->SetAll(arbitrary_id, |
431 arbitrary_rect1, | 452 arbitrary_rect1, |
432 arbitrary_rectf1, | 453 arbitrary_rectf1, |
433 arbitrary_matrix, | 454 arbitrary_matrix, |
434 arbitrary_bool1); | 455 arbitrary_bool1); |
435 | 456 |
436 pass_cmp->shared_quad_state_list.push_back(shared_state1_cmp.Pass()); | 457 pass_cmp->shared_quad_state_list.push_back(shared_state1_cmp.Pass()); |
437 pass_cmp->quad_list.push_back(checkerboard_cmp.PassAs<DrawQuad>()); | 458 pass_cmp->quad_list.push_back(checkerboard_cmp.PassAs<DrawQuad>()); |
438 pass_cmp->quad_list.push_back(debugborder_cmp.PassAs<DrawQuad>()); | 459 pass_cmp->quad_list.push_back(debugborder_cmp.PassAs<DrawQuad>()); |
439 pass_cmp->quad_list.push_back(iosurface_cmp.PassAs<DrawQuad>()); | 460 pass_cmp->quad_list.push_back(iosurface_cmp.PassAs<DrawQuad>()); |
440 pass_cmp->quad_list.push_back(renderpass_cmp.PassAs<DrawQuad>()); | 461 pass_cmp->quad_list.push_back(renderpass_cmp.PassAs<DrawQuad>()); |
441 pass_cmp->shared_quad_state_list.push_back(shared_state2_cmp.Pass()); | 462 pass_cmp->shared_quad_state_list.push_back(shared_state2_cmp.Pass()); |
442 pass_cmp->shared_quad_state_list.push_back(shared_state3_cmp.Pass()); | 463 pass_cmp->shared_quad_state_list.push_back(shared_state3_cmp.Pass()); |
443 pass_cmp->quad_list.push_back(solidcolor_cmp.PassAs<DrawQuad>()); | 464 pass_cmp->quad_list.push_back(solidcolor_cmp.PassAs<DrawQuad>()); |
444 pass_cmp->quad_list.push_back(streamvideo_cmp.PassAs<DrawQuad>()); | 465 pass_cmp->quad_list.push_back(streamvideo_cmp.PassAs<DrawQuad>()); |
| 466 pass_cmp->quad_list.push_back(surface_cmp.PassAs<DrawQuad>()); |
445 pass_cmp->quad_list.push_back(texture_cmp.PassAs<DrawQuad>()); | 467 pass_cmp->quad_list.push_back(texture_cmp.PassAs<DrawQuad>()); |
446 pass_cmp->quad_list.push_back(tile_cmp.PassAs<DrawQuad>()); | 468 pass_cmp->quad_list.push_back(tile_cmp.PassAs<DrawQuad>()); |
447 pass_cmp->quad_list.push_back(yuvvideo_cmp.PassAs<DrawQuad>()); | 469 pass_cmp->quad_list.push_back(yuvvideo_cmp.PassAs<DrawQuad>()); |
448 | 470 |
449 // Make sure the in and cmp RenderPasses match. | 471 // Make sure the in and cmp RenderPasses match. |
450 Compare(pass_cmp.get(), pass_in.get()); | 472 Compare(pass_cmp.get(), pass_in.get()); |
451 ASSERT_EQ(3u, pass_in->shared_quad_state_list.size()); | 473 ASSERT_EQ(3u, pass_in->shared_quad_state_list.size()); |
452 ASSERT_EQ(9u, pass_in->quad_list.size()); | 474 ASSERT_EQ(10u, pass_in->quad_list.size()); |
453 for (size_t i = 0; i < 3; ++i) { | 475 for (size_t i = 0; i < 3; ++i) { |
454 Compare(pass_cmp->shared_quad_state_list[i], | 476 Compare(pass_cmp->shared_quad_state_list[i], |
455 pass_in->shared_quad_state_list[i]); | 477 pass_in->shared_quad_state_list[i]); |
456 } | 478 } |
457 for (size_t i = 0; i < pass_in->quad_list.size(); ++i) | 479 for (size_t i = 0; i < pass_in->quad_list.size(); ++i) |
458 Compare(pass_cmp->quad_list[i], pass_in->quad_list[i]); | 480 Compare(pass_cmp->quad_list[i], pass_in->quad_list[i]); |
459 for (size_t i = 1; i < pass_in->quad_list.size(); ++i) { | 481 for (size_t i = 1; i < pass_in->quad_list.size(); ++i) { |
460 bool same_shared_quad_state_cmp = | 482 bool same_shared_quad_state_cmp = |
461 pass_cmp->quad_list[i]->shared_quad_state == | 483 pass_cmp->quad_list[i]->shared_quad_state == |
462 pass_cmp->quad_list[i - 1]->shared_quad_state; | 484 pass_cmp->quad_list[i - 1]->shared_quad_state; |
(...skipping 11 matching lines...) Expand all Loading... |
474 DelegatedFrameData frame_out; | 496 DelegatedFrameData frame_out; |
475 PickleIterator iter(msg); | 497 PickleIterator iter(msg); |
476 EXPECT_TRUE(IPC::ParamTraits<DelegatedFrameData>::Read(&msg, | 498 EXPECT_TRUE(IPC::ParamTraits<DelegatedFrameData>::Read(&msg, |
477 &iter, &frame_out)); | 499 &iter, &frame_out)); |
478 | 500 |
479 // Make sure the out and cmp RenderPasses match. | 501 // Make sure the out and cmp RenderPasses match. |
480 scoped_ptr<RenderPass> pass_out = frame_out.render_pass_list.take( | 502 scoped_ptr<RenderPass> pass_out = frame_out.render_pass_list.take( |
481 frame_out.render_pass_list.begin()); | 503 frame_out.render_pass_list.begin()); |
482 Compare(pass_cmp.get(), pass_out.get()); | 504 Compare(pass_cmp.get(), pass_out.get()); |
483 ASSERT_EQ(3u, pass_out->shared_quad_state_list.size()); | 505 ASSERT_EQ(3u, pass_out->shared_quad_state_list.size()); |
484 ASSERT_EQ(9u, pass_out->quad_list.size()); | 506 ASSERT_EQ(10u, pass_out->quad_list.size()); |
485 for (size_t i = 0; i < 3; ++i) { | 507 for (size_t i = 0; i < 3; ++i) { |
486 Compare(pass_cmp->shared_quad_state_list[i], | 508 Compare(pass_cmp->shared_quad_state_list[i], |
487 pass_out->shared_quad_state_list[i]); | 509 pass_out->shared_quad_state_list[i]); |
488 } | 510 } |
489 for (size_t i = 0; i < pass_out->quad_list.size(); ++i) | 511 for (size_t i = 0; i < pass_out->quad_list.size(); ++i) |
490 Compare(pass_cmp->quad_list[i], pass_out->quad_list[i]); | 512 Compare(pass_cmp->quad_list[i], pass_out->quad_list[i]); |
491 for (size_t i = 1; i < pass_out->quad_list.size(); ++i) { | 513 for (size_t i = 1; i < pass_out->quad_list.size(); ++i) { |
492 bool same_shared_quad_state_cmp = | 514 bool same_shared_quad_state_cmp = |
493 pass_cmp->quad_list[i]->shared_quad_state == | 515 pass_cmp->quad_list[i]->shared_quad_state == |
494 pass_cmp->quad_list[i - 1]->shared_quad_state; | 516 pass_cmp->quad_list[i - 1]->shared_quad_state; |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
690 break; | 712 break; |
691 case cc::DrawQuad::TEXTURE_CONTENT: | 713 case cc::DrawQuad::TEXTURE_CONTENT: |
692 largest = std::max(largest, sizeof(cc::TextureDrawQuad)); | 714 largest = std::max(largest, sizeof(cc::TextureDrawQuad)); |
693 break; | 715 break; |
694 case cc::DrawQuad::RENDER_PASS: | 716 case cc::DrawQuad::RENDER_PASS: |
695 largest = std::max(largest, sizeof(cc::RenderPassDrawQuad)); | 717 largest = std::max(largest, sizeof(cc::RenderPassDrawQuad)); |
696 break; | 718 break; |
697 case cc::DrawQuad::SOLID_COLOR: | 719 case cc::DrawQuad::SOLID_COLOR: |
698 largest = std::max(largest, sizeof(cc::SolidColorDrawQuad)); | 720 largest = std::max(largest, sizeof(cc::SolidColorDrawQuad)); |
699 break; | 721 break; |
| 722 case cc::DrawQuad::SURFACE_CONTENT: |
| 723 largest = std::max(largest, sizeof(cc::SurfaceDrawQuad)); |
| 724 break; |
700 case cc::DrawQuad::TILED_CONTENT: | 725 case cc::DrawQuad::TILED_CONTENT: |
701 largest = std::max(largest, sizeof(cc::TileDrawQuad)); | 726 largest = std::max(largest, sizeof(cc::TileDrawQuad)); |
702 break; | 727 break; |
703 case cc::DrawQuad::STREAM_VIDEO_CONTENT: | 728 case cc::DrawQuad::STREAM_VIDEO_CONTENT: |
704 largest = std::max(largest, sizeof(cc::StreamVideoDrawQuad)); | 729 largest = std::max(largest, sizeof(cc::StreamVideoDrawQuad)); |
705 break; | 730 break; |
706 case cc::DrawQuad::YUV_VIDEO_CONTENT: | 731 case cc::DrawQuad::YUV_VIDEO_CONTENT: |
707 largest = std::max(largest, sizeof(cc::YUVVideoDrawQuad)); | 732 largest = std::max(largest, sizeof(cc::YUVVideoDrawQuad)); |
708 break; | 733 break; |
709 case cc::DrawQuad::INVALID: | 734 case cc::DrawQuad::INVALID: |
710 break; | 735 break; |
711 default: | 736 default: |
712 done = true; | 737 done = true; |
713 } | 738 } |
714 } | 739 } |
715 | 740 |
716 // Verify the largest DrawQuad type is RenderPassDrawQuad. If this ever | 741 // Verify the largest DrawQuad type is RenderPassDrawQuad. If this ever |
717 // changes, then the ReserveSizeForRenderPassWrite() method needs to be | 742 // changes, then the ReserveSizeForRenderPassWrite() method needs to be |
718 // updated as well to use the new largest quad. | 743 // updated as well to use the new largest quad. |
719 EXPECT_EQ(sizeof(RenderPassDrawQuad), largest); | 744 EXPECT_EQ(sizeof(RenderPassDrawQuad), largest); |
720 } | 745 } |
721 | 746 |
722 } // namespace | 747 } // namespace |
723 } // namespace content | 748 } // namespace content |
OLD | NEW |