| Index: cc/layer_tree_host_common_unittest.cc
|
| diff --git a/cc/layer_tree_host_common_unittest.cc b/cc/layer_tree_host_common_unittest.cc
|
| index 0fd26e424d0e8e5d870bd9ade838b7f609a6f4fa..25ff83d610eb2f7dddc6f5c8dc728facc1af81a7 100644
|
| --- a/cc/layer_tree_host_common_unittest.cc
|
| +++ b/cc/layer_tree_host_common_unittest.cc
|
| @@ -337,7 +337,7 @@ TEST(LayerTreeHostCommonTest, verifyTransformsForSingleRenderSurface)
|
| parentTranslationToCenter.Translate(50, 60);
|
| gfx::Transform parentCompositeTransform = parentTranslationToAnchor * parentLayerTransform * MathUtil::inverse(parentTranslationToAnchor)
|
| * parentTranslationToCenter * parentSublayerMatrix * MathUtil::inverse(parentTranslationToCenter);
|
| - gfx::Vector2dF parentCompositeScale = MathUtil::computeTransform2dScaleComponents(parentCompositeTransform);
|
| + gfx::Vector2dF parentCompositeScale = MathUtil::computeTransform2dScaleComponents(parentCompositeTransform, 1.f);
|
| gfx::Transform surfaceSublayerTransform;
|
| surfaceSublayerTransform.Scale(parentCompositeScale.x(), parentCompositeScale.y());
|
| gfx::Transform surfaceSublayerCompositeTransform = parentCompositeTransform * MathUtil::inverse(surfaceSublayerTransform);
|
| @@ -400,7 +400,7 @@ TEST(LayerTreeHostCommonTest, verifyTransformsForReplica)
|
| childTranslationToCenter.Translate(8, 9);
|
| gfx::Transform replicaLayerTransform;
|
| replicaLayerTransform.Scale3d(3, 3, 1);
|
| - gfx::Vector2dF parentCompositeScale = MathUtil::computeTransform2dScaleComponents(parentCompositeTransform);
|
| + gfx::Vector2dF parentCompositeScale = MathUtil::computeTransform2dScaleComponents(parentCompositeTransform, 1.f);
|
| gfx::Transform surfaceSublayerTransform;
|
| surfaceSublayerTransform.Scale(parentCompositeScale.x(), parentCompositeScale.y());
|
| gfx::Transform replicaCompositeTransform = parentCompositeTransform * replicaLayerTransform * MathUtil::inverse(surfaceSublayerTransform);
|
| @@ -485,7 +485,7 @@ TEST(LayerTreeHostCommonTest, verifyTransformsForRenderSurfaceHierarchy)
|
| gfx::Transform B = translationToCenter * sublayerTransform * MathUtil::inverse(translationToCenter);
|
| gfx::Transform R = A * translationToAnchor * replicaLayerTransform * MathUtil::inverse(translationToAnchor);
|
|
|
| - gfx::Vector2dF surface1ParentTransformScale = MathUtil::computeTransform2dScaleComponents(A * B);
|
| + gfx::Vector2dF surface1ParentTransformScale = MathUtil::computeTransform2dScaleComponents(A * B, 1.f);
|
| gfx::Transform surface1SublayerTransform;
|
| surface1SublayerTransform.Scale(surface1ParentTransformScale.x(), surface1ParentTransformScale.y());
|
|
|
| @@ -494,7 +494,7 @@ TEST(LayerTreeHostCommonTest, verifyTransformsForRenderSurfaceHierarchy)
|
| // S1 = transform to move from renderSurface1 pixels to the layer space of the owning layer
|
| gfx::Transform S1 = MathUtil::inverse(surface1SublayerTransform);
|
|
|
| - gfx::Vector2dF surface2ParentTransformScale = MathUtil::computeTransform2dScaleComponents(SS1 * A * B);
|
| + gfx::Vector2dF surface2ParentTransformScale = MathUtil::computeTransform2dScaleComponents(SS1 * A * B, 1.f);
|
| gfx::Transform surface2SublayerTransform;
|
| surface2SublayerTransform.Scale(surface2ParentTransformScale.x(), surface2ParentTransformScale.y());
|
|
|
| @@ -4081,6 +4081,78 @@ TEST(LayerTreeHostCommonTest, verifyLayerTransformsInHighDPI)
|
| EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildNoScaleTransform, childNoScale->screenSpaceTransform());
|
| }
|
|
|
| +TEST(LayerTreeHostCommonTest, verifySurfaceLayerTransformsInHighDPI)
|
| +{
|
| + // Verify draw and screen space transforms of layers in a surface.
|
| + MockContentLayerClient delegate;
|
| + gfx::Transform identityMatrix;
|
| +
|
| + gfx::Transform perspectiveMatrix;
|
| + perspectiveMatrix.ApplyPerspectiveDepth(2);
|
| +
|
| + gfx::Transform scaleSmallMatrix;
|
| + scaleSmallMatrix.Scale(1.0 / 10.0, 1.0 / 12.0);
|
| +
|
| + scoped_refptr<ContentLayer> parent = createDrawableContentLayer(&delegate);
|
| + setLayerPropertiesForTesting(parent.get(), identityMatrix, identityMatrix, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), true);
|
| +
|
| + scoped_refptr<ContentLayer> perspectiveSurface = createDrawableContentLayer(&delegate);
|
| + setLayerPropertiesForTesting(perspectiveSurface.get(), perspectiveMatrix * scaleSmallMatrix, identityMatrix, gfx::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(10, 10), true);
|
| +
|
| + scoped_refptr<ContentLayer> scaleSurface = createDrawableContentLayer(&delegate);
|
| + setLayerPropertiesForTesting(scaleSurface.get(), scaleSmallMatrix, identityMatrix, gfx::PointF(0, 0), gfx::PointF(2, 2), gfx::Size(10, 10), true);
|
| +
|
| + perspectiveSurface->setForceRenderSurface(true);
|
| + scaleSurface->setForceRenderSurface(true);
|
| +
|
| + parent->addChild(perspectiveSurface);
|
| + parent->addChild(scaleSurface);
|
| +
|
| + std::vector<scoped_refptr<Layer> > renderSurfaceLayerList;
|
| + int dummyMaxTextureSize = 512;
|
| +
|
| + const double deviceScaleFactor = 2.5;
|
| + const double pageScaleFactor = 3;
|
| +
|
| + gfx::Transform pageScaleTransform;
|
| + pageScaleTransform.Scale(pageScaleFactor, pageScaleFactor);
|
| + parent->setImplTransform(pageScaleTransform);
|
| +
|
| + LayerTreeHostCommon::calculateDrawProperties(parent.get(), parent->bounds(), deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, false, renderSurfaceLayerList);
|
| +
|
| + EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor, parent);
|
| + EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor, perspectiveSurface);
|
| + EXPECT_CONTENTS_SCALE_EQ(deviceScaleFactor * pageScaleFactor, scaleSurface);
|
| +
|
| + EXPECT_EQ(3u, renderSurfaceLayerList.size());
|
| +
|
| + gfx::Transform expectedParentDrawTransform;
|
| + EXPECT_TRANSFORMATION_MATRIX_EQ(expectedParentDrawTransform, parent->drawTransform());
|
| +
|
| + // The scaled surface is rendered at its appropriate scale, and drawn 1:1
|
| + // into its target.
|
| + gfx::Transform expectedScaleSurfaceDrawTransform;
|
| + expectedScaleSurfaceDrawTransform.Translate(
|
| + deviceScaleFactor * pageScaleFactor * scaleSurface->position().x(),
|
| + deviceScaleFactor * pageScaleFactor * scaleSurface->position().y());
|
| + gfx::Transform expectedScaleSurfaceLayerDrawTransform;
|
| + expectedScaleSurfaceLayerDrawTransform.PreconcatTransform(scaleSmallMatrix);
|
| + EXPECT_TRANSFORMATION_MATRIX_EQ(expectedScaleSurfaceDrawTransform, scaleSurface->renderSurface()->drawTransform());
|
| + EXPECT_TRANSFORMATION_MATRIX_EQ(expectedScaleSurfaceLayerDrawTransform, scaleSurface->drawTransform());
|
| +
|
| + // The scale for the perspective surface is not known, so it is rendered 1:1
|
| + // with the screen, and then scaled during drawing.
|
| + gfx::Transform expectedPerspectiveSurfaceDrawTransform;
|
| + expectedPerspectiveSurfaceDrawTransform.Translate(
|
| + deviceScaleFactor * pageScaleFactor * perspectiveSurface->position().x(),
|
| + deviceScaleFactor * pageScaleFactor * perspectiveSurface->position().y());
|
| + expectedPerspectiveSurfaceDrawTransform.PreconcatTransform(perspectiveMatrix);
|
| + expectedPerspectiveSurfaceDrawTransform.PreconcatTransform(scaleSmallMatrix);
|
| + gfx::Transform expectedPerspectiveSurfaceLayerDrawTransform;
|
| + EXPECT_TRANSFORMATION_MATRIX_EQ(expectedPerspectiveSurfaceDrawTransform, perspectiveSurface->renderSurface()->drawTransform());
|
| + EXPECT_TRANSFORMATION_MATRIX_EQ(expectedPerspectiveSurfaceLayerDrawTransform, perspectiveSurface->drawTransform());
|
| +}
|
| +
|
| TEST(LayerTreeHostCommonTest, verifyLayerTransformsInHighDPIAccurateScaleZeroChildPosition)
|
| {
|
| // Verify draw and screen space transforms of layers not in a surface.
|
|
|