Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "base/message_loop/message_loop.h" | 5 #include "base/message_loop/message_loop.h" |
| 6 #include "cc/input/selection.h" | 6 #include "cc/input/selection.h" |
| 7 #include "cc/ipc/traits_test_service.mojom.h" | 7 #include "cc/ipc/traits_test_service.mojom.h" |
| 8 #include "cc/quads/debug_border_draw_quad.h" | 8 #include "cc/quads/debug_border_draw_quad.h" |
| 9 #include "cc/quads/render_pass.h" | 9 #include "cc/quads/render_pass.h" |
| 10 #include "cc/quads/render_pass_draw_quad.h" | 10 #include "cc/quads/render_pass_draw_quad.h" |
| 11 #include "cc/quads/render_pass_id.h" | 11 #include "cc/quads/render_pass_id.h" |
| 12 #include "cc/quads/solid_color_draw_quad.h" | 12 #include "cc/quads/solid_color_draw_quad.h" |
| 13 #include "cc/quads/surface_draw_quad.h" | 13 #include "cc/quads/surface_draw_quad.h" |
| 14 #include "cc/quads/texture_draw_quad.h" | |
| 14 #include "cc/quads/yuv_video_draw_quad.h" | 15 #include "cc/quads/yuv_video_draw_quad.h" |
| 15 #include "mojo/public/cpp/bindings/binding_set.h" | 16 #include "mojo/public/cpp/bindings/binding_set.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 17 #include "third_party/skia/include/core/SkString.h" | 18 #include "third_party/skia/include/core/SkString.h" |
| 18 #include "third_party/skia/include/effects/SkDropShadowImageFilter.h" | 19 #include "third_party/skia/include/effects/SkDropShadowImageFilter.h" |
| 19 | 20 |
| 20 namespace cc { | 21 namespace cc { |
| 21 | 22 |
| 22 namespace { | 23 namespace { |
| 23 | 24 |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 53 const FilterOperations& f, | 54 const FilterOperations& f, |
| 54 const EchoFilterOperationsCallback& callback) override { | 55 const EchoFilterOperationsCallback& callback) override { |
| 55 callback.Run(f); | 56 callback.Run(f); |
| 56 } | 57 } |
| 57 | 58 |
| 58 void EchoQuadList(const QuadList& q, | 59 void EchoQuadList(const QuadList& q, |
| 59 const EchoQuadListCallback& callback) override { | 60 const EchoQuadListCallback& callback) override { |
| 60 callback.Run(q); | 61 callback.Run(q); |
| 61 } | 62 } |
| 62 | 63 |
| 64 void EchoRenderPass(const std::unique_ptr<RenderPass>& r, | |
| 65 const EchoRenderPassCallback& callback) override { | |
| 66 callback.Run(r); | |
| 67 } | |
| 68 | |
| 63 void EchoRenderPassId(const RenderPassId& r, | 69 void EchoRenderPassId(const RenderPassId& r, |
| 64 const EchoRenderPassIdCallback& callback) override { | 70 const EchoRenderPassIdCallback& callback) override { |
| 65 callback.Run(r); | 71 callback.Run(r); |
| 66 } | 72 } |
| 67 | 73 |
| 68 void EchoReturnedResource( | 74 void EchoReturnedResource( |
| 69 const ReturnedResource& r, | 75 const ReturnedResource& r, |
| 70 const EchoReturnedResourceCallback& callback) override { | 76 const EchoReturnedResourceCallback& callback) override { |
| 71 callback.Run(r); | 77 callback.Run(r); |
| 72 } | 78 } |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 276 for (size_t i = 0; i < input.size(); ++i) { | 282 for (size_t i = 0; i < input.size(); ++i) { |
| 277 EXPECT_EQ(input.at(i), output.at(i)); | 283 EXPECT_EQ(input.at(i), output.at(i)); |
| 278 } | 284 } |
| 279 } | 285 } |
| 280 | 286 |
| 281 TEST_F(StructTraitsTest, QuadListBasic) { | 287 TEST_F(StructTraitsTest, QuadListBasic) { |
| 282 const DrawQuad::Material material1 = DrawQuad::DEBUG_BORDER; | 288 const DrawQuad::Material material1 = DrawQuad::DEBUG_BORDER; |
| 283 const DrawQuad::Material material2 = DrawQuad::SOLID_COLOR; | 289 const DrawQuad::Material material2 = DrawQuad::SOLID_COLOR; |
| 284 const DrawQuad::Material material3 = DrawQuad::SURFACE_CONTENT; | 290 const DrawQuad::Material material3 = DrawQuad::SURFACE_CONTENT; |
| 285 const DrawQuad::Material material4 = DrawQuad::RENDER_PASS; | 291 const DrawQuad::Material material4 = DrawQuad::RENDER_PASS; |
| 292 const DrawQuad::Material material5 = DrawQuad::TEXTURE_CONTENT; | |
| 286 const gfx::Rect rect1(1234, 4321, 1357, 7531); | 293 const gfx::Rect rect1(1234, 4321, 1357, 7531); |
| 287 const gfx::Rect rect2(2468, 8642, 4321, 1234); | 294 const gfx::Rect rect2(2468, 8642, 4321, 1234); |
| 288 const gfx::Rect rect3(1029, 3847, 5610, 2938); | 295 const gfx::Rect rect3(1029, 3847, 5610, 2938); |
| 289 const gfx::Rect rect4(1234, 5678, 9101112, 13141516); | 296 const gfx::Rect rect4(1234, 5678, 9101112, 13141516); |
| 297 const gfx::Rect rect5(123, 567, 91011, 131415); | |
| 290 const int32_t width1 = 1337; | 298 const int32_t width1 = 1337; |
| 291 const uint32_t color2 = 0xffffffff; | 299 const uint32_t color2 = 0xffffffff; |
| 292 const SurfaceId surface_id(1234, 5678, 2468); | 300 const SurfaceId surface_id(1234, 5678, 2468); |
| 293 const RenderPassId render_pass_id(1234, 5678); | 301 const RenderPassId render_pass_id(1234, 5678); |
| 302 const float vertex_opacity[4] = {1.f, 2.f, 3.f, 4.f}; | |
| 294 | 303 |
| 295 QuadList input; | 304 QuadList input; |
| 296 DebugBorderDrawQuad* debug_quad = | 305 DebugBorderDrawQuad* debug_quad = |
| 297 input.AllocateAndConstruct<DebugBorderDrawQuad>(); | 306 input.AllocateAndConstruct<DebugBorderDrawQuad>(); |
| 298 debug_quad->material = material1; | 307 debug_quad->material = material1; |
| 299 debug_quad->rect = rect1; | 308 debug_quad->rect = rect1; |
| 300 debug_quad->width = width1; | 309 debug_quad->width = width1; |
| 301 | 310 |
| 302 SolidColorDrawQuad* solid_quad = | 311 SolidColorDrawQuad* solid_quad = |
| 303 input.AllocateAndConstruct<SolidColorDrawQuad>(); | 312 input.AllocateAndConstruct<SolidColorDrawQuad>(); |
| 304 solid_quad->material = material2; | 313 solid_quad->material = material2; |
| 305 solid_quad->rect = rect2; | 314 solid_quad->rect = rect2; |
| 306 solid_quad->color = color2; | 315 solid_quad->color = color2; |
| 307 | 316 |
| 308 SurfaceDrawQuad* surface_quad = input.AllocateAndConstruct<SurfaceDrawQuad>(); | 317 SurfaceDrawQuad* surface_quad = input.AllocateAndConstruct<SurfaceDrawQuad>(); |
| 309 surface_quad->material = material3; | 318 surface_quad->material = material3; |
| 310 surface_quad->rect = rect3; | 319 surface_quad->rect = rect3; |
| 311 surface_quad->surface_id = surface_id; | 320 surface_quad->surface_id = surface_id; |
| 312 | 321 |
| 313 RenderPassDrawQuad* render_pass_quad = | 322 RenderPassDrawQuad* render_pass_quad = |
| 314 input.AllocateAndConstruct<RenderPassDrawQuad>(); | 323 input.AllocateAndConstruct<RenderPassDrawQuad>(); |
| 315 render_pass_quad->material = material4; | 324 render_pass_quad->material = material4; |
| 316 render_pass_quad->rect = rect4; | 325 render_pass_quad->rect = rect4; |
| 317 render_pass_quad->render_pass_id = render_pass_id; | 326 render_pass_quad->render_pass_id = render_pass_id; |
| 318 | 327 |
| 328 TextureDrawQuad* texture_draw_quad = | |
| 329 input.AllocateAndConstruct<TextureDrawQuad>(); | |
| 330 texture_draw_quad->material = material5; | |
|
danakj
2016/06/22 00:05:09
You should be calling TextureDrawQuad::SetNew() or
Fady Samuel
2016/06/22 20:08:14
We don't serialize SharedQuadState here, and so at
| |
| 331 texture_draw_quad->rect = rect5; | |
| 332 texture_draw_quad->vertex_opacity[0] = vertex_opacity[0]; | |
| 333 texture_draw_quad->vertex_opacity[1] = vertex_opacity[1]; | |
| 334 texture_draw_quad->vertex_opacity[2] = vertex_opacity[2]; | |
| 335 texture_draw_quad->vertex_opacity[3] = vertex_opacity[3]; | |
| 336 | |
| 319 mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); | 337 mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); |
| 320 QuadList output; | 338 QuadList output; |
| 321 proxy->EchoQuadList(input, &output); | 339 proxy->EchoQuadList(input, &output); |
| 322 | 340 |
| 323 ASSERT_EQ(input.size(), output.size()); | 341 ASSERT_EQ(input.size(), output.size()); |
| 324 | 342 |
| 325 ASSERT_EQ(material1, output.ElementAt(0)->material); | 343 ASSERT_EQ(material1, output.ElementAt(0)->material); |
| 326 EXPECT_EQ(rect1, output.ElementAt(0)->rect); | 344 EXPECT_EQ(rect1, output.ElementAt(0)->rect); |
| 327 EXPECT_EQ(width1, | 345 EXPECT_EQ(width1, |
| 328 static_cast<DebugBorderDrawQuad*>(output.ElementAt(0))->width); | 346 static_cast<DebugBorderDrawQuad*>(output.ElementAt(0))->width); |
| 329 | 347 |
| 330 ASSERT_EQ(material2, output.ElementAt(1)->material); | 348 ASSERT_EQ(material2, output.ElementAt(1)->material); |
| 331 EXPECT_EQ(rect2, output.ElementAt(1)->rect); | 349 EXPECT_EQ(rect2, output.ElementAt(1)->rect); |
| 332 EXPECT_EQ(color2, | 350 EXPECT_EQ(color2, |
| 333 static_cast<SolidColorDrawQuad*>(output.ElementAt(1))->color); | 351 static_cast<SolidColorDrawQuad*>(output.ElementAt(1))->color); |
| 334 | 352 |
| 335 ASSERT_EQ(material3, output.ElementAt(2)->material); | 353 ASSERT_EQ(material3, output.ElementAt(2)->material); |
| 336 EXPECT_EQ(rect3, output.ElementAt(2)->rect); | 354 EXPECT_EQ(rect3, output.ElementAt(2)->rect); |
| 337 EXPECT_EQ(surface_id, | 355 EXPECT_EQ(surface_id, |
| 338 static_cast<SurfaceDrawQuad*>(output.ElementAt(2))->surface_id); | 356 static_cast<SurfaceDrawQuad*>(output.ElementAt(2))->surface_id); |
| 339 | 357 |
| 340 ASSERT_EQ(material4, output.ElementAt(3)->material); | 358 ASSERT_EQ(material4, output.ElementAt(3)->material); |
| 341 EXPECT_EQ(rect4, output.ElementAt(3)->rect); | 359 EXPECT_EQ(rect4, output.ElementAt(3)->rect); |
| 342 EXPECT_EQ( | 360 EXPECT_EQ( |
| 343 render_pass_id, | 361 render_pass_id, |
| 344 static_cast<RenderPassDrawQuad*>(output.ElementAt(3))->render_pass_id); | 362 static_cast<RenderPassDrawQuad*>(output.ElementAt(3))->render_pass_id); |
| 363 | |
| 364 ASSERT_EQ(material5, output.ElementAt(4)->material); | |
| 365 EXPECT_EQ(rect5, output.ElementAt(4)->rect); | |
| 366 EXPECT_EQ( | |
| 367 vertex_opacity[0], | |
| 368 static_cast<TextureDrawQuad*>(output.ElementAt(4))->vertex_opacity[0]); | |
| 369 EXPECT_EQ( | |
| 370 vertex_opacity[1], | |
| 371 static_cast<TextureDrawQuad*>(output.ElementAt(4))->vertex_opacity[1]); | |
| 372 EXPECT_EQ( | |
| 373 vertex_opacity[2], | |
| 374 static_cast<TextureDrawQuad*>(output.ElementAt(4))->vertex_opacity[2]); | |
| 375 EXPECT_EQ( | |
| 376 vertex_opacity[3], | |
| 377 static_cast<TextureDrawQuad*>(output.ElementAt(4))->vertex_opacity[3]); | |
| 378 } | |
| 379 | |
| 380 TEST_F(StructTraitsTest, RenderPass) { | |
| 381 const RenderPassId id(3, 2); | |
| 382 const gfx::Rect output_rect(45, 22, 120, 13); | |
| 383 const gfx::Transform transform_to_root = | |
| 384 gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); | |
| 385 const gfx::Rect damage_rect(56, 123, 19, 43); | |
| 386 const bool has_transparent_background = true; | |
| 387 std::unique_ptr<RenderPass> input = RenderPass::Create(); | |
| 388 input->SetAll(id, output_rect, damage_rect, transform_to_root, | |
| 389 has_transparent_background); | |
| 390 | |
| 391 SharedQuadState* shared_state = input->CreateAndAppendSharedQuadState(); | |
| 392 shared_state->SetAll(gfx::Transform(), gfx::Size(), gfx::Rect(), gfx::Rect(), | |
|
danakj
2016/06/22 00:05:09
how about using some non-0/false stuff, its easy t
Fady Samuel
2016/06/22 20:08:14
Done.
| |
| 393 false, 1, SkXfermode::kSrcOver_Mode, 0); | |
| 394 | |
| 395 SolidColorDrawQuad* color_quad = | |
| 396 input->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | |
| 397 color_quad->SetNew(input->shared_quad_state_list.back(), gfx::Rect(), | |
| 398 gfx::Rect(), SkColor(), false); | |
|
danakj
2016/06/22 00:05:09
dittos
Fady Samuel
2016/06/22 20:08:14
Done.
| |
| 399 std::unique_ptr<RenderPass> output; | |
| 400 mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); | |
| 401 proxy->EchoRenderPass(input, &output); | |
| 402 | |
| 403 EXPECT_EQ(input->quad_list.size(), output->quad_list.size()); | |
| 404 EXPECT_EQ(input->shared_quad_state_list.size(), | |
| 405 output->shared_quad_state_list.size()); | |
| 406 EXPECT_EQ(id, output->id); | |
| 407 EXPECT_EQ(output_rect, output->output_rect); | |
| 408 EXPECT_EQ(damage_rect, output->damage_rect); | |
| 409 EXPECT_EQ(transform_to_root, output->transform_to_root_target); | |
| 410 EXPECT_EQ(has_transparent_background, output->has_transparent_background); | |
| 411 | |
| 412 SharedQuadState* out_sqs = output->shared_quad_state_list.ElementAt(0); | |
| 413 EXPECT_EQ(shared_state->quad_to_target_transform, | |
| 414 out_sqs->quad_to_target_transform); | |
| 415 EXPECT_EQ(shared_state->quad_layer_bounds, out_sqs->quad_layer_bounds); | |
| 416 EXPECT_EQ(shared_state->visible_quad_layer_rect, | |
| 417 out_sqs->visible_quad_layer_rect); | |
| 418 EXPECT_EQ(shared_state->clip_rect, out_sqs->clip_rect); | |
| 419 EXPECT_EQ(shared_state->is_clipped, out_sqs->is_clipped); | |
| 420 EXPECT_EQ(shared_state->opacity, out_sqs->opacity); | |
| 421 EXPECT_EQ(shared_state->blend_mode, out_sqs->blend_mode); | |
| 422 EXPECT_EQ(shared_state->sorting_context_id, out_sqs->sorting_context_id); | |
| 423 | |
| 424 DrawQuad* out_draw_quad = output->quad_list.ElementAt(0); | |
|
danakj
2016/06/22 00:05:09
Can you test with multiple quads in 1 SQS, and mul
Fady Samuel
2016/06/22 20:08:14
Done.
| |
| 425 EXPECT_EQ(out_draw_quad->shared_quad_state, out_sqs); | |
| 345 } | 426 } |
| 346 | 427 |
| 347 TEST_F(StructTraitsTest, RenderPassId) { | 428 TEST_F(StructTraitsTest, RenderPassId) { |
| 348 const int layer_id = 1337; | 429 const int layer_id = 1337; |
| 349 const uint32_t index = 0xdeadbeef; | 430 const uint32_t index = 0xdeadbeef; |
| 350 RenderPassId input(layer_id, index); | 431 RenderPassId input(layer_id, index); |
| 351 mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); | 432 mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); |
| 352 RenderPassId output; | 433 RenderPassId output; |
| 353 proxy->EchoRenderPassId(input, &output); | 434 proxy->EchoRenderPassId(input, &output); |
| 354 EXPECT_EQ(layer_id, output.layer_id); | 435 EXPECT_EQ(layer_id, output.layer_id); |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 558 EXPECT_EQ(y_plane_resource_id, out_quad->y_plane_resource_id()); | 639 EXPECT_EQ(y_plane_resource_id, out_quad->y_plane_resource_id()); |
| 559 EXPECT_EQ(u_plane_resource_id, out_quad->u_plane_resource_id()); | 640 EXPECT_EQ(u_plane_resource_id, out_quad->u_plane_resource_id()); |
| 560 EXPECT_EQ(v_plane_resource_id, out_quad->v_plane_resource_id()); | 641 EXPECT_EQ(v_plane_resource_id, out_quad->v_plane_resource_id()); |
| 561 EXPECT_EQ(a_plane_resource_id, out_quad->a_plane_resource_id()); | 642 EXPECT_EQ(a_plane_resource_id, out_quad->a_plane_resource_id()); |
| 562 EXPECT_EQ(color_space, out_quad->color_space); | 643 EXPECT_EQ(color_space, out_quad->color_space); |
| 563 EXPECT_EQ(resource_offset, out_quad->resource_offset); | 644 EXPECT_EQ(resource_offset, out_quad->resource_offset); |
| 564 EXPECT_EQ(resource_multiplier, out_quad->resource_multiplier); | 645 EXPECT_EQ(resource_multiplier, out_quad->resource_multiplier); |
| 565 } | 646 } |
| 566 | 647 |
| 567 } // namespace cc | 648 } // namespace cc |
| OLD | NEW |