Index: cc/delegated_renderer_layer_impl_unittest.cc |
diff --git a/cc/delegated_renderer_layer_impl_unittest.cc b/cc/delegated_renderer_layer_impl_unittest.cc |
index 56d813659b2e595ed86cace74e075a6223e6161c..18d1d2d129f09ced2672e50606ec67df7e7cdd41 100644 |
--- a/cc/delegated_renderer_layer_impl_unittest.cc |
+++ b/cc/delegated_renderer_layer_impl_unittest.cc |
@@ -88,7 +88,7 @@ public: |
TestRenderPass* pass2 = addRenderPass(delegatedRenderPasses, RenderPass::Id(9, 7), gfx::Rect(7, 7, 7, 7), gfx::Transform()); |
addQuad(pass2, gfx::Rect(0, 0, 7, 7), 22u); |
addRenderPassQuad(pass2, pass1); |
- TestRenderPass* pass3 = addRenderPass(delegatedRenderPasses, RenderPass::Id(9, 8), gfx::Rect(8, 8, 8, 8), gfx::Transform()); |
+ TestRenderPass* pass3 = addRenderPass(delegatedRenderPasses, RenderPass::Id(9, 8), gfx::Rect(0, 0, 8, 8), gfx::Transform()); |
addRenderPassQuad(pass3, pass2); |
delegatedRendererLayer->setRenderPasses(delegatedRenderPasses); |
@@ -210,8 +210,11 @@ TEST_F(DelegatedRendererLayerImplTestSimple, QuadsFromRootRenderPassAreModifiedF |
// The DelegatedRendererLayer is at position 3,3 compared to its target, and has a translation transform of 1,1. |
// So its root RenderPass' quads should all be transformed by that combined amount. |
+ // The DelegatedRendererLayer has a size of 10x10, but the root delegated RenderPass has a size of 8x8, so |
+ // any quads should be scaled by 10/8. |
gfx::Transform transform; |
- transform.Translate(4, 4); |
+ transform.Translate(4.0, 4.0); |
+ transform.Scale(10.0 / 8.0, 10.0 / 8.0); |
EXPECT_TRANSFORMATION_MATRIX_EQ(transform, frame.renderPasses[3]->quad_list[0]->quadTransform()); |
// Quads from non-root RenderPasses should not be shifted though. |
@@ -505,15 +508,22 @@ TEST_F(DelegatedRendererLayerImplTestSharedData, SharedData) |
EXPECT_NE(rootQuadList[0]->shared_quad_state, contribQuadList[0]->shared_quad_state); |
// The state should be transformed only once. |
+ |
// The x/y values are: position (20) + transform (8 * 2) = 36 |
// 36 - (width / 2) = 36 - 30 / 2 = 21 |
- EXPECT_RECT_EQ(gfx::Rect(21, 21, 100, 100), rootSharedState->clipped_rect_in_target); |
- EXPECT_RECT_EQ(gfx::Rect(21, 21, 100, 100), rootSharedState->clip_rect); |
+ // The size is 100 scaled to fit inside the layer's bounds at 30x30 from a frame at 50x50. |
+ // 100 * 30 / 50 = 60. |
+ EXPECT_RECT_EQ(gfx::Rect(21, 21, 60, 60), rootSharedState->clipped_rect_in_target); |
+ EXPECT_RECT_EQ(gfx::Rect(21, 21, 60, 60), rootSharedState->clip_rect); |
gfx::Transform expected; |
+ // This is the transform from the layer's space to its target. |
// The position (20) - the width / scale (30 / 2) = 20 - 15 = 5 |
expected.Translate(5.0, 5.0); |
expected.Scale(2.0, 2.0); |
expected.Translate(8.0, 8.0); |
+ // The frame has size 50x50 but the layer's bounds are 30x30. |
+ expected.Scale(30.0 / 50.0, 30.0 / 50.0); |
+ // This is the transform within the source frame. |
expected.Scale(1.5, 1.5); |
expected.Translate(7.0, 7.0); |
EXPECT_TRANSFORMATION_MATRIX_EQ(expected, rootSharedState->content_to_target_transform); |
@@ -530,5 +540,44 @@ TEST_F(DelegatedRendererLayerImplTestSharedData, SharedData) |
m_hostImpl->didDrawAllLayers(frame); |
} |
+TEST_F(DelegatedRendererLayerImplTestSharedData, DisplaySize) |
+{ |
+ // Cause the layer to scale its output to be larger than its bounds. |
+ m_delegatedRendererLayerPtr->setDisplaySize(gfx::Size(40, 40)); |
+ EXPECT_LT(m_delegatedRendererLayerPtr->bounds().width(), 40); |
+ EXPECT_LT(m_delegatedRendererLayerPtr->bounds().height(), 40); |
+ |
+ LayerTreeHostImpl::FrameData frame; |
+ EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
+ |
+ ASSERT_EQ(2u, frame.renderPasses.size()); |
+ |
+ const QuadList& rootQuadList = frame.renderPasses[1]->quad_list; |
+ ASSERT_EQ(5u, rootQuadList.size()); |
+ |
+ const SharedQuadState* rootSharedState = rootQuadList[0]->shared_quad_state; |
+ |
+ // The results are similar to the SharedData test, but are scaled up by displaySize/bounds, which is 40/30. |
+ EXPECT_RECT_EQ(gfx::Rect(21, 21, 80, 80), rootSharedState->clipped_rect_in_target); |
+ EXPECT_RECT_EQ(gfx::Rect(21, 21, 80, 80), rootSharedState->clip_rect); |
+ gfx::Transform expected; |
+ // This is the transform from the layer's space to its target. |
+ // The position (20) - the width / scale (30 / 2) = 20 - 15 = 5 |
+ expected.Translate(5.0, 5.0); |
+ expected.Scale(2.0, 2.0); |
+ expected.Translate(8.0, 8.0); |
+ // The frame has size 50x50 but the layer's bounds are 30x30. |
+ expected.Scale(30.0 / 50.0, 30.0 / 50.0); |
+ // The display size is 40x40 but the bounds are 30x30. |
+ expected.Scale(40.0 / 30.0, 40.0 / 30.0); |
+ // This is the transform within the source frame. |
+ expected.Scale(1.5, 1.5); |
+ expected.Translate(7.0, 7.0); |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(expected, rootSharedState->content_to_target_transform); |
+ |
+ m_hostImpl->drawLayers(frame); |
+ m_hostImpl->didDrawAllLayers(frame); |
+} |
+ |
} // namespace |
} // namespace cc |