Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Side by Side Diff: cc/trees/layer_tree_host_common_unittest.cc

Issue 217313003: Stop displaying layers with non-invertible transforms. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test comment for cases 2-3. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/layer_tree_host_common.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host_common.h" 5 #include "cc/trees/layer_tree_host_common.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "cc/animation/layer_animation_controller.h" 9 #include "cc/animation/layer_animation_controller.h"
10 #include "cc/animation/transform_operations.h" 10 #include "cc/animation/transform_operations.h"
(...skipping 2924 matching lines...) Expand 10 before | Expand all | Expand 10 after
2935 gfx::PointF(5.f, 5.f), 2935 gfx::PointF(5.f, 5.f),
2936 gfx::Size(50, 50), 2936 gfx::Size(50, 50),
2937 true, 2937 true,
2938 false); 2938 false);
2939 2939
2940 ExecuteCalculateDrawProperties(root.get()); 2940 ExecuteCalculateDrawProperties(root.get());
2941 2941
2942 EXPECT_TRUE(child->visible_content_rect().IsEmpty()); 2942 EXPECT_TRUE(child->visible_content_rect().IsEmpty());
2943 EXPECT_TRUE(child->drawable_content_rect().IsEmpty()); 2943 EXPECT_TRUE(child->drawable_content_rect().IsEmpty());
2944 2944
2945 // Case 2: a matrix with flattened z, technically uninvertible but still 2945 // Case 2: a matrix with flattened z, uninvertible and not visible according
2946 // drawable and visible. In this case, we must assume that the entire layer 2946 // to the CSS spec.
2947 // bounds are visible since there is no way to inverse-project the surface
2948 // bounds to intersect.
2949 uninvertible_matrix.MakeIdentity(); 2947 uninvertible_matrix.MakeIdentity();
2950 uninvertible_matrix.matrix().set(2, 2, 0.0); 2948 uninvertible_matrix.matrix().set(2, 2, 0.0);
2951 ASSERT_FALSE(uninvertible_matrix.IsInvertible()); 2949 ASSERT_FALSE(uninvertible_matrix.IsInvertible());
2952 2950
2953 SetLayerPropertiesForTesting(child.get(), 2951 SetLayerPropertiesForTesting(child.get(),
2954 uninvertible_matrix, 2952 uninvertible_matrix,
2955 gfx::PointF(), 2953 gfx::PointF(),
2956 gfx::PointF(5.f, 5.f), 2954 gfx::PointF(5.f, 5.f),
2957 gfx::Size(50, 50), 2955 gfx::Size(50, 50),
2958 true, 2956 true,
2959 false); 2957 false);
2960 2958
2961 ExecuteCalculateDrawProperties(root.get()); 2959 ExecuteCalculateDrawProperties(root.get());
2962 2960
2963 EXPECT_RECT_EQ(gfx::Rect(0, 0, 50, 50), child->visible_content_rect()); 2961 EXPECT_TRUE(child->visible_content_rect().IsEmpty());
2964 EXPECT_RECT_EQ(gfx::Rect(5, 5, 50, 50), child->drawable_content_rect()); 2962 EXPECT_TRUE(child->drawable_content_rect().IsEmpty());
2965 2963
2966 // Case 3: a matrix with flattened z, technically uninvertible but still 2964 // Case 3: a matrix with flattened z, also uninvertible and not visible.
2967 // drawable, but not visible. In this case, we don't need to conservatively
2968 // assume that the whole layer is visible.
2969 uninvertible_matrix.MakeIdentity(); 2965 uninvertible_matrix.MakeIdentity();
2970 uninvertible_matrix.Translate(500.0, 0.0); 2966 uninvertible_matrix.Translate(500.0, 0.0);
2971 uninvertible_matrix.matrix().set(2, 2, 0.0); 2967 uninvertible_matrix.matrix().set(2, 2, 0.0);
2972 ASSERT_FALSE(uninvertible_matrix.IsInvertible()); 2968 ASSERT_FALSE(uninvertible_matrix.IsInvertible());
2973 2969
2974 SetLayerPropertiesForTesting(child.get(), 2970 SetLayerPropertiesForTesting(child.get(),
2975 uninvertible_matrix, 2971 uninvertible_matrix,
2976 gfx::PointF(), 2972 gfx::PointF(),
2977 gfx::PointF(5.f, 5.f), 2973 gfx::PointF(5.f, 5.f),
2978 gfx::Size(50, 50), 2974 gfx::Size(50, 50),
2979 true, 2975 true,
2980 false); 2976 false);
2981 2977
2982 ExecuteCalculateDrawProperties(root.get()); 2978 ExecuteCalculateDrawProperties(root.get());
2983 2979
2984 EXPECT_TRUE(child->visible_content_rect().IsEmpty()); 2980 EXPECT_TRUE(child->visible_content_rect().IsEmpty());
2985 EXPECT_RECT_EQ(gfx::Rect(505, 5, 50, 50), child->drawable_content_rect()); 2981 EXPECT_TRUE(child->drawable_content_rect().IsEmpty());
2986 } 2982 }
2987 2983
2988 TEST_F(LayerTreeHostCommonTest, 2984 TEST_F(LayerTreeHostCommonTest,
2989 DrawableAndVisibleContentRectsForLayersInClippedRenderSurface) { 2985 DrawableAndVisibleContentRectsForLayersInClippedRenderSurface) {
2990 scoped_refptr<Layer> root = Layer::Create(); 2986 scoped_refptr<Layer> root = Layer::Create();
2991 scoped_refptr<Layer> render_surface1 = Layer::Create(); 2987 scoped_refptr<Layer> render_surface1 = Layer::Create();
2992 scoped_refptr<LayerWithForcedDrawsContent> child1 = 2988 scoped_refptr<LayerWithForcedDrawsContent> child1 =
2993 make_scoped_refptr(new LayerWithForcedDrawsContent()); 2989 make_scoped_refptr(new LayerWithForcedDrawsContent());
2994 scoped_refptr<LayerWithForcedDrawsContent> child2 = 2990 scoped_refptr<LayerWithForcedDrawsContent> child2 =
2995 make_scoped_refptr(new LayerWithForcedDrawsContent()); 2991 make_scoped_refptr(new LayerWithForcedDrawsContent());
(...skipping 6135 matching lines...) Expand 10 before | Expand all | Expand 10 after
9131 9127
9132 ExecuteCalculateDrawProperties(root.get()); 9128 ExecuteCalculateDrawProperties(root.get());
9133 9129
9134 EXPECT_TRUE(root->render_surface()); 9130 EXPECT_TRUE(root->render_surface());
9135 9131
9136 EXPECT_EQ(gfx::Rect(0, 0, 30, 30).ToString(), 9132 EXPECT_EQ(gfx::Rect(0, 0, 30, 30).ToString(),
9137 scroll_child->clip_rect().ToString()); 9133 scroll_child->clip_rect().ToString());
9138 EXPECT_TRUE(scroll_child->is_clipped()); 9134 EXPECT_TRUE(scroll_child->is_clipped());
9139 } 9135 }
9140 9136
9137 TEST_F(LayerTreeHostCommonTest, SingularTransformSubtreesDoNotDraw) {
9138 scoped_refptr<LayerWithForcedDrawsContent> root =
9139 make_scoped_refptr(new LayerWithForcedDrawsContent);
9140 scoped_refptr<LayerWithForcedDrawsContent> parent =
9141 make_scoped_refptr(new LayerWithForcedDrawsContent);
9142 scoped_refptr<LayerWithForcedDrawsContent> child =
9143 make_scoped_refptr(new LayerWithForcedDrawsContent);
9144
9145 root->AddChild(parent);
9146 parent->AddChild(child);
9147
9148 gfx::Transform identity_transform;
9149 SetLayerPropertiesForTesting(root.get(),
9150 identity_transform,
9151 gfx::PointF(),
9152 gfx::PointF(),
9153 gfx::Size(50, 50),
9154 true,
9155 true);
9156 root->SetForceRenderSurface(true);
9157 SetLayerPropertiesForTesting(parent.get(),
9158 identity_transform,
9159 gfx::PointF(),
9160 gfx::PointF(),
9161 gfx::Size(30, 30),
9162 true,
9163 true);
9164 parent->SetForceRenderSurface(true);
9165 SetLayerPropertiesForTesting(child.get(),
9166 identity_transform,
9167 gfx::PointF(),
9168 gfx::PointF(),
9169 gfx::Size(20, 20),
9170 true,
9171 true);
9172 child->SetForceRenderSurface(true);
9173
9174 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
9175 host->SetRootLayer(root);
9176
9177 ExecuteCalculateDrawProperties(root.get());
9178
9179 EXPECT_EQ(3u, render_surface_layer_list()->size());
9180
9181 gfx::Transform singular_transform;
9182 singular_transform.Scale3d(
9183 SkDoubleToMScalar(1.0), SkDoubleToMScalar(1.0), SkDoubleToMScalar(0.0));
9184
9185 child->SetTransform(singular_transform);
9186
9187 ExecuteCalculateDrawProperties(root.get());
9188
9189 EXPECT_EQ(2u, render_surface_layer_list()->size());
9190
9191 // Ensure that the entire subtree under a layer with singular transform does
9192 // not get rendered.
9193 parent->SetTransform(singular_transform);
9194 child->SetTransform(identity_transform);
9195
9196 ExecuteCalculateDrawProperties(root.get());
9197
9198 EXPECT_EQ(1u, render_surface_layer_list()->size());
9199 }
9200
9141 TEST_F(LayerTreeHostCommonTest, ClippedByOutOfOrderScrollParent) { 9201 TEST_F(LayerTreeHostCommonTest, ClippedByOutOfOrderScrollParent) {
9142 // Checks that clipping by a scroll parent that follows you in paint order 9202 // Checks that clipping by a scroll parent that follows you in paint order
9143 // still results in correct clipping. 9203 // still results in correct clipping.
9144 // 9204 //
9145 // + root 9205 // + root
9146 // + scroll_child 9206 // + scroll_child
9147 // + scroll_parent_border 9207 // + scroll_parent_border
9148 // + scroll_parent_clip 9208 // + scroll_parent_clip
9149 // + scroll_parent 9209 // + scroll_parent
9150 // 9210 //
(...skipping 849 matching lines...) Expand 10 before | Expand all | Expand 10 after
10000 10060
10001 // |grand_parent| has a transform that's neither a translation nor a scale. 10061 // |grand_parent| has a transform that's neither a translation nor a scale.
10002 EXPECT_EQ(0.f, grand_parent->last_maximum_animation_contents_scale()); 10062 EXPECT_EQ(0.f, grand_parent->last_maximum_animation_contents_scale());
10003 EXPECT_EQ(0.f, parent_raw->last_maximum_animation_contents_scale()); 10063 EXPECT_EQ(0.f, parent_raw->last_maximum_animation_contents_scale());
10004 EXPECT_EQ(0.f, child_raw->last_maximum_animation_contents_scale()); 10064 EXPECT_EQ(0.f, child_raw->last_maximum_animation_contents_scale());
10005 EXPECT_EQ(0.f, grand_child_raw->last_maximum_animation_contents_scale()); 10065 EXPECT_EQ(0.f, grand_child_raw->last_maximum_animation_contents_scale());
10006 } 10066 }
10007 10067
10008 } // namespace 10068 } // namespace
10009 } // namespace cc 10069 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_common.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698