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

Side by Side Diff: cc/layers/delegated_renderer_layer_impl_unittest.cc

Issue 313403005: Revert of Invert DSF to map from delegated frame to layer space (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « cc/layers/delegated_renderer_layer_impl.cc ('k') | cc/output/delegated_frame_data.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 "cc/layers/delegated_renderer_layer_impl.h" 5 #include "cc/layers/delegated_renderer_layer_impl.h"
6 6
7 #include "cc/base/scoped_ptr_vector.h" 7 #include "cc/base/scoped_ptr_vector.h"
8 #include "cc/layers/quad_sink.h" 8 #include "cc/layers/quad_sink.h"
9 #include "cc/layers/solid_color_layer_impl.h" 9 #include "cc/layers/solid_color_layer_impl.h"
10 #include "cc/quads/render_pass_draw_quad.h" 10 #include "cc/quads/render_pass_draw_quad.h"
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 gfx::Rect(7, 7, 7, 7), 102 gfx::Rect(7, 7, 7, 7),
103 gfx::Transform(1, 0, 0, 1, 7, 8)); 103 gfx::Transform(1, 0, 0, 1, 7, 8));
104 AddQuad(pass2, gfx::Rect(0, 0, 7, 7), 22u); 104 AddQuad(pass2, gfx::Rect(0, 0, 7, 7), 22u);
105 AddRenderPassQuad(pass2, pass1); 105 AddRenderPassQuad(pass2, pass1);
106 TestRenderPass* pass3 = AddRenderPass(&delegated_render_passes, 106 TestRenderPass* pass3 = AddRenderPass(&delegated_render_passes,
107 RenderPass::Id(9, 8), 107 RenderPass::Id(9, 8),
108 gfx::Rect(0, 0, 8, 8), 108 gfx::Rect(0, 0, 8, 8),
109 gfx::Transform(1, 0, 0, 1, 9, 10)); 109 gfx::Transform(1, 0, 0, 1, 9, 10));
110 AddRenderPassQuad(pass3, pass2); 110 AddRenderPassQuad(pass3, pass2);
111 delegated_renderer_layer->SetFrameDataForRenderPasses( 111 delegated_renderer_layer->SetFrameDataForRenderPasses(
112 1.f, &delegated_render_passes); 112 &delegated_render_passes);
113 113
114 // The RenderPasses should be taken by the layer. 114 // The RenderPasses should be taken by the layer.
115 EXPECT_EQ(0u, delegated_render_passes.size()); 115 EXPECT_EQ(0u, delegated_render_passes.size());
116 116
117 root_layer_ = root_layer.get(); 117 root_layer_ = root_layer.get();
118 layer_before_ = layer_before.get(); 118 layer_before_ = layer_before.get();
119 layer_after_ = layer_after.get(); 119 layer_after_ = layer_after.get();
120 delegated_renderer_layer_ = delegated_renderer_layer.get(); 120 delegated_renderer_layer_ = delegated_renderer_layer.get();
121 121
122 // Force the delegated RenderPasses to come before the RenderPass from 122 // Force the delegated RenderPasses to come before the RenderPass from
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 LayerTreeHostImpl::FrameData frame; 238 LayerTreeHostImpl::FrameData frame;
239 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 239 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
240 240
241 // Each non-DelegatedRendererLayer added one RenderPass. The 241 // Each non-DelegatedRendererLayer added one RenderPass. The
242 // DelegatedRendererLayer added two contributing passes. 242 // DelegatedRendererLayer added two contributing passes.
243 ASSERT_EQ(5u, frame.render_passes.size()); 243 ASSERT_EQ(5u, frame.render_passes.size());
244 244
245 // The DelegatedRendererLayer is at position 3,3 compared to its target, and 245 // The DelegatedRendererLayer is at position 3,3 compared to its target, and
246 // has a translation transform of 1,1. So its root RenderPass' quads should 246 // has a translation transform of 1,1. So its root RenderPass' quads should
247 // all be transformed by that combined amount. 247 // all be transformed by that combined amount.
248 // The DelegatedRendererLayer has a size of 10x10, but the root delegated
249 // RenderPass has a size of 8x8, so any quads should be scaled by 10/8.
248 gfx::Transform transform; 250 gfx::Transform transform;
249 transform.Translate(4.0, 4.0); 251 transform.Translate(4.0, 4.0);
252 transform.Scale(10.0 / 8.0, 10.0 / 8.0);
250 EXPECT_TRANSFORMATION_MATRIX_EQ( 253 EXPECT_TRANSFORMATION_MATRIX_EQ(
251 transform, frame.render_passes[3]->quad_list[0]->quadTransform()); 254 transform, frame.render_passes[3]->quad_list[0]->quadTransform());
252 255
253 // Quads from non-root RenderPasses should not be shifted though. 256 // Quads from non-root RenderPasses should not be shifted though.
254 ASSERT_EQ(2u, frame.render_passes[2]->quad_list.size()); 257 ASSERT_EQ(2u, frame.render_passes[2]->quad_list.size());
255 EXPECT_TRANSFORMATION_MATRIX_EQ( 258 EXPECT_TRANSFORMATION_MATRIX_EQ(
256 gfx::Transform(), frame.render_passes[2]->quad_list[0]->quadTransform()); 259 gfx::Transform(), frame.render_passes[2]->quad_list[0]->quadTransform());
257 EXPECT_TRANSFORMATION_MATRIX_EQ( 260 EXPECT_TRANSFORMATION_MATRIX_EQ(
258 gfx::Transform(), frame.render_passes[2]->quad_list[1]->quadTransform()); 261 gfx::Transform(), frame.render_passes[2]->quad_list[1]->quadTransform());
259 ASSERT_EQ(1u, frame.render_passes[1]->quad_list.size()); 262 ASSERT_EQ(1u, frame.render_passes[1]->quad_list.size());
(...skipping 10 matching lines...) Expand all
270 273
271 // The delegated layer has a surface between it and the root. 274 // The delegated layer has a surface between it and the root.
272 EXPECT_TRUE(delegated_renderer_layer_->render_target()->parent()); 275 EXPECT_TRUE(delegated_renderer_layer_->render_target()->parent());
273 276
274 // Each non-DelegatedRendererLayer added one RenderPass. The 277 // Each non-DelegatedRendererLayer added one RenderPass. The
275 // DelegatedRendererLayer added two contributing passes. 278 // DelegatedRendererLayer added two contributing passes.
276 ASSERT_EQ(5u, frame.render_passes.size()); 279 ASSERT_EQ(5u, frame.render_passes.size());
277 280
278 // The DelegatedRendererLayer is at position 9,9 compared to the root, so all 281 // The DelegatedRendererLayer is at position 9,9 compared to the root, so all
279 // render pass' transforms to the root should be shifted by this amount. 282 // render pass' transforms to the root should be shifted by this amount.
283 // The DelegatedRendererLayer has a size of 10x10, but the root delegated
284 // RenderPass has a size of 8x8, so any render passes should be scaled by
285 // 10/8.
280 gfx::Transform transform; 286 gfx::Transform transform;
281 transform.Translate(9.0, 9.0); 287 transform.Translate(9.0, 9.0);
288 transform.Scale(10.0 / 8.0, 10.0 / 8.0);
282 289
283 // The first contributing surface has a translation of 5, 6. 290 // The first contributing surface has a translation of 5, 6.
284 gfx::Transform five_six(1, 0, 0, 1, 5, 6); 291 gfx::Transform five_six(1, 0, 0, 1, 5, 6);
285 292
286 // The second contributing surface has a translation of 7, 8. 293 // The second contributing surface has a translation of 7, 8.
287 gfx::Transform seven_eight(1, 0, 0, 1, 7, 8); 294 gfx::Transform seven_eight(1, 0, 0, 1, 7, 8);
288 295
289 EXPECT_TRANSFORMATION_MATRIX_EQ( 296 EXPECT_TRANSFORMATION_MATRIX_EQ(
290 transform * five_six, frame.render_passes[1]->transform_to_root_target); 297 transform * five_six, frame.render_passes[1]->transform_to_root_target);
291 EXPECT_TRANSFORMATION_MATRIX_EQ( 298 EXPECT_TRANSFORMATION_MATRIX_EQ(
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 QuadsFromRootRenderPassAreNotModifiedForTheTarget) { 461 QuadsFromRootRenderPassAreNotModifiedForTheTarget) {
455 LayerTreeHostImpl::FrameData frame; 462 LayerTreeHostImpl::FrameData frame;
456 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 463 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
457 464
458 // Each non-DelegatedRendererLayer added one RenderPass. The 465 // Each non-DelegatedRendererLayer added one RenderPass. The
459 // DelegatedRendererLayer added two contributing passes and its owned surface 466 // DelegatedRendererLayer added two contributing passes and its owned surface
460 // added one pass. 467 // added one pass.
461 ASSERT_EQ(6u, frame.render_passes.size()); 468 ASSERT_EQ(6u, frame.render_passes.size());
462 469
463 // Because the DelegatedRendererLayer owns a RenderSurfaceImpl, its root 470 // Because the DelegatedRendererLayer owns a RenderSurfaceImpl, its root
464 // RenderPass' quads do not need to be translated at all. 471 // RenderPass' quads do not need to be translated at all. However, they are
472 // scaled from the frame's size (8x8) to the layer's bounds (10x10).
473 gfx::Transform transform;
474 transform.Scale(10.0 / 8.0, 10.0 / 8.0);
465 EXPECT_TRANSFORMATION_MATRIX_EQ( 475 EXPECT_TRANSFORMATION_MATRIX_EQ(
466 gfx::Transform(), frame.render_passes[3]->quad_list[0]->quadTransform()); 476 transform, frame.render_passes[3]->quad_list[0]->quadTransform());
467 477
468 // Quads from non-root RenderPasses should not be shifted either. 478 // Quads from non-root RenderPasses should not be shifted either.
469 ASSERT_EQ(2u, frame.render_passes[2]->quad_list.size()); 479 ASSERT_EQ(2u, frame.render_passes[2]->quad_list.size());
470 EXPECT_TRANSFORMATION_MATRIX_EQ( 480 EXPECT_TRANSFORMATION_MATRIX_EQ(
471 gfx::Transform(), frame.render_passes[2]->quad_list[0]->quadTransform()); 481 gfx::Transform(), frame.render_passes[2]->quad_list[0]->quadTransform());
472 EXPECT_TRANSFORMATION_MATRIX_EQ( 482 EXPECT_TRANSFORMATION_MATRIX_EQ(
473 gfx::Transform(), frame.render_passes[2]->quad_list[1]->quadTransform()); 483 gfx::Transform(), frame.render_passes[2]->quad_list[1]->quadTransform());
474 ASSERT_EQ(1u, frame.render_passes[1]->quad_list.size()); 484 ASSERT_EQ(1u, frame.render_passes[1]->quad_list.size());
475 EXPECT_TRANSFORMATION_MATRIX_EQ( 485 EXPECT_TRANSFORMATION_MATRIX_EQ(
476 gfx::Transform(), frame.render_passes[1]->quad_list[0]->quadTransform()); 486 gfx::Transform(), frame.render_passes[1]->quad_list[0]->quadTransform());
477 487
478 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 488 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
479 host_impl_->DidDrawAllLayers(frame); 489 host_impl_->DidDrawAllLayers(frame);
480 } 490 }
481 491
482 class DelegatedRendererLayerImplTestTransform 492 class DelegatedRendererLayerImplTestTransform
483 : public DelegatedRendererLayerImplTest { 493 : public DelegatedRendererLayerImplTest {
484 public: 494 public:
485 DelegatedRendererLayerImplTestTransform()
486 : root_delegated_render_pass_is_clipped_(false),
487 delegated_device_scale_factor_(2.f) {}
488
489 void SetUpTest() { 495 void SetUpTest() {
490 host_impl_->SetDeviceScaleFactor(2.f); 496 host_impl_->SetDeviceScaleFactor(2.f);
491 497
492 scoped_ptr<LayerImpl> root_layer = LayerImpl::Create( 498 scoped_ptr<LayerImpl> root_layer = LayerImpl::Create(
493 host_impl_->active_tree(), 1); 499 host_impl_->active_tree(), 1);
494 scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer = 500 scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer =
495 FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 2); 501 FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 2);
496 502
497 host_impl_->SetViewportSize(gfx::Size(200, 200)); 503 host_impl_->SetViewportSize(gfx::Size(200, 200));
498 root_layer->SetBounds(gfx::Size(100, 100)); 504 root_layer->SetBounds(gfx::Size(100, 100));
499 505
500 delegated_renderer_layer->SetPosition(gfx::Point(20, 20)); 506 delegated_renderer_layer->SetPosition(gfx::Point(20, 20));
501 delegated_renderer_layer->SetBounds(gfx::Size(75, 75)); 507 delegated_renderer_layer->SetBounds(gfx::Size(75, 75));
502 delegated_renderer_layer->SetContentBounds(gfx::Size(75, 75)); 508 delegated_renderer_layer->SetContentBounds(gfx::Size(75, 75));
503 delegated_renderer_layer->SetDrawsContent(true); 509 delegated_renderer_layer->SetDrawsContent(true);
504 gfx::Transform transform; 510 gfx::Transform transform;
505 transform.Scale(2.0, 2.0); 511 transform.Scale(2.0, 2.0);
506 transform.Translate(8.0, 8.0); 512 transform.Translate(8.0, 8.0);
507 delegated_renderer_layer->SetTransform(transform); 513 delegated_renderer_layer->SetTransform(transform);
514 delegated_renderer_layer->SetTransformOrigin(
515 gfx::Point3F(75 * 0.5f, 75 * 0.5f, 0.0f));
508 516
509 ScopedPtrVector<RenderPass> delegated_render_passes; 517 ScopedPtrVector<RenderPass> delegated_render_passes;
510 518
511 gfx::Size child_pass_content_bounds(7, 7); 519 gfx::Size child_pass_content_bounds(7, 7);
512 gfx::Rect child_pass_rect(20, 20, 7, 7); 520 gfx::Rect child_pass_rect(20, 20, 7, 7);
513 gfx::Transform child_pass_transform; 521 gfx::Transform child_pass_transform;
514 child_pass_transform.Scale(0.8f, 0.8f); 522 child_pass_transform.Scale(0.8f, 0.8f);
515 child_pass_transform.Translate(9.0, 9.0); 523 child_pass_transform.Translate(9.0, 9.0);
516 gfx::Rect child_pass_clip_rect(21, 21, 3, 3); 524 gfx::Rect child_pass_clip_rect(21, 21, 3, 3);
517 bool child_pass_clipped = false; 525 bool child_pass_clipped = false;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 622
615 color_quad = SolidColorDrawQuad::Create(); 623 color_quad = SolidColorDrawQuad::Create();
616 color_quad->SetNew(shared_quad_state, 624 color_quad->SetNew(shared_quad_state,
617 gfx::Rect(10, 10, 10, 10), 625 gfx::Rect(10, 10, 10, 10),
618 gfx::Rect(10, 10, 10, 10), 626 gfx::Rect(10, 10, 10, 10),
619 4u, 627 4u,
620 false); 628 false);
621 pass->AppendDrawQuad(color_quad.PassAs<DrawQuad>()); 629 pass->AppendDrawQuad(color_quad.PassAs<DrawQuad>());
622 630
623 delegated_renderer_layer->SetFrameDataForRenderPasses( 631 delegated_renderer_layer->SetFrameDataForRenderPasses(
624 delegated_device_scale_factor_, &delegated_render_passes); 632 &delegated_render_passes);
625 633
626 // The RenderPasses should be taken by the layer. 634 // The RenderPasses should be taken by the layer.
627 EXPECT_EQ(0u, delegated_render_passes.size()); 635 EXPECT_EQ(0u, delegated_render_passes.size());
628 636
629 root_layer_ = root_layer.get(); 637 root_layer_ = root_layer.get();
630 delegated_renderer_layer_ = delegated_renderer_layer.get(); 638 delegated_renderer_layer_ = delegated_renderer_layer.get();
631 639
632 root_layer->AddChild(delegated_renderer_layer.PassAs<LayerImpl>()); 640 root_layer->AddChild(delegated_renderer_layer.PassAs<LayerImpl>());
633 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); 641 host_impl_->active_tree()->SetRootLayer(root_layer.Pass());
634 } 642 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 root_delegated_quad_list[4]->shared_quad_state); 680 root_delegated_quad_list[4]->shared_quad_state);
673 681
674 EXPECT_NE(*contrib_delegated_shared_quad_state, 682 EXPECT_NE(*contrib_delegated_shared_quad_state,
675 *root_delegated_shared_quad_state); 683 *root_delegated_shared_quad_state);
676 } 684 }
677 685
678 protected: 686 protected:
679 LayerImpl* root_layer_; 687 LayerImpl* root_layer_;
680 DelegatedRendererLayerImpl* delegated_renderer_layer_; 688 DelegatedRendererLayerImpl* delegated_renderer_layer_;
681 bool root_delegated_render_pass_is_clipped_; 689 bool root_delegated_render_pass_is_clipped_;
682 float delegated_device_scale_factor_;
683 }; 690 };
684 691
685 TEST_F(DelegatedRendererLayerImplTestTransform, QuadsUnclipped_NoSurface) { 692 TEST_F(DelegatedRendererLayerImplTestTransform, QuadsUnclipped_NoSurface) {
686 root_delegated_render_pass_is_clipped_ = false; 693 root_delegated_render_pass_is_clipped_ = false;
687 SetUpTest(); 694 SetUpTest();
688 695
689 LayerTreeHostImpl::FrameData frame; 696 LayerTreeHostImpl::FrameData frame;
690 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 697 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
691 698
692 const SharedQuadState* root_delegated_shared_quad_state = NULL; 699 const SharedQuadState* root_delegated_shared_quad_state = NULL;
693 const SharedQuadState* contrib_delegated_shared_quad_state = NULL; 700 const SharedQuadState* contrib_delegated_shared_quad_state = NULL;
694 VerifyRenderPasses( 701 VerifyRenderPasses(
695 frame, 702 frame,
696 2, 703 2,
697 &root_delegated_shared_quad_state, 704 &root_delegated_shared_quad_state,
698 &contrib_delegated_shared_quad_state); 705 &contrib_delegated_shared_quad_state);
699 706
700 // When the quads don't have a clip of their own, the clip rect is set to 707 // When the quads don't have a clip of their own, the clip rect is set to
701 // the drawable_content_rect of the delegated renderer layer. 708 // the drawable_content_rect of the delegated renderer layer.
702 EXPECT_EQ(delegated_renderer_layer_->drawable_content_rect().ToString(), 709 EXPECT_EQ(delegated_renderer_layer_->drawable_content_rect().ToString(),
703 root_delegated_shared_quad_state->clip_rect.ToString()); 710 root_delegated_shared_quad_state->clip_rect.ToString());
704 711
705 // Even though the quads in the root pass have no clip of their own, they 712 // Even though the quads in the root pass have no clip of their own, they
706 // inherit the clip rect from the delegated renderer layer if it does not 713 // inherit the clip rect from the delegated renderer layer if it does not
707 // own a surface. 714 // own a surface.
708 EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped); 715 EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped);
709 716
710 gfx::Transform expected; 717 gfx::Transform expected;
711 // Device scale factor. 718 // Device scale factor is 2.
712 expected.Scale(2.0, 2.0); 719 expected.Scale(2.0, 2.0);
713 // This is the transform from the layer's space to its target. 720 // This is the transform from the layer's space to its target.
714 expected.Translate(20, 20); 721 // The position (20) - the width / scale (75 / 2) = 20 - 37.5 = -17.5
722 expected.Translate(-17.5, -17.5);
715 expected.Scale(2.0, 2.0); 723 expected.Scale(2.0, 2.0);
716 expected.Translate(8.0, 8.0); 724 expected.Translate(8.0, 8.0);
725 // The frame has size 100x100 but the layer's bounds are 75x75.
726 expected.Scale(75.0 / 100.0, 75.0 / 100.0);
717 // This is the transform within the source frame. 727 // This is the transform within the source frame.
718 // Inverse device scale factor to go from physical space to layer space.
719 expected.Scale(0.5, 0.5);
720 expected.Scale(1.5, 1.5); 728 expected.Scale(1.5, 1.5);
721 expected.Translate(7.0, 7.0); 729 expected.Translate(7.0, 7.0);
722 EXPECT_TRANSFORMATION_MATRIX_EQ( 730 EXPECT_TRANSFORMATION_MATRIX_EQ(
723 expected, root_delegated_shared_quad_state->content_to_target_transform); 731 expected, root_delegated_shared_quad_state->content_to_target_transform);
724 732
725 // The contributing render pass should not be transformed from its input. 733 // The contributing render pass should not be transformed from its input.
726 EXPECT_EQ(gfx::Rect(21, 21, 3, 3).ToString(), 734 EXPECT_EQ(gfx::Rect(21, 21, 3, 3).ToString(),
727 contrib_delegated_shared_quad_state->clip_rect.ToString()); 735 contrib_delegated_shared_quad_state->clip_rect.ToString());
728 EXPECT_FALSE(contrib_delegated_shared_quad_state->is_clipped); 736 EXPECT_FALSE(contrib_delegated_shared_quad_state->is_clipped);
729 expected.MakeIdentity(); 737 expected.MakeIdentity();
(...skipping 18 matching lines...) Expand all
748 const SharedQuadState* contrib_delegated_shared_quad_state = NULL; 756 const SharedQuadState* contrib_delegated_shared_quad_state = NULL;
749 VerifyRenderPasses( 757 VerifyRenderPasses(
750 frame, 758 frame,
751 2, 759 2,
752 &root_delegated_shared_quad_state, 760 &root_delegated_shared_quad_state,
753 &contrib_delegated_shared_quad_state); 761 &contrib_delegated_shared_quad_state);
754 762
755 // Since the quads have a clip_rect it should be modified by delegated 763 // Since the quads have a clip_rect it should be modified by delegated
756 // renderer layer's draw_transform. 764 // renderer layer's draw_transform.
757 // The position of the resulting clip_rect is: 765 // The position of the resulting clip_rect is:
758 // (clip rect position (10) * inverse dsf (1/2) + translate (8)) * 766 // (clip rect position (10) * scale to layer (75/100) + translate (8)) *
759 // layer scale (2) + layer position (20) = 46 767 // layer scale (2) + layer position (20) = 51
760 // The device scale is 2, so everything gets doubled, giving 92. 768 // But the layer is centered, so: 51 - (75 / 2) = 51 - 75 / 2 = 13.5
769 // The device scale is 2, so everything gets doubled, giving 27.
761 // 770 //
762 // The size is 35x35 scaled by the device scale. 771 // The size is 35x35 scaled to fit inside the layer's bounds at 75x75 from
763 EXPECT_EQ(gfx::Rect(92, 92, 70, 70).ToString(), 772 // a frame at 100x100: 35 * 2 (device scale) * 75 / 100 = 52.5. The device
773 // scale doubles this to 105.
774 EXPECT_EQ(gfx::Rect(27, 27, 105, 105).ToString(),
764 root_delegated_shared_quad_state->clip_rect.ToString()); 775 root_delegated_shared_quad_state->clip_rect.ToString());
765 776
766 // The quads had a clip and it should be preserved. 777 // The quads had a clip and it should be preserved.
767 EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped); 778 EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped);
768 779
769 gfx::Transform expected; 780 gfx::Transform expected;
770 // Device scale factor. 781 // Device scale factor is 2.
771 expected.Scale(2.0, 2.0); 782 expected.Scale(2.0, 2.0);
772 // This is the transform from the layer's space to its target. 783 // This is the transform from the layer's space to its target.
773 expected.Translate(20, 20); 784 // The position (20) - the width / scale (75 / 2) = 20 - 37.5 = -17.5
785 expected.Translate(-17.5, -17.5);
774 expected.Scale(2.0, 2.0); 786 expected.Scale(2.0, 2.0);
775 expected.Translate(8.0, 8.0); 787 expected.Translate(8.0, 8.0);
788 // The frame has size 100x100 but the layer's bounds are 75x75.
789 expected.Scale(75.0 / 100.0, 75.0 / 100.0);
776 // This is the transform within the source frame. 790 // This is the transform within the source frame.
777 // Inverse device scale factor to go from physical space to layer space.
778 expected.Scale(0.5, 0.5);
779 expected.Scale(1.5, 1.5); 791 expected.Scale(1.5, 1.5);
780 expected.Translate(7.0, 7.0); 792 expected.Translate(7.0, 7.0);
781 EXPECT_TRANSFORMATION_MATRIX_EQ( 793 EXPECT_TRANSFORMATION_MATRIX_EQ(
782 expected, root_delegated_shared_quad_state->content_to_target_transform); 794 expected, root_delegated_shared_quad_state->content_to_target_transform);
783 795
784 // The contributing render pass should not be transformed from its input. 796 // The contributing render pass should not be transformed from its input.
785 EXPECT_EQ(gfx::Rect(21, 21, 3, 3).ToString(), 797 EXPECT_EQ(gfx::Rect(21, 21, 3, 3).ToString(),
786 contrib_delegated_shared_quad_state->clip_rect.ToString()); 798 contrib_delegated_shared_quad_state->clip_rect.ToString());
787 EXPECT_FALSE(contrib_delegated_shared_quad_state->is_clipped); 799 EXPECT_FALSE(contrib_delegated_shared_quad_state->is_clipped);
788 expected.MakeIdentity(); 800 expected.MakeIdentity();
(...skipping 19 matching lines...) Expand all
808 const SharedQuadState* root_delegated_shared_quad_state = NULL; 820 const SharedQuadState* root_delegated_shared_quad_state = NULL;
809 const SharedQuadState* contrib_delegated_shared_quad_state = NULL; 821 const SharedQuadState* contrib_delegated_shared_quad_state = NULL;
810 VerifyRenderPasses( 822 VerifyRenderPasses(
811 frame, 823 frame,
812 3, 824 3,
813 &root_delegated_shared_quad_state, 825 &root_delegated_shared_quad_state,
814 &contrib_delegated_shared_quad_state); 826 &contrib_delegated_shared_quad_state);
815 827
816 // When the layer owns a surface, then its position and translation are not 828 // When the layer owns a surface, then its position and translation are not
817 // a part of its draw transform. 829 // a part of its draw transform.
818 EXPECT_EQ(gfx::Rect(10, 10, 35, 35).ToString(), 830 // The position of the resulting clip_rect is:
831 // (clip rect position (10) * scale to layer (75/100)) * device scale (2) = 15
832 // The size is 35x35 scaled to fit inside the layer's bounds at 75x75 from
833 // a frame at 100x100: 35 * 2 (device scale) * 75 / 100 = 52.5.
834 EXPECT_EQ(gfx::Rect(15, 15, 53, 53).ToString(),
819 root_delegated_shared_quad_state->clip_rect.ToString()); 835 root_delegated_shared_quad_state->clip_rect.ToString());
820 836
821 // Since the layer owns a surface it doesn't need to clip its quads, so 837 // Since the layer owns a surface it doesn't need to clip its quads, so
822 // unclipped quads remain unclipped. 838 // unclipped quads remain unclipped.
823 EXPECT_FALSE(root_delegated_shared_quad_state->is_clipped); 839 EXPECT_FALSE(root_delegated_shared_quad_state->is_clipped);
824 840
825 gfx::Transform expected; 841 gfx::Transform expected;
842 // Device scale factor is 2.
843 expected.Scale(2.0, 2.0);
844 // The frame has size 100x100 but the layer's bounds are 75x75.
845 expected.Scale(75.0 / 100.0, 75.0 / 100.0);
826 // This is the transform within the source frame. 846 // This is the transform within the source frame.
827 expected.Scale(1.5, 1.5); 847 expected.Scale(1.5, 1.5);
828 expected.Translate(7.0, 7.0); 848 expected.Translate(7.0, 7.0);
829 EXPECT_TRANSFORMATION_MATRIX_EQ( 849 EXPECT_TRANSFORMATION_MATRIX_EQ(
830 expected, root_delegated_shared_quad_state->content_to_target_transform); 850 expected, root_delegated_shared_quad_state->content_to_target_transform);
831 851
832 // The contributing render pass should not be transformed from its input. 852 // The contributing render pass should not be transformed from its input.
833 EXPECT_EQ(gfx::Rect(21, 21, 3, 3).ToString(), 853 EXPECT_EQ(gfx::Rect(21, 21, 3, 3).ToString(),
834 contrib_delegated_shared_quad_state->clip_rect.ToString()); 854 contrib_delegated_shared_quad_state->clip_rect.ToString());
835 EXPECT_FALSE(contrib_delegated_shared_quad_state->is_clipped); 855 EXPECT_FALSE(contrib_delegated_shared_quad_state->is_clipped);
(...skipping 19 matching lines...) Expand all
855 875
856 const SharedQuadState* root_delegated_shared_quad_state = NULL; 876 const SharedQuadState* root_delegated_shared_quad_state = NULL;
857 const SharedQuadState* contrib_delegated_shared_quad_state = NULL; 877 const SharedQuadState* contrib_delegated_shared_quad_state = NULL;
858 VerifyRenderPasses( 878 VerifyRenderPasses(
859 frame, 879 frame,
860 3, 880 3,
861 &root_delegated_shared_quad_state, 881 &root_delegated_shared_quad_state,
862 &contrib_delegated_shared_quad_state); 882 &contrib_delegated_shared_quad_state);
863 883
864 // When the layer owns a surface, then its position and translation are not 884 // When the layer owns a surface, then its position and translation are not
865 // a part of its draw transform. The clip_rect should be preserved. 885 // a part of its draw transform.
866 EXPECT_EQ(gfx::Rect(10, 10, 35, 35).ToString(), 886 // The position of the resulting clip_rect is:
887 // (clip rect position (10) * scale to layer (75/100)) * device scale (2) = 15
888 // The size is 35x35 scaled to fit inside the layer's bounds at 75x75 from
889 // a frame at 100x100: 35 * 2 (device scale) * 75 / 100 = 52.5.
890 EXPECT_EQ(gfx::Rect(15, 15, 53, 53).ToString(),
867 root_delegated_shared_quad_state->clip_rect.ToString()); 891 root_delegated_shared_quad_state->clip_rect.ToString());
868 892
869 // The quads had a clip and it should be preserved. 893 // The quads had a clip and it should be preserved.
870 EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped); 894 EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped);
871 895
872 gfx::Transform expected; 896 gfx::Transform expected;
897 // Device scale factor is 2.
898 expected.Scale(2.0, 2.0);
899 // The frame has size 100x100 but the layer's bounds are 75x75.
900 expected.Scale(75.0 / 100.0, 75.0 / 100.0);
873 // This is the transform within the source frame. 901 // This is the transform within the source frame.
874 expected.Scale(1.5, 1.5); 902 expected.Scale(1.5, 1.5);
875 expected.Translate(7.0, 7.0); 903 expected.Translate(7.0, 7.0);
876 EXPECT_TRANSFORMATION_MATRIX_EQ( 904 EXPECT_TRANSFORMATION_MATRIX_EQ(
877 expected, root_delegated_shared_quad_state->content_to_target_transform); 905 expected, root_delegated_shared_quad_state->content_to_target_transform);
878 906
879 // The contributing render pass should not be transformed from its input. 907 // The contributing render pass should not be transformed from its input.
880 EXPECT_EQ(gfx::Rect(21, 21, 3, 3).ToString(), 908 EXPECT_EQ(gfx::Rect(21, 21, 3, 3).ToString(),
881 contrib_delegated_shared_quad_state->clip_rect.ToString()); 909 contrib_delegated_shared_quad_state->clip_rect.ToString());
882 EXPECT_FALSE(contrib_delegated_shared_quad_state->is_clipped); 910 EXPECT_FALSE(contrib_delegated_shared_quad_state->is_clipped);
883 expected.MakeIdentity(); 911 expected.MakeIdentity();
884 expected.Scale(0.8f, 0.8f); 912 expected.Scale(0.8f, 0.8f);
885 expected.Translate(9.0, 9.0); 913 expected.Translate(9.0, 9.0);
886 EXPECT_TRANSFORMATION_MATRIX_EQ( 914 EXPECT_TRANSFORMATION_MATRIX_EQ(
887 expected, 915 expected,
888 contrib_delegated_shared_quad_state->content_to_target_transform); 916 contrib_delegated_shared_quad_state->content_to_target_transform);
889 917
890 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 918 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
891 host_impl_->DidDrawAllLayers(frame); 919 host_impl_->DidDrawAllLayers(frame);
892 }
893
894 TEST_F(DelegatedRendererLayerImplTestTransform, MismatchedDeviceScaleFactor) {
895 root_delegated_render_pass_is_clipped_ = true;
896 delegated_device_scale_factor_ = 1.3f;
897
898 SetUpTest();
899
900 LayerTreeHostImpl::FrameData frame;
901 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
902
903 const SharedQuadState* root_delegated_shared_quad_state = NULL;
904 const SharedQuadState* contrib_delegated_shared_quad_state = NULL;
905 VerifyRenderPasses(frame,
906 2,
907 &root_delegated_shared_quad_state,
908 &contrib_delegated_shared_quad_state);
909
910 // The parent tree's device scale factor is 2.0, but the child has submitted a
911 // frame with a device scale factor of 1.3. Absent any better option, the
912 // only thing we can do is scale from 1.3 -> 2.0.
913
914 gfx::Transform expected;
915 // Device scale factor (from parent).
916 expected.Scale(2.0, 2.0);
917 // This is the transform from the layer's space to its target.
918 expected.Translate(20, 20);
919 expected.Scale(2.0, 2.0);
920 expected.Translate(8.0, 8.0);
921 // This is the transform within the source frame.
922 // Inverse device scale factor (from child).
923 expected.Scale(1.0f / 1.3f, 1.0f / 1.3f);
924 expected.Scale(1.5, 1.5);
925 expected.Translate(7.0, 7.0);
926 EXPECT_TRANSFORMATION_MATRIX_EQ(
927 expected, root_delegated_shared_quad_state->content_to_target_transform);
928
929 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
930 host_impl_->DidDrawAllLayers(frame);
931 } 920 }
932 921
933 class DelegatedRendererLayerImplTestClip 922 class DelegatedRendererLayerImplTestClip
934 : public DelegatedRendererLayerImplTest { 923 : public DelegatedRendererLayerImplTest {
935 public: 924 public:
936 void SetUpTest() { 925 void SetUpTest() {
937 scoped_ptr<LayerImpl> root_layer = 926 scoped_ptr<LayerImpl> root_layer =
938 LayerImpl::Create(host_impl_->active_tree(), 1); 927 LayerImpl::Create(host_impl_->active_tree(), 1);
939 scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer = 928 scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer =
940 FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 2); 929 FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 2);
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1055 1044
1056 color_quad = SolidColorDrawQuad::Create(); 1045 color_quad = SolidColorDrawQuad::Create();
1057 color_quad->SetNew(shared_quad_state, 1046 color_quad->SetNew(shared_quad_state,
1058 gfx::Rect(10, 10, 10, 10), 1047 gfx::Rect(10, 10, 10, 10),
1059 gfx::Rect(10, 10, 10, 10), 1048 gfx::Rect(10, 10, 10, 10),
1060 4u, 1049 4u,
1061 false); 1050 false);
1062 pass->AppendDrawQuad(color_quad.PassAs<DrawQuad>()); 1051 pass->AppendDrawQuad(color_quad.PassAs<DrawQuad>());
1063 1052
1064 delegated_renderer_layer->SetFrameDataForRenderPasses( 1053 delegated_renderer_layer->SetFrameDataForRenderPasses(
1065 1.f, &delegated_render_passes); 1054 &delegated_render_passes);
1066 1055
1067 // The RenderPasses should be taken by the layer. 1056 // The RenderPasses should be taken by the layer.
1068 EXPECT_EQ(0u, delegated_render_passes.size()); 1057 EXPECT_EQ(0u, delegated_render_passes.size());
1069 1058
1070 root_layer_ = root_layer.get(); 1059 root_layer_ = root_layer.get();
1071 delegated_renderer_layer_ = delegated_renderer_layer.get(); 1060 delegated_renderer_layer_ = delegated_renderer_layer.get();
1072 1061
1073 if (clip_delegated_renderer_layer_) { 1062 if (clip_delegated_renderer_layer_) {
1074 gfx::Rect clip_rect(21, 27, 23, 21); 1063 gfx::Rect clip_rect(21, 27, 23, 21);
1075 1064
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
1359 scoped_ptr<TestRenderPass> missing_pass(TestRenderPass::Create()); 1348 scoped_ptr<TestRenderPass> missing_pass(TestRenderPass::Create());
1360 missing_pass->SetNew(RenderPass::Id(9, 7), 1349 missing_pass->SetNew(RenderPass::Id(9, 7),
1361 gfx::Rect(7, 7, 7, 7), 1350 gfx::Rect(7, 7, 7, 7),
1362 gfx::Rect(7, 7, 7, 7), 1351 gfx::Rect(7, 7, 7, 7),
1363 gfx::Transform()); 1352 gfx::Transform());
1364 1353
1365 // But a render pass quad refers to it. 1354 // But a render pass quad refers to it.
1366 AddRenderPassQuad(pass1, missing_pass.get()); 1355 AddRenderPassQuad(pass1, missing_pass.get());
1367 1356
1368 delegated_renderer_layer->SetFrameDataForRenderPasses( 1357 delegated_renderer_layer->SetFrameDataForRenderPasses(
1369 1.f, &delegated_render_passes); 1358 &delegated_render_passes);
1370 1359
1371 // The RenderPasses should be taken by the layer. 1360 // The RenderPasses should be taken by the layer.
1372 EXPECT_EQ(0u, delegated_render_passes.size()); 1361 EXPECT_EQ(0u, delegated_render_passes.size());
1373 1362
1374 root_layer->AddChild(delegated_renderer_layer.PassAs<LayerImpl>()); 1363 root_layer->AddChild(delegated_renderer_layer.PassAs<LayerImpl>());
1375 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); 1364 host_impl_->active_tree()->SetRootLayer(root_layer.Pass());
1376 1365
1377 LayerTreeHostImpl::FrameData frame; 1366 LayerTreeHostImpl::FrameData frame;
1378 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); 1367 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
1379 1368
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1412 AddRenderPass(&delegated_render_passes, pass2_id, quad_rect, transform); 1401 AddRenderPass(&delegated_render_passes, pass2_id, quad_rect, transform);
1413 AddQuad(pass2, gfx::Rect(quad_rect.size()), SK_ColorRED); 1402 AddQuad(pass2, gfx::Rect(quad_rect.size()), SK_ColorRED);
1414 // |pass1| covers the whole layer. 1403 // |pass1| covers the whole layer.
1415 RenderPass::Id pass1_id = RenderPass::Id(impl.root_layer()->id(), 0); 1404 RenderPass::Id pass1_id = RenderPass::Id(impl.root_layer()->id(), 0);
1416 TestRenderPass* pass1 = AddRenderPass(&delegated_render_passes, 1405 TestRenderPass* pass1 = AddRenderPass(&delegated_render_passes,
1417 pass1_id, 1406 pass1_id,
1418 gfx::Rect(layer_size), 1407 gfx::Rect(layer_size),
1419 gfx::Transform()); 1408 gfx::Transform());
1420 AddRenderPassQuad(pass1, pass2, 0, FilterOperations(), transform); 1409 AddRenderPassQuad(pass1, pass2, 0, FilterOperations(), transform);
1421 delegated_renderer_layer_impl->SetFrameDataForRenderPasses( 1410 delegated_renderer_layer_impl->SetFrameDataForRenderPasses(
1422 1.f, &delegated_render_passes); 1411 &delegated_render_passes);
1423 1412
1424 impl.CalcDrawProps(viewport_size); 1413 impl.CalcDrawProps(viewport_size);
1425 1414
1426 // The |quad_rect| translated by the |transform|. 1415 // The |quad_rect| translated by the |transform|.
1427 gfx::Rect quad_screen_rect = quad_rect + gfx::Vector2d(11, 0); 1416 gfx::Rect quad_screen_rect = quad_rect + gfx::Vector2d(11, 0);
1428 1417
1429 { 1418 {
1430 SCOPED_TRACE("No occlusion"); 1419 SCOPED_TRACE("No occlusion");
1431 gfx::Rect occluded; 1420 gfx::Rect occluded;
1432 1421
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1515 // The occlusion extends to 500 in the x-axis, pushing the left of the 1504 // The occlusion extends to 500 in the x-axis, pushing the left of the
1516 // visible part of the quad to 500 - 211 = 300 - 11 inside the quad. 1505 // visible part of the quad to 500 - 211 = 300 - 11 inside the quad.
1517 EXPECT_EQ(gfx::Rect(300 - 11, 0, 100 + 11, 500).ToString(), 1506 EXPECT_EQ(gfx::Rect(300 - 11, 0, 100 + 11, 500).ToString(),
1518 impl.quad_list()[0]->visible_rect.ToString()); 1507 impl.quad_list()[0]->visible_rect.ToString());
1519 } 1508 }
1520 } 1509 }
1521 } 1510 }
1522 1511
1523 } // namespace 1512 } // namespace
1524 } // namespace cc 1513 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/delegated_renderer_layer_impl.cc ('k') | cc/output/delegated_frame_data.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698