Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(705)

Side by Side Diff: cc/ipc/struct_traits_unittest.cc

Issue 2088603002: Implement RenderPass StructTraits (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove unnecessary change Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698