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

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

Issue 951673002: Revert "Pull chromium at 2c3ffb2355a27c32f45e508ef861416b820c823b" (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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_sorter.cc ('k') | cc/trees/layer_tree_host.h » ('j') | 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_sorter.h" 5 #include "cc/trees/layer_sorter.h"
6 6
7 #include "cc/base/math_util.h" 7 #include "cc/base/math_util.h"
8 #include "cc/layers/layer_impl.h" 8 #include "cc/layers/layer_impl.h"
9 #include "cc/test/fake_impl_proxy.h" 9 #include "cc/test/fake_impl_proxy.h"
10 #include "cc/test/fake_layer_tree_host_impl.h" 10 #include "cc/test/fake_layer_tree_host_impl.h"
(...skipping 19 matching lines...) Expand all
30 gfx::Transform neg4_translate; 30 gfx::Transform neg4_translate;
31 neg4_translate.Translate3d(0.0, 0.0, -4.0); 31 neg4_translate.Translate3d(0.0, 0.0, -4.0);
32 LayerShape front(2.f, 2.f, neg4_translate); 32 LayerShape front(2.f, 2.f, neg4_translate);
33 33
34 gfx::Transform neg5_translate; 34 gfx::Transform neg5_translate;
35 neg5_translate.Translate3d(0.0, 0.0, -5.0); 35 neg5_translate.Translate3d(0.0, 0.0, -5.0);
36 LayerShape back(2.f, 2.f, neg5_translate); 36 LayerShape back(2.f, 2.f, neg5_translate);
37 37
38 overlap_result = 38 overlap_result =
39 LayerSorter::CheckOverlap(&front, &back, z_threshold, &weight); 39 LayerSorter::CheckOverlap(&front, &back, z_threshold, &weight);
40 EXPECT_EQ(LayerSorter::B_BEFORE_A, overlap_result); 40 EXPECT_EQ(LayerSorter::BBeforeA, overlap_result);
41 EXPECT_EQ(1.f, weight); 41 EXPECT_EQ(1.f, weight);
42 42
43 overlap_result = 43 overlap_result =
44 LayerSorter::CheckOverlap(&back, &front, z_threshold, &weight); 44 LayerSorter::CheckOverlap(&back, &front, z_threshold, &weight);
45 EXPECT_EQ(LayerSorter::A_BEFORE_B, overlap_result); 45 EXPECT_EQ(LayerSorter::ABeforeB, overlap_result);
46 EXPECT_EQ(1.f, weight); 46 EXPECT_EQ(1.f, weight);
47 47
48 // One layer translated off to the right. No overlap should be detected. 48 // One layer translated off to the right. No overlap should be detected.
49 gfx::Transform right_translate; 49 gfx::Transform right_translate;
50 right_translate.Translate3d(10.0, 0.0, -5.0); 50 right_translate.Translate3d(10.0, 0.0, -5.0);
51 LayerShape back_right(2.f, 2.f, right_translate); 51 LayerShape back_right(2.f, 2.f, right_translate);
52 overlap_result = 52 overlap_result =
53 LayerSorter::CheckOverlap(&front, &back_right, z_threshold, &weight); 53 LayerSorter::CheckOverlap(&front, &back_right, z_threshold, &weight);
54 EXPECT_EQ(LayerSorter::NONE, overlap_result); 54 EXPECT_EQ(LayerSorter::None, overlap_result);
55 55
56 // When comparing a layer with itself, z difference is always 0. 56 // When comparing a layer with itself, z difference is always 0.
57 overlap_result = 57 overlap_result =
58 LayerSorter::CheckOverlap(&front, &front, z_threshold, &weight); 58 LayerSorter::CheckOverlap(&front, &front, z_threshold, &weight);
59 EXPECT_EQ(0.f, weight); 59 EXPECT_EQ(0.f, weight);
60 } 60 }
61 61
62 TEST(LayerSorterTest, RightAngleOverlap) { 62 TEST(LayerSorterTest, RightAngleOverlap) {
63 LayerSorter::ABCompareResult overlap_result; 63 LayerSorter::ABCompareResult overlap_result;
64 const float z_threshold = 0.1f; 64 const float z_threshold = 0.1f;
65 float weight = 0.f; 65 float weight = 0.f;
66 66
67 gfx::Transform perspective_matrix; 67 gfx::Transform perspective_matrix;
68 perspective_matrix.ApplyPerspectiveDepth(1000.0); 68 perspective_matrix.ApplyPerspectiveDepth(1000.0);
69 69
70 // Two layers forming a right angle with a perspective viewing transform. 70 // Two layers forming a right angle with a perspective viewing transform.
71 gfx::Transform left_face_matrix; 71 gfx::Transform left_face_matrix;
72 left_face_matrix.Translate3d(-1.0, 0.0, -5.0); 72 left_face_matrix.Translate3d(-1.0, 0.0, -5.0);
73 left_face_matrix.RotateAboutYAxis(-90.0); 73 left_face_matrix.RotateAboutYAxis(-90.0);
74 left_face_matrix.Translate(-1.0, -1.0); 74 left_face_matrix.Translate(-1.0, -1.0);
75 LayerShape left_face(2.f, 2.f, perspective_matrix * left_face_matrix); 75 LayerShape left_face(2.f, 2.f, perspective_matrix * left_face_matrix);
76 gfx::Transform front_face_matrix; 76 gfx::Transform front_face_matrix;
77 front_face_matrix.Translate3d(0.0, 0.0, -4.0); 77 front_face_matrix.Translate3d(0.0, 0.0, -4.0);
78 front_face_matrix.Translate(-1.0, -1.0); 78 front_face_matrix.Translate(-1.0, -1.0);
79 LayerShape front_face(2.f, 2.f, perspective_matrix * front_face_matrix); 79 LayerShape front_face(2.f, 2.f, perspective_matrix * front_face_matrix);
80 80
81 overlap_result = 81 overlap_result =
82 LayerSorter::CheckOverlap(&front_face, &left_face, z_threshold, &weight); 82 LayerSorter::CheckOverlap(&front_face, &left_face, z_threshold, &weight);
83 EXPECT_EQ(LayerSorter::B_BEFORE_A, overlap_result); 83 EXPECT_EQ(LayerSorter::BBeforeA, overlap_result);
84 } 84 }
85 85
86 TEST(LayerSorterTest, IntersectingLayerOverlap) { 86 TEST(LayerSorterTest, IntersectingLayerOverlap) {
87 LayerSorter::ABCompareResult overlap_result; 87 LayerSorter::ABCompareResult overlap_result;
88 const float z_threshold = 0.1f; 88 const float z_threshold = 0.1f;
89 float weight = 0.f; 89 float weight = 0.f;
90 90
91 gfx::Transform perspective_matrix; 91 gfx::Transform perspective_matrix;
92 perspective_matrix.ApplyPerspectiveDepth(1000.0); 92 perspective_matrix.ApplyPerspectiveDepth(1000.0);
93 93
94 // Intersecting layers. An explicit order will be returned based on relative z 94 // Intersecting layers. An explicit order will be returned based on relative z
95 // values at the overlapping features but the weight returned should be zero. 95 // values at the overlapping features but the weight returned should be zero.
96 gfx::Transform front_face_matrix; 96 gfx::Transform front_face_matrix;
97 front_face_matrix.Translate3d(0.0, 0.0, -4.0); 97 front_face_matrix.Translate3d(0.0, 0.0, -4.0);
98 front_face_matrix.Translate(-1.0, -1.0); 98 front_face_matrix.Translate(-1.0, -1.0);
99 LayerShape front_face(2.f, 2.f, perspective_matrix * front_face_matrix); 99 LayerShape front_face(2.f, 2.f, perspective_matrix * front_face_matrix);
100 100
101 gfx::Transform through_matrix; 101 gfx::Transform through_matrix;
102 through_matrix.Translate3d(0.0, 0.0, -4.0); 102 through_matrix.Translate3d(0.0, 0.0, -4.0);
103 through_matrix.RotateAboutYAxis(45.0); 103 through_matrix.RotateAboutYAxis(45.0);
104 through_matrix.Translate(-1.0, -1.0); 104 through_matrix.Translate(-1.0, -1.0);
105 LayerShape rotated_face(2.f, 2.f, perspective_matrix * through_matrix); 105 LayerShape rotated_face(2.f, 2.f, perspective_matrix * through_matrix);
106 overlap_result = LayerSorter::CheckOverlap(&front_face, 106 overlap_result = LayerSorter::CheckOverlap(&front_face,
107 &rotated_face, 107 &rotated_face,
108 z_threshold, 108 z_threshold,
109 &weight); 109 &weight);
110 EXPECT_NE(LayerSorter::NONE, overlap_result); 110 EXPECT_NE(LayerSorter::None, overlap_result);
111 EXPECT_EQ(0.f, weight); 111 EXPECT_EQ(0.f, weight);
112 } 112 }
113 113
114 TEST(LayerSorterTest, LayersAtAngleOverlap) { 114 TEST(LayerSorterTest, LayersAtAngleOverlap) {
115 LayerSorter::ABCompareResult overlap_result; 115 LayerSorter::ABCompareResult overlap_result;
116 const float z_threshold = 0.1f; 116 const float z_threshold = 0.1f;
117 float weight = 0.f; 117 float weight = 0.f;
118 118
119 // Trickier test with layers at an angle. 119 // Trickier test with layers at an angle.
120 // 120 //
(...skipping 17 matching lines...) Expand all
138 transform_b.Translate(-4.0, -10.0); 138 transform_b.Translate(-4.0, -10.0);
139 LayerShape layer_b(8.f, 20.f, transform_b); 139 LayerShape layer_b(8.f, 20.f, transform_b);
140 140
141 gfx::Transform transform_c; 141 gfx::Transform transform_c;
142 transform_c.RotateAboutYAxis(40.0); 142 transform_c.RotateAboutYAxis(40.0);
143 transform_c.Translate(-4.0, -10.0); 143 transform_c.Translate(-4.0, -10.0);
144 LayerShape layer_c(8.f, 20.f, transform_c); 144 LayerShape layer_c(8.f, 20.f, transform_c);
145 145
146 overlap_result = 146 overlap_result =
147 LayerSorter::CheckOverlap(&layer_a, &layer_c, z_threshold, &weight); 147 LayerSorter::CheckOverlap(&layer_a, &layer_c, z_threshold, &weight);
148 EXPECT_EQ(LayerSorter::A_BEFORE_B, overlap_result); 148 EXPECT_EQ(LayerSorter::ABeforeB, overlap_result);
149 overlap_result = 149 overlap_result =
150 LayerSorter::CheckOverlap(&layer_c, &layer_b, z_threshold, &weight); 150 LayerSorter::CheckOverlap(&layer_c, &layer_b, z_threshold, &weight);
151 EXPECT_EQ(LayerSorter::A_BEFORE_B, overlap_result); 151 EXPECT_EQ(LayerSorter::ABeforeB, overlap_result);
152 overlap_result = 152 overlap_result =
153 LayerSorter::CheckOverlap(&layer_a, &layer_b, z_threshold, &weight); 153 LayerSorter::CheckOverlap(&layer_a, &layer_b, z_threshold, &weight);
154 EXPECT_EQ(LayerSorter::NONE, overlap_result); 154 EXPECT_EQ(LayerSorter::None, overlap_result);
155 } 155 }
156 156
157 TEST(LayerSorterTest, LayersUnderPathologicalPerspectiveTransform) { 157 TEST(LayerSorterTest, LayersUnderPathologicalPerspectiveTransform) {
158 LayerSorter::ABCompareResult overlap_result; 158 LayerSorter::ABCompareResult overlap_result;
159 const float z_threshold = 0.1f; 159 const float z_threshold = 0.1f;
160 float weight = 0.f; 160 float weight = 0.f;
161 161
162 // On perspective projection, if w becomes negative, the re-projected point 162 // On perspective projection, if w becomes negative, the re-projected point
163 // will be invalid and un-usable. Correct code needs to clip away portions of 163 // will be invalid and un-usable. Correct code needs to clip away portions of
164 // the geometry where w < 0. If the code uses the invalid value, it will think 164 // the geometry where w < 0. If the code uses the invalid value, it will think
(...skipping 20 matching lines...) Expand all
185 185
186 // Sanity check that the test case actually covers the intended scenario, 186 // Sanity check that the test case actually covers the intended scenario,
187 // where part of layer B go behind the w = 0 plane. 187 // where part of layer B go behind the w = 0 plane.
188 gfx::QuadF test_quad = gfx::QuadF(gfx::RectF(-0.5f, -0.5f, 1.f, 1.f)); 188 gfx::QuadF test_quad = gfx::QuadF(gfx::RectF(-0.5f, -0.5f, 1.f, 1.f));
189 bool clipped = false; 189 bool clipped = false;
190 MathUtil::MapQuad(perspective_matrix * transform_b, test_quad, &clipped); 190 MathUtil::MapQuad(perspective_matrix * transform_b, test_quad, &clipped);
191 ASSERT_TRUE(clipped); 191 ASSERT_TRUE(clipped);
192 192
193 overlap_result = 193 overlap_result =
194 LayerSorter::CheckOverlap(&layer_a, &layer_b, z_threshold, &weight); 194 LayerSorter::CheckOverlap(&layer_a, &layer_b, z_threshold, &weight);
195 EXPECT_EQ(LayerSorter::A_BEFORE_B, overlap_result); 195 EXPECT_EQ(LayerSorter::ABeforeB, overlap_result);
196 } 196 }
197 197
198 TEST(LayerSorterTest, VerifyExistingOrderingPreservedWhenNoZDiff) { 198 TEST(LayerSorterTest, VerifyExistingOrderingPreservedWhenNoZDiff) {
199 // If there is no reason to re-sort the layers (i.e. no 3d z difference), then 199 // If there is no reason to re-sort the layers (i.e. no 3d z difference), then
200 // the existing ordering provided on input should be retained. This test 200 // the existing ordering provided on input should be retained. This test
201 // covers the fix in https://bugs.webkit.org/show_bug.cgi?id=75046. Before 201 // covers the fix in https://bugs.webkit.org/show_bug.cgi?id=75046. Before
202 // this fix, ordering was accidentally reversed, causing bugs in z-index 202 // this fix, ordering was accidentally reversed, causing bugs in z-index
203 // ordering on websites when preserves3D triggered the LayerSorter. 203 // ordering on websites when preserves3D triggered the LayerSorter.
204 204
205 // Input list of layers: [1, 2, 3, 4, 5]. 205 // Input list of layers: [1, 2, 3, 4, 5].
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 layer_sorter.Sort(layer_list.begin(), layer_list.end()); 320 layer_sorter.Sort(layer_list.begin(), layer_list.end());
321 321
322 ASSERT_EQ(2u, layer_list.size()); 322 ASSERT_EQ(2u, layer_list.size());
323 EXPECT_EQ(1, layer_list[0]->id()); 323 EXPECT_EQ(1, layer_list[0]->id());
324 EXPECT_EQ(2, layer_list[1]->id()); 324 EXPECT_EQ(2, layer_list[1]->id());
325 } 325 }
326 326
327 } // namespace 327 } // namespace
328 } // namespace cc 328 } // namespace cc
329 329
OLDNEW
« no previous file with comments | « cc/trees/layer_sorter.cc ('k') | cc/trees/layer_tree_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698