| Index: cc/trees/layer_tree_host_common_unittest.cc
|
| diff --git a/cc/trees/layer_tree_host_common_unittest.cc b/cc/trees/layer_tree_host_common_unittest.cc
|
| index 0a51cccfc0b61706e26f37be82fb7f6ffd2afc85..6c0d1ae7117bb868fc983c44a7fea75f0e9fb1be 100644
|
| --- a/cc/trees/layer_tree_host_common_unittest.cc
|
| +++ b/cc/trees/layer_tree_host_common_unittest.cc
|
| @@ -1478,6 +1478,74 @@ TEST_F(LayerTreeHostCommonTest, ForceRenderSurface) {
|
| }
|
| }
|
|
|
| +TEST_F(LayerTreeHostCommonTest, RenderSurfacesFlattenScreenSpaceTransform) {
|
| + // Render surfaces act as a flattening point for their subtree, so should
|
| + // always flatten the target-to-screen space transform seen by descendants.
|
| +
|
| + scoped_refptr<Layer> root = Layer::Create();
|
| + scoped_refptr<Layer> parent = Layer::Create();
|
| + scoped_refptr<LayerWithForcedDrawsContent> child =
|
| + make_scoped_refptr(new LayerWithForcedDrawsContent());
|
| + scoped_refptr<LayerWithForcedDrawsContent> grand_child =
|
| + make_scoped_refptr(new LayerWithForcedDrawsContent());
|
| +
|
| + gfx::Transform rotation_about_y_axis;
|
| + rotation_about_y_axis.RotateAboutYAxis(30.0);
|
| + // Make |parent| have a render surface.
|
| + parent->SetOpacity(0.9f);
|
| +
|
| + const gfx::Transform identity_matrix;
|
| + SetLayerPropertiesForTesting(root.get(), identity_matrix, gfx::Point3F(),
|
| + gfx::PointF(), gfx::Size(100, 100), true, false);
|
| + SetLayerPropertiesForTesting(parent.get(), rotation_about_y_axis,
|
| + gfx::Point3F(), gfx::PointF(), gfx::Size(10, 10),
|
| + true, false);
|
| + SetLayerPropertiesForTesting(child.get(), identity_matrix, gfx::Point3F(),
|
| + gfx::PointF(), gfx::Size(10, 10), true, false);
|
| + SetLayerPropertiesForTesting(grand_child.get(), identity_matrix,
|
| + gfx::Point3F(), gfx::PointF(), gfx::Size(10, 10),
|
| + true, false);
|
| +
|
| + root->AddChild(parent);
|
| + parent->AddChild(child);
|
| + child->AddChild(grand_child);
|
| +
|
| + grand_child->SetShouldFlattenTransform(false);
|
| +
|
| + scoped_ptr<FakeLayerTreeHost> host(CreateFakeLayerTreeHost());
|
| + host->SetRootLayer(root);
|
| +
|
| + // Only grand_child should preserve 3d.
|
| + EXPECT_TRUE(root->should_flatten_transform());
|
| + EXPECT_TRUE(parent->should_flatten_transform());
|
| + EXPECT_TRUE(child->should_flatten_transform());
|
| + EXPECT_FALSE(grand_child->should_flatten_transform());
|
| +
|
| + gfx::Transform expected_child_draw_transform = identity_matrix;
|
| + gfx::Transform expected_grand_child_draw_transform = identity_matrix;
|
| +
|
| + gfx::Transform flattened_rotation_about_y = rotation_about_y_axis;
|
| + flattened_rotation_about_y.FlattenTo2d();
|
| +
|
| + ExecuteCalculateDrawProperties(root.get());
|
| +
|
| + EXPECT_TRUE(parent->render_surface());
|
| + EXPECT_FALSE(child->render_surface());
|
| + EXPECT_FALSE(grand_child->render_surface());
|
| +
|
| + EXPECT_TRANSFORMATION_MATRIX_EQ(identity_matrix, child->draw_transform());
|
| + EXPECT_TRANSFORMATION_MATRIX_EQ(identity_matrix,
|
| + grand_child->draw_transform());
|
| +
|
| + // The screen-space transform inherited by |child| and |grand_child| should
|
| + // have been flattened at their render target. In particular, the fact that
|
| + // |grand_child| happens to preserve 3d shouldn't affect this flattening.
|
| + EXPECT_TRANSFORMATION_MATRIX_EQ(flattened_rotation_about_y,
|
| + child->screen_space_transform());
|
| + EXPECT_TRANSFORMATION_MATRIX_EQ(flattened_rotation_about_y,
|
| + grand_child->screen_space_transform());
|
| +}
|
| +
|
| TEST_F(LayerTreeHostCommonTest, ClipRectCullsRenderSurfaces) {
|
| // The entire subtree of layers that are outside the clip rect should be
|
| // culled away, and should not affect the render_surface_layer_list.
|
|
|