Chromium Code Reviews| Index: cc/ipc/struct_traits_unittest.cc |
| diff --git a/cc/ipc/struct_traits_unittest.cc b/cc/ipc/struct_traits_unittest.cc |
| index 6f9486983e87f3d3b110cc3ae3e9ae872069aebe..2592056895da1931d48cc246f9219abac14c7de9 100644 |
| --- a/cc/ipc/struct_traits_unittest.cc |
| +++ b/cc/ipc/struct_traits_unittest.cc |
| @@ -11,6 +11,7 @@ |
| #include "cc/quads/render_pass_id.h" |
| #include "cc/quads/solid_color_draw_quad.h" |
| #include "cc/quads/surface_draw_quad.h" |
| +#include "cc/quads/texture_draw_quad.h" |
| #include "cc/quads/yuv_video_draw_quad.h" |
| #include "mojo/public/cpp/bindings/binding_set.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -60,6 +61,11 @@ class StructTraitsTest : public testing::Test, public mojom::TraitsTestService { |
| callback.Run(q); |
| } |
| + void EchoRenderPass(const std::unique_ptr<RenderPass>& r, |
| + const EchoRenderPassCallback& callback) override { |
| + callback.Run(r); |
| + } |
| + |
| void EchoRenderPassId(const RenderPassId& r, |
| const EchoRenderPassIdCallback& callback) override { |
| callback.Run(r); |
| @@ -279,42 +285,64 @@ TEST_F(StructTraitsTest, FilterOperations) { |
| } |
| TEST_F(StructTraitsTest, QuadListBasic) { |
| - const DrawQuad::Material material1 = DrawQuad::DEBUG_BORDER; |
| - const DrawQuad::Material material2 = DrawQuad::SOLID_COLOR; |
| - const DrawQuad::Material material3 = DrawQuad::SURFACE_CONTENT; |
| - const DrawQuad::Material material4 = DrawQuad::RENDER_PASS; |
| + SharedQuadState sqs; |
| + QuadList input; |
| + |
| const gfx::Rect rect1(1234, 4321, 1357, 7531); |
| - const gfx::Rect rect2(2468, 8642, 4321, 1234); |
| - const gfx::Rect rect3(1029, 3847, 5610, 2938); |
| - const gfx::Rect rect4(1234, 5678, 9101112, 13141516); |
| + const SkColor color1 = SK_ColorRED; |
| const int32_t width1 = 1337; |
| - const uint32_t color2 = 0xffffffff; |
| - const SurfaceId surface_id(1234, 5678, 2468); |
| - const RenderPassId render_pass_id(1234, 5678); |
| - |
| - QuadList input; |
| DebugBorderDrawQuad* debug_quad = |
| input.AllocateAndConstruct<DebugBorderDrawQuad>(); |
| - debug_quad->material = material1; |
| - debug_quad->rect = rect1; |
| - debug_quad->width = width1; |
| + debug_quad->SetNew(&sqs, rect1, rect1, color1, width1); |
| + const gfx::Rect rect2(2468, 8642, 4321, 1234); |
| + const uint32_t color2 = 0xffffffff; |
| + const bool force_anti_aliasing_off = true; |
| SolidColorDrawQuad* solid_quad = |
| input.AllocateAndConstruct<SolidColorDrawQuad>(); |
| - solid_quad->material = material2; |
| - solid_quad->rect = rect2; |
| - solid_quad->color = color2; |
| + solid_quad->SetNew(&sqs, rect2, rect2, color2, force_anti_aliasing_off); |
| + const gfx::Rect rect3(1029, 3847, 5610, 2938); |
| + const SurfaceId surface_id(1234, 5678, 2468); |
| SurfaceDrawQuad* surface_quad = input.AllocateAndConstruct<SurfaceDrawQuad>(); |
| - surface_quad->material = material3; |
| - surface_quad->rect = rect3; |
| - surface_quad->surface_id = surface_id; |
| + surface_quad->SetNew(&sqs, rect3, rect3, surface_id); |
| + |
| + const gfx::Rect rect4(1234, 5678, 9101112, 13141516); |
| + const ResourceId resource_id4(1337); |
| + const RenderPassId render_pass_id(1234, 5678); |
| + const gfx::Vector2dF mask_uv_scale(1337.1f, 1234.2f); |
| + const gfx::Size mask_texture_size(1234, 5678); |
| + FilterOperations filters; |
| + filters.Append(FilterOperation::CreateBlurFilter(0.f)); |
| + filters.Append(FilterOperation::CreateZoomFilter(2.0f, 1)); |
| + gfx::Vector2dF filters_scale(1234.1f, 4321.2f); |
| + FilterOperations background_filters; |
| + background_filters.Append(FilterOperation::CreateSaturateFilter(4.f)); |
| + background_filters.Append(FilterOperation::CreateZoomFilter(2.0f, 1)); |
| + background_filters.Append(FilterOperation::CreateSaturateFilter(4.f)); |
| RenderPassDrawQuad* render_pass_quad = |
| input.AllocateAndConstruct<RenderPassDrawQuad>(); |
| - render_pass_quad->material = material4; |
| - render_pass_quad->rect = rect4; |
| - render_pass_quad->render_pass_id = render_pass_id; |
| + render_pass_quad->SetNew(&sqs, rect4, rect4, render_pass_id, resource_id4, |
| + mask_uv_scale, mask_texture_size, filters, |
| + filters_scale, background_filters); |
| + |
| + const gfx::Rect rect5(123, 567, 91011, 131415); |
| + const ResourceId resource_id5(1337); |
| + const float vertex_opacity[4] = {1.f, 2.f, 3.f, 4.f}; |
| + const bool premultiplied_alpha = true; |
| + const gfx::PointF uv_top_left(12.1f, 34.2f); |
| + const gfx::PointF uv_bottom_right(56.3f, 78.4f); |
| + const SkColor background_color = SK_ColorGREEN; |
| + const bool y_flipped = true; |
| + const bool nearest_neighbor = true; |
| + const bool secure_output_only = true; |
| + TextureDrawQuad* texture_draw_quad = |
| + input.AllocateAndConstruct<TextureDrawQuad>(); |
| + texture_draw_quad->SetNew(&sqs, rect5, rect5, rect5, resource_id5, |
| + premultiplied_alpha, uv_top_left, uv_bottom_right, |
| + background_color, vertex_opacity, y_flipped, |
| + nearest_neighbor, secure_output_only); |
| mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); |
| QuadList output; |
| @@ -322,26 +350,168 @@ TEST_F(StructTraitsTest, QuadListBasic) { |
| ASSERT_EQ(input.size(), output.size()); |
| - ASSERT_EQ(material1, output.ElementAt(0)->material); |
| - EXPECT_EQ(rect1, output.ElementAt(0)->rect); |
| - EXPECT_EQ(width1, |
| - static_cast<DebugBorderDrawQuad*>(output.ElementAt(0))->width); |
| - |
| - ASSERT_EQ(material2, output.ElementAt(1)->material); |
| - EXPECT_EQ(rect2, output.ElementAt(1)->rect); |
| - EXPECT_EQ(color2, |
| - static_cast<SolidColorDrawQuad*>(output.ElementAt(1))->color); |
| - |
| - ASSERT_EQ(material3, output.ElementAt(2)->material); |
| - EXPECT_EQ(rect3, output.ElementAt(2)->rect); |
| - EXPECT_EQ(surface_id, |
| - static_cast<SurfaceDrawQuad*>(output.ElementAt(2))->surface_id); |
| - |
| - ASSERT_EQ(material4, output.ElementAt(3)->material); |
| - EXPECT_EQ(rect4, output.ElementAt(3)->rect); |
| - EXPECT_EQ( |
| - render_pass_id, |
| - static_cast<RenderPassDrawQuad*>(output.ElementAt(3))->render_pass_id); |
| + const DebugBorderDrawQuad* out_debug_border_draw_quad = |
| + DebugBorderDrawQuad::MaterialCast(output.ElementAt(0)); |
| + EXPECT_EQ(rect1, out_debug_border_draw_quad->rect); |
| + EXPECT_EQ(rect1, out_debug_border_draw_quad->visible_rect); |
| + EXPECT_EQ(color1, out_debug_border_draw_quad->color); |
| + EXPECT_EQ(width1, out_debug_border_draw_quad->width); |
| + |
| + const SolidColorDrawQuad* out_solid_color_draw_quad = |
| + SolidColorDrawQuad::MaterialCast(output.ElementAt(1)); |
| + EXPECT_EQ(rect2, out_solid_color_draw_quad->rect); |
| + EXPECT_EQ(rect2, out_solid_color_draw_quad->visible_rect); |
| + EXPECT_EQ(color2, out_solid_color_draw_quad->color); |
| + EXPECT_EQ(force_anti_aliasing_off, |
| + out_solid_color_draw_quad->force_anti_aliasing_off); |
| + |
| + const SurfaceDrawQuad* out_surface_draw_quad = |
| + SurfaceDrawQuad::MaterialCast(output.ElementAt(2)); |
| + EXPECT_EQ(rect3, out_surface_draw_quad->rect); |
| + EXPECT_EQ(rect3, out_surface_draw_quad->visible_rect); |
| + EXPECT_EQ(surface_id, out_surface_draw_quad->surface_id); |
| + |
| + const RenderPassDrawQuad* out_render_pass_draw_quad = |
| + RenderPassDrawQuad::MaterialCast(output.ElementAt(3)); |
| + EXPECT_EQ(rect4, out_render_pass_draw_quad->rect); |
| + EXPECT_EQ(rect4, out_render_pass_draw_quad->visible_rect); |
| + EXPECT_EQ(render_pass_id, out_render_pass_draw_quad->render_pass_id); |
| + EXPECT_EQ(resource_id4, out_render_pass_draw_quad->mask_resource_id()); |
| + EXPECT_EQ(mask_texture_size, out_render_pass_draw_quad->mask_texture_size); |
| + EXPECT_EQ(filters.size(), out_render_pass_draw_quad->filters.size()); |
| + for (size_t i = 0; i < filters.size(); ++i) |
| + EXPECT_EQ(filters.at(i), out_render_pass_draw_quad->filters.at(i)); |
| + EXPECT_EQ(filters_scale, out_render_pass_draw_quad->filters_scale); |
| + EXPECT_EQ(background_filters.size(), |
| + out_render_pass_draw_quad->background_filters.size()); |
| + for (size_t i = 0; i < background_filters.size(); ++i) |
| + EXPECT_EQ(background_filters.at(i), |
| + out_render_pass_draw_quad->background_filters.at(i)); |
| + |
| + const TextureDrawQuad* out_texture_draw_quad = |
| + TextureDrawQuad::MaterialCast(output.ElementAt(4)); |
| + EXPECT_EQ(rect5, out_texture_draw_quad->rect); |
| + EXPECT_EQ(rect5, out_texture_draw_quad->opaque_rect); |
| + EXPECT_EQ(rect5, out_texture_draw_quad->visible_rect); |
| + EXPECT_EQ(resource_id5, out_texture_draw_quad->resource_id()); |
| + EXPECT_EQ(premultiplied_alpha, out_texture_draw_quad->premultiplied_alpha); |
| + EXPECT_EQ(uv_top_left, out_texture_draw_quad->uv_top_left); |
| + EXPECT_EQ(uv_bottom_right, out_texture_draw_quad->uv_bottom_right); |
| + EXPECT_EQ(background_color, out_texture_draw_quad->background_color); |
| + EXPECT_EQ(vertex_opacity[0], out_texture_draw_quad->vertex_opacity[0]); |
| + EXPECT_EQ(vertex_opacity[1], out_texture_draw_quad->vertex_opacity[1]); |
| + EXPECT_EQ(vertex_opacity[2], out_texture_draw_quad->vertex_opacity[2]); |
| + EXPECT_EQ(vertex_opacity[3], out_texture_draw_quad->vertex_opacity[3]); |
| + EXPECT_EQ(y_flipped, out_texture_draw_quad->y_flipped); |
| + EXPECT_EQ(nearest_neighbor, out_texture_draw_quad->nearest_neighbor); |
| + EXPECT_EQ(secure_output_only, out_texture_draw_quad->secure_output_only); |
| +} |
| + |
| +TEST_F(StructTraitsTest, RenderPass) { |
| + const RenderPassId id(3, 2); |
| + const gfx::Rect output_rect(45, 22, 120, 13); |
| + const gfx::Transform transform_to_root = |
| + gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); |
| + const gfx::Rect damage_rect(56, 123, 19, 43); |
| + const bool has_transparent_background = true; |
| + std::unique_ptr<RenderPass> input = RenderPass::Create(); |
| + input->SetAll(id, output_rect, damage_rect, transform_to_root, |
| + has_transparent_background); |
| + |
| + SharedQuadState* shared_state_1 = input->CreateAndAppendSharedQuadState(); |
| + shared_state_1->SetAll( |
| + gfx::Transform(16.1f, 15.3f, 14.3f, 13.7f, 12.2f, 11.4f, 10.4f, 9.8f, |
| + 8.1f, 7.3f, 6.3f, 5.7f, 4.8f, 3.4f, 2.4f, 1.2f), |
| + gfx::Size(1, 2), gfx::Rect(1337, 5679, 9101112, 131415), |
| + gfx::Rect(1357, 2468, 121314, 1337), true, 2, SkXfermode::kSrcOver_Mode, |
| + 1); |
| + |
| + SharedQuadState* shared_state_2 = input->CreateAndAppendSharedQuadState(); |
| + shared_state_2->SetAll( |
| + gfx::Transform(1.1f, 2.3f, 3.3f, 4.7f, 5.2f, 6.4f, 7.4f, 8.8f, 9.1f, |
| + 10.3f, 11.3f, 12.7f, 13.8f, 14.4f, 15.4f, 16.2f), |
| + gfx::Size(1337, 1234), gfx::Rect(1234, 5678, 9101112, 13141516), |
| + gfx::Rect(1357, 2468, 121314, 1337), true, 2, SkXfermode::kSrcOver_Mode, |
| + 1); |
| + |
| + DebugBorderDrawQuad* debug_quad = |
| + input->CreateAndAppendDrawQuad<DebugBorderDrawQuad>(); |
| + const gfx::Rect debug_quad_rect(12, 56, 89, 10); |
| + debug_quad->SetNew(shared_state_1, debug_quad_rect, debug_quad_rect, |
| + SK_ColorBLUE, 1337); |
| + |
| + SolidColorDrawQuad* color_quad = |
|
danakj
2016/06/22 20:51:35
Can you add comments to explain the steps this tes
Fady Samuel
2016/06/22 21:41:19
Done.
|
| + input->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
| + const gfx::Rect color_quad_rect(123, 456, 789, 101); |
| + color_quad->SetNew(input->shared_quad_state_list.back(), color_quad_rect, |
|
danakj
2016/06/22 20:51:35
nit: shared_state_2 to mirror the use of shared_st
Fady Samuel
2016/06/22 21:41:19
Done.
|
| + color_quad_rect, SK_ColorRED, true); |
| + |
| + SurfaceDrawQuad* surface_quad = |
| + input->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
| + const gfx::Rect surface_quad_rect(1337, 2448, 1234, 5678); |
| + surface_quad->SetNew(input->shared_quad_state_list.back(), surface_quad_rect, |
|
danakj
2016/06/22 20:51:35
nitto?
Fady Samuel
2016/06/22 21:41:19
Done.
|
| + surface_quad_rect, SurfaceId(1337, 1234, 2468)); |
| + |
| + std::unique_ptr<RenderPass> output; |
| + mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); |
| + proxy->EchoRenderPass(input, &output); |
| + |
| + EXPECT_EQ(input->quad_list.size(), output->quad_list.size()); |
| + EXPECT_EQ(input->shared_quad_state_list.size(), |
| + output->shared_quad_state_list.size()); |
| + EXPECT_EQ(id, output->id); |
| + EXPECT_EQ(output_rect, output->output_rect); |
| + EXPECT_EQ(damage_rect, output->damage_rect); |
| + EXPECT_EQ(transform_to_root, output->transform_to_root_target); |
| + EXPECT_EQ(has_transparent_background, output->has_transparent_background); |
| + |
| + SharedQuadState* out_sqs1 = output->shared_quad_state_list.ElementAt(0); |
| + EXPECT_EQ(shared_state_1->quad_to_target_transform, |
| + out_sqs1->quad_to_target_transform); |
| + EXPECT_EQ(shared_state_1->quad_layer_bounds, out_sqs1->quad_layer_bounds); |
| + EXPECT_EQ(shared_state_1->visible_quad_layer_rect, |
| + out_sqs1->visible_quad_layer_rect); |
| + EXPECT_EQ(shared_state_1->clip_rect, out_sqs1->clip_rect); |
| + EXPECT_EQ(shared_state_1->is_clipped, out_sqs1->is_clipped); |
| + EXPECT_EQ(shared_state_1->opacity, out_sqs1->opacity); |
| + EXPECT_EQ(shared_state_1->blend_mode, out_sqs1->blend_mode); |
| + EXPECT_EQ(shared_state_1->sorting_context_id, out_sqs1->sorting_context_id); |
| + |
| + SharedQuadState* out_sqs2 = output->shared_quad_state_list.ElementAt(1); |
| + EXPECT_EQ(shared_state_2->quad_to_target_transform, |
| + out_sqs2->quad_to_target_transform); |
| + EXPECT_EQ(shared_state_2->quad_layer_bounds, out_sqs2->quad_layer_bounds); |
| + EXPECT_EQ(shared_state_2->visible_quad_layer_rect, |
| + out_sqs2->visible_quad_layer_rect); |
| + EXPECT_EQ(shared_state_2->clip_rect, out_sqs2->clip_rect); |
| + EXPECT_EQ(shared_state_2->is_clipped, out_sqs2->is_clipped); |
| + EXPECT_EQ(shared_state_2->opacity, out_sqs2->opacity); |
| + EXPECT_EQ(shared_state_2->blend_mode, out_sqs2->blend_mode); |
| + EXPECT_EQ(shared_state_2->sorting_context_id, out_sqs2->sorting_context_id); |
| + |
| + const DebugBorderDrawQuad* out_debug_quad = |
| + DebugBorderDrawQuad::MaterialCast(output->quad_list.ElementAt(0)); |
| + EXPECT_EQ(out_debug_quad->shared_quad_state, out_sqs1); |
| + EXPECT_EQ(debug_quad->rect, out_debug_quad->rect); |
| + EXPECT_EQ(debug_quad->visible_rect, out_debug_quad->visible_rect); |
| + EXPECT_EQ(debug_quad->color, out_debug_quad->color); |
| + EXPECT_EQ(debug_quad->width, out_debug_quad->width); |
| + |
| + const SolidColorDrawQuad* out_color_quad = |
| + SolidColorDrawQuad::MaterialCast(output->quad_list.ElementAt(1)); |
| + EXPECT_EQ(out_color_quad->shared_quad_state, out_sqs2); |
| + EXPECT_EQ(color_quad->rect, out_color_quad->rect); |
| + EXPECT_EQ(color_quad->visible_rect, out_color_quad->visible_rect); |
| + EXPECT_EQ(color_quad->color, out_color_quad->color); |
| + EXPECT_EQ(color_quad->force_anti_aliasing_off, |
| + out_color_quad->force_anti_aliasing_off); |
| + |
| + const SurfaceDrawQuad* out_surface_quad = |
| + SurfaceDrawQuad::MaterialCast(output->quad_list.ElementAt(2)); |
| + EXPECT_EQ(out_surface_quad->shared_quad_state, out_sqs2); |
| + EXPECT_EQ(surface_quad->rect, out_surface_quad->rect); |
| + EXPECT_EQ(surface_quad->visible_rect, out_surface_quad->visible_rect); |
| + EXPECT_EQ(surface_quad->surface_id, out_surface_quad->surface_id); |
| } |
| TEST_F(StructTraitsTest, RenderPassId) { |