Index: cc/CCLayerTreeHostCommonTest.cpp |
diff --git a/cc/CCLayerTreeHostCommonTest.cpp b/cc/CCLayerTreeHostCommonTest.cpp |
index f073976beca4d499e0fcdccbfa4556dc55518f2b..ca0845abb8e603fd1250d11f7c032f427da05ece 100644 |
--- a/cc/CCLayerTreeHostCommonTest.cpp |
+++ b/cc/CCLayerTreeHostCommonTest.cpp |
@@ -51,7 +51,7 @@ void setLayerPropertiesForTesting(CCLayerImpl* layer, const WebTransformationMat |
layer->setContentBounds(bounds); |
} |
-void executeCalculateDrawTransformsAndVisibility(LayerChromium* rootLayer, float deviceScaleFactor = 1) |
+void executeCalculateDrawTransformsAndVisibility(LayerChromium* rootLayer, float deviceScaleFactor = 1, float pageScaleFactor = 1) |
{ |
WebTransformationMatrix identityMatrix; |
Vector<RefPtr<LayerChromium> > dummyRenderSurfaceLayerList; |
@@ -60,11 +60,11 @@ void executeCalculateDrawTransformsAndVisibility(LayerChromium* rootLayer, float |
// We are probably not testing what is intended if the rootLayer bounds are empty. |
ASSERT(!rootLayer->bounds().isEmpty()); |
- CCLayerTreeHostCommon::calculateDrawTransforms(rootLayer, deviceViewportSize, deviceScaleFactor, dummyMaxTextureSize, dummyRenderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(rootLayer, deviceViewportSize, deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, dummyRenderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(dummyRenderSurfaceLayerList); |
} |
-void executeCalculateDrawTransformsAndVisibility(CCLayerImpl* rootLayer, float deviceScaleFactor = 1) |
+void executeCalculateDrawTransformsAndVisibility(CCLayerImpl* rootLayer, float deviceScaleFactor = 1, float pageScaleFactor = 1) |
{ |
// Note: this version skips layer sorting. |
@@ -75,7 +75,7 @@ void executeCalculateDrawTransformsAndVisibility(CCLayerImpl* rootLayer, float d |
// We are probably not testing what is intended if the rootLayer bounds are empty. |
ASSERT(!rootLayer->bounds().isEmpty()); |
- CCLayerTreeHostCommon::calculateDrawTransforms(rootLayer, deviceViewportSize, deviceScaleFactor, 0, dummyMaxTextureSize, dummyRenderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(rootLayer, deviceViewportSize, deviceScaleFactor, pageScaleFactor, 0, dummyMaxTextureSize, dummyRenderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(dummyRenderSurfaceLayerList); |
} |
@@ -654,7 +654,7 @@ TEST(CCLayerTreeHostCommonTest, verifyRenderSurfaceListForRenderSurfaceWithClipp |
Vector<RefPtr<LayerChromium> > renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
// The child layer's content is entirely outside the parent's clip rect, so the intermediate |
@@ -682,7 +682,7 @@ TEST(CCLayerTreeHostCommonTest, verifyRenderSurfaceListForTransparentChild) |
Vector<RefPtr<LayerChromium> > renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
// Since the layer is transparent, renderSurface1->renderSurface() should not have gotten added anywhere. |
@@ -715,7 +715,7 @@ TEST(CCLayerTreeHostCommonTest, verifyForceRenderSurface) |
Vector<RefPtr<LayerChromium> > renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
// The root layer always creates a renderSurface |
EXPECT_TRUE(parent->renderSurface()); |
@@ -724,7 +724,7 @@ TEST(CCLayerTreeHostCommonTest, verifyForceRenderSurface) |
renderSurfaceLayerList.clear(); |
renderSurface1->setForceRenderSurface(false); |
- CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
EXPECT_TRUE(parent->renderSurface()); |
EXPECT_FALSE(renderSurface1->renderSurface()); |
EXPECT_EQ(1U, renderSurfaceLayerList.size()); |
@@ -1338,7 +1338,7 @@ TEST(CCLayerTreeHostCommonTest, verifyClipRectCullsRenderSurfaces) |
Vector<RefPtr<LayerChromium> > renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
@@ -1385,7 +1385,7 @@ TEST(CCLayerTreeHostCommonTest, verifyClipRectCullsSurfaceWithoutVisibleContent) |
Vector<RefPtr<LayerChromium> > renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
// Without an animation, we should cull child and grandChild from the renderSurfaceLayerList. |
ASSERT_EQ(1U, renderSurfaceLayerList.size()); |
@@ -1399,7 +1399,7 @@ TEST(CCLayerTreeHostCommonTest, verifyClipRectCullsSurfaceWithoutVisibleContent) |
grandChild->clearRenderSurface(); |
renderSurfaceLayerList.clear(); |
- CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
// With an animating transform, we should keep child and grandChild in the renderSurfaceLayerList. |
ASSERT_EQ(3U, renderSurfaceLayerList.size()); |
@@ -1451,7 +1451,7 @@ TEST(CCLayerTreeHostCommonTest, verifyDrawableContentRectForLayers) |
Vector<RefPtr<LayerChromium> > renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
EXPECT_RECT_EQ(IntRect(IntPoint(5, 5), IntSize(10, 10)), grandChild1->drawableContentRect()); |
@@ -1517,7 +1517,7 @@ TEST(CCLayerTreeHostCommonTest, verifyClipRectIsPropagatedCorrectlyToSurfaces) |
Vector<RefPtr<LayerChromium> > renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
ASSERT_TRUE(grandChild1->renderSurface()); |
@@ -2360,7 +2360,7 @@ TEST(CCLayerTreeHostCommonTest, verifyBackFaceCullingWithoutPreserves3d) |
Vector<RefPtr<LayerChromium> > renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
// Verify which renderSurfaces were created. |
EXPECT_FALSE(frontFacingChild->renderSurface()); |
@@ -2459,7 +2459,7 @@ TEST(CCLayerTreeHostCommonTest, verifyBackFaceCullingWithPreserves3d) |
Vector<RefPtr<LayerChromium> > renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
// Verify which renderSurfaces were created. |
EXPECT_FALSE(frontFacingChild->renderSurface()); |
@@ -2539,7 +2539,7 @@ TEST(CCLayerTreeHostCommonTest, verifyBackFaceCullingWithAnimatingTransforms) |
Vector<RefPtr<LayerChromium> > renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
EXPECT_FALSE(child->renderSurface()); |
@@ -2606,7 +2606,7 @@ TEST(CCLayerTreeHostCommonTest, verifyBackFaceCullingWithPreserves3dForFlattenin |
Vector<RefPtr<LayerChromium> > renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), 1, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
// Verify which renderSurfaces were created. |
EXPECT_TRUE(frontFacingSurface->renderSurface()); |
@@ -2660,7 +2660,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSingleLayer) |
Vector<CCLayerImpl*> renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
// Sanity check the scenario we just created. |
@@ -2710,7 +2710,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForUninvertibleTransform) |
Vector<CCLayerImpl*> renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
// Sanity check the scenario we just created. |
@@ -2765,7 +2765,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSinglePositionedLayer) |
Vector<CCLayerImpl*> renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
// Sanity check the scenario we just created. |
@@ -2813,7 +2813,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSingleRotatedLayer) |
Vector<CCLayerImpl*> renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
// Sanity check the scenario we just created. |
@@ -2870,7 +2870,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSinglePerspectiveLayer) |
Vector<CCLayerImpl*> renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
// Sanity check the scenario we just created. |
@@ -2935,7 +2935,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSingleLayerWithScaledContents |
Vector<CCLayerImpl*> renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
// Sanity check the scenario we just created. |
@@ -3000,7 +3000,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSimpleClippedLayer) |
Vector<CCLayerImpl*> renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
// Sanity check the scenario we just created. |
@@ -3091,7 +3091,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForMultiClippedRotatedLayer) |
Vector<CCLayerImpl*> renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
// Sanity check the scenario we just created. |
@@ -3174,7 +3174,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForNonClippingIntermediateLayer) |
Vector<CCLayerImpl*> renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
// Sanity check the scenario we just created. |
@@ -3255,7 +3255,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForMultipleLayers) |
Vector<CCLayerImpl*> renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
// Sanity check the scenario we just created. |
@@ -3364,7 +3364,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForMultipleLayerLists) |
Vector<CCLayerImpl*> renderSurfaceLayerList; |
int dummyMaxTextureSize = 512; |
- CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(root.get(), root->bounds(), 1, 1, 0, dummyMaxTextureSize, renderSurfaceLayerList); |
CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); |
// Sanity check the scenario we just created. |
@@ -3421,6 +3421,25 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForMultipleLayerLists) |
EXPECT_EQ(4, resultLayer->id()); |
} |
+class NoScaleContentLayerChromium : public ContentLayerChromium |
+{ |
+public: |
+ static PassRefPtr<NoScaleContentLayerChromium> create(ContentLayerChromiumClient* client) { return adoptRef(new NoScaleContentLayerChromium(client)); } |
+ virtual ~NoScaleContentLayerChromium() { } |
+ |
+ virtual bool needsContentsScale() const OVERRIDE { return false; } |
+ |
+protected: |
+ explicit NoScaleContentLayerChromium(ContentLayerChromiumClient* client) : ContentLayerChromium(client) { } |
+}; |
+ |
+PassRefPtr<NoScaleContentLayerChromium> createNoScaleDrawableContentLayerChromium(ContentLayerChromiumClient* delegate) |
+{ |
+ RefPtr<NoScaleContentLayerChromium> toReturn = NoScaleContentLayerChromium::create(delegate); |
+ toReturn->setIsDrawable(true); |
+ return toReturn.release(); |
+} |
+ |
TEST(CCLayerTreeHostCommonTest, verifyLayerTransformsInHighDPI) |
{ |
// Verify draw and screen space transforms of layers not in a surface. |
@@ -3433,7 +3452,7 @@ TEST(CCLayerTreeHostCommonTest, verifyLayerTransformsInHighDPI) |
RefPtr<ContentLayerChromium> child = createDrawableContentLayerChromium(&delegate); |
setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(2, 2), IntSize(10, 10), true); |
- RefPtr<ContentLayerChromium> childNoScale = createDrawableContentLayerChromium(&delegate); |
+ RefPtr<NoScaleContentLayerChromium> childNoScale = createNoScaleDrawableContentLayerChromium(&delegate); |
setLayerPropertiesForTesting(childNoScale.get(), identityMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(2, 2), IntSize(10, 10), true); |
parent->addChild(child); |
@@ -3443,11 +3462,13 @@ TEST(CCLayerTreeHostCommonTest, verifyLayerTransformsInHighDPI) |
int dummyMaxTextureSize = 512; |
const double deviceScaleFactor = 2.5; |
- parent->setContentsScale(deviceScaleFactor); |
- child->setContentsScale(deviceScaleFactor); |
- EXPECT_EQ(childNoScale->contentsScale(), 1); |
+ const double pageScaleFactor = 1; |
+ |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList); |
- CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), deviceScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList); |
+ EXPECT_EQ(deviceScaleFactor * pageScaleFactor, parent->contentsScale()); |
+ EXPECT_EQ(deviceScaleFactor * pageScaleFactor, child->contentsScale()); |
+ EXPECT_EQ(1, childNoScale->contentsScale()); |
EXPECT_EQ(1u, renderSurfaceLayerList.size()); |
@@ -3494,6 +3515,76 @@ TEST(CCLayerTreeHostCommonTest, verifyLayerTransformsInHighDPI) |
EXPECT_TRANSFORMATION_MATRIX_EQ(expectedChildNoScaleTransform, childNoScale->screenSpaceTransform()); |
} |
+TEST(CCLayerTreeHostCommonTest, verifyContentsScale) |
+{ |
+ MockContentLayerChromiumClient delegate; |
+ WebTransformationMatrix identityMatrix; |
+ |
+ WebTransformationMatrix parentScaleMatrix; |
+ const double initialParentScale = 1.75; |
+ parentScaleMatrix.scale(initialParentScale); |
+ |
+ WebTransformationMatrix childScaleMatrix; |
+ const double initialChildScale = 1.25; |
+ childScaleMatrix.scale(initialChildScale); |
+ |
+ RefPtr<ContentLayerChromium> parent = createDrawableContentLayerChromium(&delegate); |
+ setLayerPropertiesForTesting(parent.get(), parentScaleMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(0, 0), IntSize(100, 100), true); |
+ |
+ RefPtr<ContentLayerChromium> child = createDrawableContentLayerChromium(&delegate); |
+ setLayerPropertiesForTesting(child.get(), childScaleMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(2, 2), IntSize(10, 10), true); |
+ |
+ RefPtr<NoScaleContentLayerChromium> childNoScale = createNoScaleDrawableContentLayerChromium(&delegate); |
+ setLayerPropertiesForTesting(childNoScale.get(), identityMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(2, 2), IntSize(10, 10), true); |
+ |
+ // Page scale should not apply to the parent. |
+ parent->setBoundsContainPageScale(true); |
+ |
+ parent->addChild(child); |
+ parent->addChild(childNoScale); |
+ |
+ Vector<RefPtr<LayerChromium> > renderSurfaceLayerList; |
+ int dummyMaxTextureSize = 512; |
+ |
+ double deviceScaleFactor = 2.5; |
+ double pageScaleFactor = 1.5; |
+ |
+ // FIXME: Remove this when pageScaleFactor is applied in the compositor. |
+ WebTransformationMatrix pageScaleMatrix; |
+ pageScaleMatrix.scale(pageScaleFactor); |
+ parent->setSublayerTransform(pageScaleMatrix); |
+ |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList); |
+ |
+ EXPECT_EQ(deviceScaleFactor * initialParentScale, parent->contentsScale()); |
+ EXPECT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * initialChildScale, child->contentsScale()); |
+ EXPECT_EQ(1, childNoScale->contentsScale()); |
+ |
+ // If the transform changes, we expect the contentsScale to remain unchanged. |
+ child->setTransform(identityMatrix); |
+ |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList); |
+ |
+ EXPECT_EQ(deviceScaleFactor * initialParentScale, parent->contentsScale()); |
+ EXPECT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * initialChildScale, child->contentsScale()); |
+ EXPECT_EQ(1, childNoScale->contentsScale()); |
+ |
+ // But if the deviceScaleFactor or pageScaleFactor changes, then it should be updated, but using the initial transform. |
+ deviceScaleFactor = 2.25; |
+ pageScaleFactor = 1.25; |
+ |
+ // FIXME: Remove this when pageScaleFactor is applied in the compositor. |
+ pageScaleMatrix = identityMatrix; |
+ pageScaleMatrix.scale(pageScaleFactor); |
+ parent->setSublayerTransform(pageScaleMatrix); |
+ |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList); |
+ |
+ EXPECT_EQ(deviceScaleFactor * initialParentScale, parent->contentsScale()); |
+ EXPECT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * initialChildScale, child->contentsScale()); |
+ EXPECT_EQ(1, childNoScale->contentsScale()); |
+} |
+ |
TEST(CCLayerTreeHostCommonTest, verifyRenderSurfaceTransformsInHighDPI) |
{ |
MockContentLayerChromiumClient delegate; |
@@ -3528,7 +3619,7 @@ TEST(CCLayerTreeHostCommonTest, verifyRenderSurfaceTransformsInHighDPI) |
duplicateChildNonOwner->setContentsScale(deviceScaleFactor); |
replica->setContentsScale(deviceScaleFactor); |
- CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), deviceScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), deviceScaleFactor, 1, dummyMaxTextureSize, renderSurfaceLayerList); |
// We should have two render surfaces. The root's render surface and child's |
// render surface (it needs one because it has a replica layer). |