| 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 8d48cd69a658b0ebd1e53f1262b64c95428bd72a..85f42434d0dec80c15d06d0b77fc66c900bf4cbe 100644
|
| --- a/cc/trees/layer_tree_host_common_unittest.cc
|
| +++ b/cc/trees/layer_tree_host_common_unittest.cc
|
| @@ -2942,10 +2942,8 @@ TEST_F(LayerTreeHostCommonTest,
|
| EXPECT_TRUE(child->visible_content_rect().IsEmpty());
|
| EXPECT_TRUE(child->drawable_content_rect().IsEmpty());
|
|
|
| - // Case 2: a matrix with flattened z, technically uninvertible but still
|
| - // drawable and visible. In this case, we must assume that the entire layer
|
| - // bounds are visible since there is no way to inverse-project the surface
|
| - // bounds to intersect.
|
| + // Case 2: a matrix with flattened z, uninvertible and not visible according
|
| + // to the CSS spec.
|
| uninvertible_matrix.MakeIdentity();
|
| uninvertible_matrix.matrix().set(2, 2, 0.0);
|
| ASSERT_FALSE(uninvertible_matrix.IsInvertible());
|
| @@ -2960,12 +2958,10 @@ TEST_F(LayerTreeHostCommonTest,
|
|
|
| ExecuteCalculateDrawProperties(root.get());
|
|
|
| - EXPECT_RECT_EQ(gfx::Rect(0, 0, 50, 50), child->visible_content_rect());
|
| - EXPECT_RECT_EQ(gfx::Rect(5, 5, 50, 50), child->drawable_content_rect());
|
| + EXPECT_TRUE(child->visible_content_rect().IsEmpty());
|
| + EXPECT_TRUE(child->drawable_content_rect().IsEmpty());
|
|
|
| - // Case 3: a matrix with flattened z, technically uninvertible but still
|
| - // drawable, but not visible. In this case, we don't need to conservatively
|
| - // assume that the whole layer is visible.
|
| + // Case 3: a matrix with flattened z, also uninvertible and not visible.
|
| uninvertible_matrix.MakeIdentity();
|
| uninvertible_matrix.Translate(500.0, 0.0);
|
| uninvertible_matrix.matrix().set(2, 2, 0.0);
|
| @@ -2982,7 +2978,7 @@ TEST_F(LayerTreeHostCommonTest,
|
| ExecuteCalculateDrawProperties(root.get());
|
|
|
| EXPECT_TRUE(child->visible_content_rect().IsEmpty());
|
| - EXPECT_RECT_EQ(gfx::Rect(505, 5, 50, 50), child->drawable_content_rect());
|
| + EXPECT_TRUE(child->drawable_content_rect().IsEmpty());
|
| }
|
|
|
| TEST_F(LayerTreeHostCommonTest,
|
| @@ -9138,6 +9134,70 @@ TEST_F(LayerTreeHostCommonTest, ClippedByScrollParent) {
|
| EXPECT_TRUE(scroll_child->is_clipped());
|
| }
|
|
|
| +TEST_F(LayerTreeHostCommonTest, SingularTransformSubtreesDoNotDraw) {
|
| + scoped_refptr<LayerWithForcedDrawsContent> root =
|
| + make_scoped_refptr(new LayerWithForcedDrawsContent);
|
| + scoped_refptr<LayerWithForcedDrawsContent> parent =
|
| + make_scoped_refptr(new LayerWithForcedDrawsContent);
|
| + scoped_refptr<LayerWithForcedDrawsContent> child =
|
| + make_scoped_refptr(new LayerWithForcedDrawsContent);
|
| +
|
| + root->AddChild(parent);
|
| + parent->AddChild(child);
|
| +
|
| + gfx::Transform identity_transform;
|
| + SetLayerPropertiesForTesting(root.get(),
|
| + identity_transform,
|
| + gfx::PointF(),
|
| + gfx::PointF(),
|
| + gfx::Size(50, 50),
|
| + true,
|
| + true);
|
| + root->SetForceRenderSurface(true);
|
| + SetLayerPropertiesForTesting(parent.get(),
|
| + identity_transform,
|
| + gfx::PointF(),
|
| + gfx::PointF(),
|
| + gfx::Size(30, 30),
|
| + true,
|
| + true);
|
| + parent->SetForceRenderSurface(true);
|
| + SetLayerPropertiesForTesting(child.get(),
|
| + identity_transform,
|
| + gfx::PointF(),
|
| + gfx::PointF(),
|
| + gfx::Size(20, 20),
|
| + true,
|
| + true);
|
| + child->SetForceRenderSurface(true);
|
| +
|
| + scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
|
| + host->SetRootLayer(root);
|
| +
|
| + ExecuteCalculateDrawProperties(root.get());
|
| +
|
| + EXPECT_EQ(3u, render_surface_layer_list()->size());
|
| +
|
| + gfx::Transform singular_transform;
|
| + singular_transform.Scale3d(
|
| + SkDoubleToMScalar(1.0), SkDoubleToMScalar(1.0), SkDoubleToMScalar(0.0));
|
| +
|
| + child->SetTransform(singular_transform);
|
| +
|
| + ExecuteCalculateDrawProperties(root.get());
|
| +
|
| + EXPECT_EQ(2u, render_surface_layer_list()->size());
|
| +
|
| + // Ensure that the entire subtree under a layer with singular transform does
|
| + // not get rendered.
|
| + parent->SetTransform(singular_transform);
|
| + child->SetTransform(identity_transform);
|
| +
|
| + ExecuteCalculateDrawProperties(root.get());
|
| +
|
| + EXPECT_EQ(1u, render_surface_layer_list()->size());
|
| +}
|
| +
|
| TEST_F(LayerTreeHostCommonTest, ClippedByOutOfOrderScrollParent) {
|
| // Checks that clipping by a scroll parent that follows you in paint order
|
| // still results in correct clipping.
|
|
|