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 af74b1fed513b421d04bb68c99e7859ab6aff162..e91b8ff617c5cc631f196f57bf368df8c7c5041f 100644 |
--- a/cc/layer_tree_host_common_unittest.cc |
+++ b/cc/layer_tree_host_common_unittest.cc |
@@ -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; |
std::vector<scoped_refptr<LayerChromium> > dummyRenderSurfaceLayerList; |
@@ -60,10 +60,10 @@ 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); |
} |
-void executeCalculateDrawTransformsAndVisibility(CCLayerImpl* rootLayer, float deviceScaleFactor = 1) |
+void executeCalculateDrawTransformsAndVisibility(CCLayerImpl* rootLayer, float deviceScaleFactor = 1, float pageScaleFactor = 1) |
{ |
// Note: this version skips layer sorting. |
@@ -74,7 +74,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); |
} |
WebTransformationMatrix remove3DComponentOfMatrix(const WebTransformationMatrix& mat) |
@@ -333,6 +333,10 @@ TEST(CCLayerTreeHostCommonTest, verifyTransformsForSingleRenderSurface) |
parentTranslationToCenter.translate(50, 60); |
WebTransformationMatrix parentCompositeTransform = parentTranslationToAnchor * parentLayerTransform * parentTranslationToAnchor.inverse() |
* parentTranslationToCenter * parentSublayerMatrix * parentTranslationToCenter.inverse(); |
+ FloatPoint parentCompositeScale = CCMathUtil::computeTransform2dScaleComponents(parentCompositeTransform); |
+ WebTransformationMatrix surfaceSublayerTransform; |
+ surfaceSublayerTransform.scaleNonUniform(parentCompositeScale.x(), parentCompositeScale.y()); |
+ WebTransformationMatrix surfaceSublayerCompositeTransform = parentCompositeTransform * surfaceSublayerTransform.inverse(); |
// Child's render surface should not exist yet. |
ASSERT_FALSE(child->renderSurface()); |
@@ -348,14 +352,15 @@ TEST(CCLayerTreeHostCommonTest, verifyTransformsForSingleRenderSurface) |
// The child layer's draw transform should refer to its new render surface. |
// The screen-space transform, however, should still refer to the root. |
- EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, child->drawTransform()); |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(surfaceSublayerTransform, child->drawTransform()); |
EXPECT_TRANSFORMATION_MATRIX_EQ(parentCompositeTransform, child->screenSpaceTransform()); |
// Because the grandChild is the only drawable content, the child's renderSurface will tighten its bounds to the grandChild. |
- EXPECT_TRANSFORMATION_MATRIX_EQ(parentCompositeTransform, child->renderTarget()->renderSurface()->drawTransform()); |
+ // The scale at which the surface's subtree is drawn must be removed from the composite transform. |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(surfaceSublayerCompositeTransform, child->renderTarget()->renderSurface()->drawTransform()); |
// The screen space is the same as the target since the child surface draws into the root. |
- EXPECT_TRANSFORMATION_MATRIX_EQ(parentCompositeTransform, child->renderTarget()->renderSurface()->screenSpaceTransform()); |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(surfaceSublayerCompositeTransform, child->renderTarget()->renderSurface()->screenSpaceTransform()); |
} |
TEST(CCLayerTreeHostCommonTest, verifyTransformsForReplica) |
@@ -386,7 +391,10 @@ TEST(CCLayerTreeHostCommonTest, verifyTransformsForReplica) |
childTranslationToCenter.translate(8, 9); |
WebTransformationMatrix replicaLayerTransform; |
replicaLayerTransform.scale3d(3, 3, 1); |
- WebTransformationMatrix replicaCompositeTransform = parentCompositeTransform * replicaLayerTransform; |
+ FloatPoint parentCompositeScale = CCMathUtil::computeTransform2dScaleComponents(parentCompositeTransform); |
+ WebTransformationMatrix surfaceSublayerTransform; |
+ surfaceSublayerTransform.scaleNonUniform(parentCompositeScale.x(), parentCompositeScale.y()); |
+ WebTransformationMatrix replicaCompositeTransform = parentCompositeTransform * replicaLayerTransform * surfaceSublayerTransform.inverse(); |
// Child's render surface should not exist yet. |
ASSERT_FALSE(child->renderSurface()); |
@@ -463,6 +471,24 @@ TEST(CCLayerTreeHostCommonTest, verifyTransformsForRenderSurfaceHierarchy) |
WebTransformationMatrix R = A * translationToAnchor * replicaLayerTransform * translationToAnchor.inverse(); |
WebTransformationMatrix identityMatrix; |
+ FloatPoint surface1ParentTransformScale = CCMathUtil::computeTransform2dScaleComponents(A * B); |
+ WebTransformationMatrix surface1SublayerTransform; |
+ surface1SublayerTransform.scaleNonUniform(surface1ParentTransformScale.x(), surface1ParentTransformScale.y()); |
+ |
+ // SS1 = transform given to the subtree of renderSurface1 |
+ WebTransformationMatrix SS1 = surface1SublayerTransform; |
+ // S1 = transform to move from renderSurface1 pixels to the layer space of the owning layer |
+ WebTransformationMatrix S1 = surface1SublayerTransform.inverse(); |
+ |
+ FloatPoint surface2ParentTransformScale = CCMathUtil::computeTransform2dScaleComponents(SS1 * A * B); |
+ WebTransformationMatrix surface2SublayerTransform; |
+ surface2SublayerTransform.scaleNonUniform(surface2ParentTransformScale.x(), surface2ParentTransformScale.y()); |
+ |
+ // SS2 = transform given to the subtree of renderSurface2 |
+ WebTransformationMatrix SS2 = surface2SublayerTransform; |
+ // S2 = transform to move from renderSurface2 pixels to the layer space of the owning layer |
+ WebTransformationMatrix S2 = surface2SublayerTransform.inverse(); |
+ |
setLayerPropertiesForTesting(parent.get(), layerTransform, sublayerTransform, FloatPoint(0.25, 0), FloatPoint(0, 0), IntSize(10, 10), false); |
setLayerPropertiesForTesting(renderSurface1.get(), layerTransform, sublayerTransform, FloatPoint(0.25, 0), FloatPoint(0, 0), IntSize(10, 10), false); |
setLayerPropertiesForTesting(renderSurface2.get(), layerTransform, sublayerTransform, FloatPoint(0.25, 0), FloatPoint(0, 0), IntSize(10, 10), false); |
@@ -513,13 +539,13 @@ TEST(CCLayerTreeHostCommonTest, verifyTransformsForRenderSurfaceHierarchy) |
EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * A, childOfRoot->drawTransform()); |
EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * A * B * A, grandChildOfRoot->drawTransform()); |
- EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, renderSurface1->drawTransform()); |
- EXPECT_TRANSFORMATION_MATRIX_EQ(B * A, childOfRS1->drawTransform()); |
- EXPECT_TRANSFORMATION_MATRIX_EQ(B * A * B * A, grandChildOfRS1->drawTransform()); |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(SS1, renderSurface1->drawTransform()); |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(SS1 * B * A, childOfRS1->drawTransform()); |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(SS1 * B * A * B * A, grandChildOfRS1->drawTransform()); |
- EXPECT_TRANSFORMATION_MATRIX_EQ(identityMatrix, renderSurface2->drawTransform()); |
- EXPECT_TRANSFORMATION_MATRIX_EQ(B * A, childOfRS2->drawTransform()); |
- EXPECT_TRANSFORMATION_MATRIX_EQ(B * A * B * A, grandChildOfRS2->drawTransform()); |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(SS2, renderSurface2->drawTransform()); |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(SS2 * B * A, childOfRS2->drawTransform()); |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(SS2 * B * A * B * A, grandChildOfRS2->drawTransform()); |
// Verify layer screen-space transforms |
// |
@@ -538,15 +564,15 @@ TEST(CCLayerTreeHostCommonTest, verifyTransformsForRenderSurfaceHierarchy) |
// Verify render surface transforms. |
// |
// Draw transform of render surface 1 is described with respect to root. |
- EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * A, renderSurface1->renderSurface()->drawTransform()); |
- EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * R, renderSurface1->renderSurface()->replicaDrawTransform()); |
- EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * A, renderSurface1->renderSurface()->screenSpaceTransform()); |
- EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * R, renderSurface1->renderSurface()->replicaScreenSpaceTransform()); |
- // Draw transform of render surface 2 is described with respect to render surface 2. |
- EXPECT_TRANSFORMATION_MATRIX_EQ(B * A, renderSurface2->renderSurface()->drawTransform()); |
- EXPECT_TRANSFORMATION_MATRIX_EQ(B * R, renderSurface2->renderSurface()->replicaDrawTransform()); |
- EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * A * B * A, renderSurface2->renderSurface()->screenSpaceTransform()); |
- EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * A * B * R, renderSurface2->renderSurface()->replicaScreenSpaceTransform()); |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * A * S1, renderSurface1->renderSurface()->drawTransform()); |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * R * S1, renderSurface1->renderSurface()->replicaDrawTransform()); |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * A * S1, renderSurface1->renderSurface()->screenSpaceTransform()); |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * R * S1, renderSurface1->renderSurface()->replicaScreenSpaceTransform()); |
+ // Draw transform of render surface 2 is described with respect to render surface 1. |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(SS1 * B * A * S2, renderSurface2->renderSurface()->drawTransform()); |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(SS1 * B * R * S2, renderSurface2->renderSurface()->replicaDrawTransform()); |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * A * B * A * S2, renderSurface2->renderSurface()->screenSpaceTransform()); |
+ EXPECT_TRANSFORMATION_MATRIX_EQ(A * B * A * B * R * S2, renderSurface2->renderSurface()->replicaScreenSpaceTransform()); |
// Sanity check. If these fail there is probably a bug in the test itself. |
// It is expected that we correctly set up transforms so that the y-component of the screen-space transform |
@@ -657,7 +683,7 @@ TEST(CCLayerTreeHostCommonTest, verifyRenderSurfaceListForRenderSurfaceWithClipp |
std::vector<scoped_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 child layer's content is entirely outside the parent's clip rect, so the intermediate |
// render surface should not be listed here, even if it was forced to be created. Render surfaces without children or visible |
@@ -684,7 +710,7 @@ TEST(CCLayerTreeHostCommonTest, verifyRenderSurfaceListForTransparentChild) |
std::vector<scoped_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); |
// Since the layer is transparent, renderSurface1->renderSurface() should not have gotten added anywhere. |
// Also, the drawable content rect should not have been extended by the children. |
@@ -716,7 +742,7 @@ TEST(CCLayerTreeHostCommonTest, verifyForceRenderSurface) |
std::vector<scoped_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()); |
@@ -725,7 +751,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()); |
@@ -1339,7 +1365,7 @@ TEST(CCLayerTreeHostCommonTest, verifyClipRectCullsRenderSurfaces) |
std::vector<scoped_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); |
ASSERT_EQ(2U, renderSurfaceLayerList.size()); |
EXPECT_EQ(parent->id(), renderSurfaceLayerList[0]->id()); |
@@ -1384,7 +1410,7 @@ TEST(CCLayerTreeHostCommonTest, verifyClipRectCullsSurfaceWithoutVisibleContent) |
std::vector<scoped_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()); |
@@ -1398,7 +1424,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()); |
@@ -1450,7 +1476,7 @@ TEST(CCLayerTreeHostCommonTest, verifyDrawableContentRectForLayers) |
std::vector<scoped_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); |
EXPECT_RECT_EQ(IntRect(IntPoint(5, 5), IntSize(10, 10)), grandChild1->drawableContentRect()); |
EXPECT_RECT_EQ(IntRect(IntPoint(15, 15), IntSize(5, 5)), grandChild3->drawableContentRect()); |
@@ -1515,7 +1541,7 @@ TEST(CCLayerTreeHostCommonTest, verifyClipRectIsPropagatedCorrectlyToSurfaces) |
std::vector<scoped_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); |
ASSERT_TRUE(grandChild1->renderSurface()); |
ASSERT_TRUE(grandChild2->renderSurface()); |
@@ -2357,7 +2383,7 @@ TEST(CCLayerTreeHostCommonTest, verifyBackFaceCullingWithoutPreserves3d) |
std::vector<scoped_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()); |
@@ -2456,7 +2482,7 @@ TEST(CCLayerTreeHostCommonTest, verifyBackFaceCullingWithPreserves3d) |
std::vector<scoped_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()); |
@@ -2536,7 +2562,7 @@ TEST(CCLayerTreeHostCommonTest, verifyBackFaceCullingWithAnimatingTransforms) |
std::vector<scoped_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); |
EXPECT_FALSE(child->renderSurface()); |
EXPECT_TRUE(animatingSurface->renderSurface()); |
@@ -2602,7 +2628,7 @@ TEST(CCLayerTreeHostCommonTest, verifyBackFaceCullingWithPreserves3dForFlattenin |
std::vector<scoped_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()); |
@@ -2656,7 +2682,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSingleLayer) |
std::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); |
// Sanity check the scenario we just created. |
ASSERT_EQ(1u, renderSurfaceLayerList.size()); |
@@ -2705,7 +2731,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForUninvertibleTransform) |
std::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); |
// Sanity check the scenario we just created. |
ASSERT_EQ(1u, renderSurfaceLayerList.size()); |
@@ -2759,7 +2785,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSinglePositionedLayer) |
std::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); |
// Sanity check the scenario we just created. |
ASSERT_EQ(1u, renderSurfaceLayerList.size()); |
@@ -2806,7 +2832,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSingleRotatedLayer) |
std::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); |
// Sanity check the scenario we just created. |
ASSERT_EQ(1u, renderSurfaceLayerList.size()); |
@@ -2862,7 +2888,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSinglePerspectiveLayer) |
std::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); |
// Sanity check the scenario we just created. |
ASSERT_EQ(1u, renderSurfaceLayerList.size()); |
@@ -2926,7 +2952,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSingleLayerWithScaledContents |
std::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); |
// Sanity check the scenario we just created. |
// The visibleContentRect for testLayer is actually 100x100, even though its layout size is 50x50, positioned at 25x25. |
@@ -2990,7 +3016,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForSimpleClippedLayer) |
std::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); |
// Sanity check the scenario we just created. |
ASSERT_EQ(1u, renderSurfaceLayerList.size()); |
@@ -3080,7 +3106,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForMultiClippedRotatedLayer) |
std::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); |
// Sanity check the scenario we just created. |
// The grandChild is expected to create a renderSurface because it masksToBounds and is not axis aligned. |
@@ -3162,7 +3188,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForNonClippingIntermediateLayer) |
std::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); |
// Sanity check the scenario we just created. |
ASSERT_EQ(1u, renderSurfaceLayerList.size()); |
@@ -3242,7 +3268,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForMultipleLayers) |
std::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); |
// Sanity check the scenario we just created. |
ASSERT_TRUE(child1); |
@@ -3350,7 +3376,7 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForMultipleLayerLists) |
std::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); |
// Sanity check the scenario we just created. |
ASSERT_TRUE(child1); |
@@ -3406,6 +3432,25 @@ TEST(CCLayerTreeHostCommonTest, verifyHitTestingForMultipleLayerLists) |
EXPECT_EQ(4, resultLayer->id()); |
} |
+class NoScaleContentLayerChromium : public ContentLayerChromium |
+{ |
+public: |
+ static scoped_refptr<NoScaleContentLayerChromium> create(ContentLayerChromiumClient* client) { return make_scoped_refptr(new NoScaleContentLayerChromium(client)); } |
+ |
+ virtual bool needsContentsScale() const OVERRIDE { return false; } |
+ |
+protected: |
+ explicit NoScaleContentLayerChromium(ContentLayerChromiumClient* client) : ContentLayerChromium(client) { } |
+ virtual ~NoScaleContentLayerChromium() { } |
+}; |
+ |
+scoped_refptr<NoScaleContentLayerChromium> createNoScaleDrawableContentLayerChromium(ContentLayerChromiumClient* delegate) |
+{ |
+ scoped_refptr<NoScaleContentLayerChromium> toReturn = NoScaleContentLayerChromium::create(delegate); |
+ toReturn->setIsDrawable(true); |
+ return toReturn; |
+} |
+ |
TEST(CCLayerTreeHostCommonTest, verifyLayerTransformsInHighDPI) |
{ |
// Verify draw and screen space transforms of layers not in a surface. |
@@ -3418,7 +3463,7 @@ TEST(CCLayerTreeHostCommonTest, verifyLayerTransformsInHighDPI) |
scoped_refptr<ContentLayerChromium> child = createDrawableContentLayerChromium(&delegate); |
setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(2, 2), IntSize(10, 10), true); |
- scoped_refptr<ContentLayerChromium> childNoScale = createDrawableContentLayerChromium(&delegate); |
+ scoped_refptr<NoScaleContentLayerChromium> childNoScale = createNoScaleDrawableContentLayerChromium(&delegate); |
setLayerPropertiesForTesting(childNoScale.get(), identityMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(2, 2), IntSize(10, 10), true); |
parent->addChild(child); |
@@ -3428,11 +3473,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()); |
@@ -3479,6 +3526,197 @@ 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); |
+ |
+ scoped_refptr<ContentLayerChromium> parent = createDrawableContentLayerChromium(&delegate); |
+ setLayerPropertiesForTesting(parent.get(), parentScaleMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(0, 0), IntSize(100, 100), true); |
+ |
+ scoped_refptr<ContentLayerChromium> childScale = createDrawableContentLayerChromium(&delegate); |
+ setLayerPropertiesForTesting(childScale.get(), childScaleMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(2, 2), IntSize(10, 10), true); |
+ |
+ scoped_refptr<NoScaleContentLayerChromium> childNoScale = createNoScaleDrawableContentLayerChromium(&delegate); |
+ setLayerPropertiesForTesting(childNoScale.get(), childScaleMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(12, 12), IntSize(10, 10), true); |
+ |
+ // FIXME: Remove this when pageScaleFactor is applied in the compositor. |
+ // Page scale should not apply to the parent. |
+ parent->setBoundsContainPageScale(true); |
+ |
+ parent->addChild(childScale); |
+ parent->addChild(childNoScale); |
+ |
+ std::vector<scoped_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_FLOAT_EQ(deviceScaleFactor * initialParentScale, parent->contentsScale()); |
+ EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * initialChildScale, childScale->contentsScale()); |
+ EXPECT_FLOAT_EQ(1, childNoScale->contentsScale()); |
+ |
+ // The parent is scaled up and shouldn't need to scale during draw. The child that can scale its contents should |
+ // also not need to scale during draw. The other should. |
+ // There is some rounding error due to contentBounds being a rounded integer. |
+ EXPECT_NEAR(parent->drawTransform().m11(), 1, 0.01); |
+ EXPECT_NEAR(parent->drawTransform().m22(), 1, 0.01); |
+ EXPECT_NEAR(childScale->drawTransform().m11(), 1, 0.01); |
+ EXPECT_NEAR(childScale->drawTransform().m22(), 1, 0.01); |
+ EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * initialChildScale, childNoScale->drawTransform().m11()); |
+ EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * initialChildScale, childNoScale->drawTransform().m22()); |
+ |
+ // If the transform changes, we expect the contentsScale to remain unchanged. |
+ childScale->setTransform(identityMatrix); |
+ |
+ renderSurfaceLayerList.clear(); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList); |
+ |
+ EXPECT_FLOAT_EQ(deviceScaleFactor * initialParentScale, parent->contentsScale()); |
+ EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * initialChildScale, childScale->contentsScale()); |
+ EXPECT_FLOAT_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); |
+ |
+ renderSurfaceLayerList.clear(); |
+ CCLayerTreeHostCommon::calculateDrawTransforms(parent.get(), parent->bounds(), deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, renderSurfaceLayerList); |
+ |
+ EXPECT_FLOAT_EQ(deviceScaleFactor * initialParentScale, parent->contentsScale()); |
+ EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * initialChildScale, childScale->contentsScale()); |
+ EXPECT_FLOAT_EQ(1, childNoScale->contentsScale()); |
+} |
+ |
+TEST(CCLayerTreeHostCommonTest, verifyContentsScaleForSurfaces) |
+{ |
+ MockContentLayerChromiumClient delegate; |
+ WebTransformationMatrix identityMatrix; |
+ |
+ WebTransformationMatrix parentScaleMatrix; |
+ const double initialParentScale = 2; |
+ parentScaleMatrix.scale(initialParentScale); |
+ |
+ WebTransformationMatrix childScaleMatrix; |
+ const double initialChildScale = 3; |
+ childScaleMatrix.scale(initialChildScale); |
+ |
+ scoped_refptr<ContentLayerChromium> parent = createDrawableContentLayerChromium(&delegate); |
+ setLayerPropertiesForTesting(parent.get(), parentScaleMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(0, 0), IntSize(100, 100), true); |
+ |
+ scoped_refptr<ContentLayerChromium> surfaceScale = createDrawableContentLayerChromium(&delegate); |
+ setLayerPropertiesForTesting(surfaceScale.get(), childScaleMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(2, 2), IntSize(10, 10), true); |
+ |
+ scoped_refptr<ContentLayerChromium> surfaceScaleChildScale = createDrawableContentLayerChromium(&delegate); |
+ setLayerPropertiesForTesting(surfaceScaleChildScale.get(), childScaleMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(0, 0), IntSize(10, 10), true); |
+ |
+ scoped_refptr<NoScaleContentLayerChromium> surfaceScaleChildNoScale = createNoScaleDrawableContentLayerChromium(&delegate); |
+ setLayerPropertiesForTesting(surfaceScaleChildNoScale.get(), childScaleMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(0, 0), IntSize(10, 10), true); |
+ |
+ scoped_refptr<NoScaleContentLayerChromium> surfaceNoScale = createNoScaleDrawableContentLayerChromium(&delegate); |
+ setLayerPropertiesForTesting(surfaceNoScale.get(), childScaleMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(12, 12), IntSize(10, 10), true); |
+ |
+ scoped_refptr<ContentLayerChromium> surfaceNoScaleChildScale = createDrawableContentLayerChromium(&delegate); |
+ setLayerPropertiesForTesting(surfaceNoScaleChildScale.get(), childScaleMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(0, 0), IntSize(10, 10), true); |
+ |
+ scoped_refptr<NoScaleContentLayerChromium> surfaceNoScaleChildNoScale = createNoScaleDrawableContentLayerChromium(&delegate); |
+ setLayerPropertiesForTesting(surfaceNoScaleChildNoScale.get(), childScaleMatrix, identityMatrix, FloatPoint(0, 0), FloatPoint(0, 0), IntSize(10, 10), true); |
+ |
+ // FIXME: Remove this when pageScaleFactor is applied in the compositor. |
+ // Page scale should not apply to the parent. |
+ parent->setBoundsContainPageScale(true); |
+ |
+ parent->addChild(surfaceScale); |
+ parent->addChild(surfaceNoScale); |
+ |
+ surfaceScale->setForceRenderSurface(true); |
+ surfaceScale->addChild(surfaceScaleChildScale); |
+ surfaceScale->addChild(surfaceScaleChildNoScale); |
+ |
+ surfaceNoScale->setForceRenderSurface(true); |
+ surfaceNoScale->addChild(surfaceNoScaleChildScale); |
+ surfaceNoScale->addChild(surfaceNoScaleChildNoScale); |
+ |
+ std::vector<scoped_refptr<LayerChromium> > renderSurfaceLayerList; |
+ int dummyMaxTextureSize = 512; |
+ |
+ double deviceScaleFactor = 5; |
+ double pageScaleFactor = 7; |
+ |
+ // 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, surfaceScale->contentsScale()); |
+ EXPECT_EQ(1, surfaceNoScale->contentsScale()); |
+ EXPECT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * initialChildScale * initialChildScale, surfaceScaleChildScale->contentsScale()); |
+ EXPECT_EQ(1, surfaceScaleChildNoScale->contentsScale()); |
+ EXPECT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * initialChildScale * initialChildScale, surfaceNoScaleChildScale->contentsScale()); |
+ EXPECT_EQ(1, surfaceNoScaleChildNoScale->contentsScale()); |
+ |
+ // The parent is scaled up and shouldn't need to scale during draw. |
+ EXPECT_FLOAT_EQ(1, parent->drawTransform().m11()); |
+ EXPECT_FLOAT_EQ(1, parent->drawTransform().m22()); |
+ |
+ // RenderSurfaces should always be 1:1 with their target. |
+ EXPECT_FLOAT_EQ(1, surfaceScale->renderSurface()->drawTransform().m11()); |
+ EXPECT_FLOAT_EQ(1, surfaceScale->renderSurface()->drawTransform().m22()); |
+ |
+ // The surfaceScale can apply contents scale so the layer shouldn't need to scale during draw. |
+ EXPECT_FLOAT_EQ(1, surfaceScale->drawTransform().m11()); |
+ EXPECT_FLOAT_EQ(1, surfaceScale->drawTransform().m22()); |
+ |
+ // The surfaceScaleChildScale can apply contents scale so it shouldn't need to scale during draw. |
+ EXPECT_FLOAT_EQ(1, surfaceScaleChildScale->drawTransform().m11()); |
+ EXPECT_FLOAT_EQ(1, surfaceScaleChildScale->drawTransform().m22()); |
+ |
+ // The surfaceScaleChildNoScale can not apply contents scale, so it needs to be scaled during draw. |
+ EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * initialChildScale * initialChildScale, surfaceScaleChildNoScale->drawTransform().m11()); |
+ EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * initialChildScale * initialChildScale, surfaceScaleChildNoScale->drawTransform().m22()); |
+ |
+ // RenderSurfaces should always be 1:1 with their target. |
+ EXPECT_FLOAT_EQ(1, surfaceNoScale->renderSurface()->drawTransform().m11()); |
+ EXPECT_FLOAT_EQ(1, surfaceNoScale->renderSurface()->drawTransform().m22()); |
+ |
+ // The surfaceScale layer can not apply contents scale, so it needs to be scaled during draw. |
+ EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * initialChildScale, surfaceNoScale->drawTransform().m11()); |
+ EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * initialChildScale, surfaceNoScale->drawTransform().m22()); |
+ |
+ // The surfaceScaleChildScale can apply contents scale so it shouldn't need to scale during draw. |
+ EXPECT_FLOAT_EQ(1, surfaceNoScaleChildScale->drawTransform().m11()); |
+ EXPECT_FLOAT_EQ(1, surfaceNoScaleChildScale->drawTransform().m22()); |
+ |
+ // The surfaceScaleChildNoScale can not apply contents scale, so it needs to be scaled during draw. |
+ EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * initialChildScale * initialChildScale, surfaceNoScaleChildNoScale->drawTransform().m11()); |
+ EXPECT_FLOAT_EQ(deviceScaleFactor * pageScaleFactor * initialParentScale * initialChildScale * initialChildScale, surfaceNoScaleChildNoScale->drawTransform().m22()); |
+ |
+} |
+ |
TEST(CCLayerTreeHostCommonTest, verifyRenderSurfaceTransformsInHighDPI) |
{ |
MockContentLayerChromiumClient delegate; |
@@ -3513,7 +3751,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). |