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 |