@@ -130,6 +130,82 @@ TEST(EntityPassClipStackTest, AppendAndRestoreClipCoverage) {
130
130
EXPECT_EQ (recorder.GetReplayEntities ().size (), 0u );
131
131
}
132
132
133
+ // Append two clip coverages, the second is larger the first. This
134
+ // should result in the second clip not requiring any update.
135
+ TEST (EntityPassClipStackTest, AppendLargerClipCoverage) {
136
+ EntityPassClipStack recorder =
137
+ EntityPassClipStack (Rect::MakeLTRB (0 , 0 , 100 , 100 ));
138
+
139
+ ASSERT_EQ (recorder.GetClipCoverageLayers ().size (), 1u );
140
+
141
+ // Push a clip.
142
+ Entity entity;
143
+ EntityPassClipStack::ClipStateResult result = recorder.ApplyClipState (
144
+ Contents::ClipCoverage{
145
+ .type = Contents::ClipCoverage::Type::kAppend ,
146
+ .coverage = Rect::MakeLTRB (50 , 50 , 55 , 55 ),
147
+ },
148
+ entity, 0 , Point (0 , 0 ));
149
+ EXPECT_TRUE (result.should_render );
150
+ EXPECT_TRUE (result.clip_did_change );
151
+
152
+ // Push a clip with larger coverage than the previous state.
153
+ result = recorder.ApplyClipState (
154
+ Contents::ClipCoverage{
155
+ .type = Contents::ClipCoverage::Type::kAppend ,
156
+ .coverage = Rect::MakeLTRB (0 , 0 , 100 , 100 ),
157
+ },
158
+ entity, 0 , Point (0 , 0 ));
159
+
160
+ EXPECT_FALSE (result.should_render );
161
+ EXPECT_FALSE (result.clip_did_change );
162
+ }
163
+
164
+ TEST (EntityPassClipStackTest, AppendDecreasingSizeClipCoverage) {
165
+ EntityPassClipStack recorder =
166
+ EntityPassClipStack (Rect::MakeLTRB (0 , 0 , 100 , 100 ));
167
+
168
+ ASSERT_EQ (recorder.GetClipCoverageLayers ().size (), 1u );
169
+
170
+ // Push Clips that shrink in size. All should be applied.
171
+ Entity entity;
172
+
173
+ for (auto i = 1 ; i < 20 ; i++) {
174
+ EntityPassClipStack::ClipStateResult result = recorder.ApplyClipState (
175
+ Contents::ClipCoverage{
176
+ .type = Contents::ClipCoverage::Type::kAppend ,
177
+ .coverage = Rect::MakeLTRB (i, i, 100 - i, 100 - i),
178
+ },
179
+ entity, 0 , Point (0 , 0 ));
180
+ EXPECT_TRUE (result.should_render );
181
+ EXPECT_TRUE (result.clip_did_change );
182
+ EXPECT_EQ (recorder.CurrentClipCoverage (),
183
+ Rect::MakeLTRB (i, i, 100 - i, 100 - i));
184
+ }
185
+ }
186
+
187
+ TEST (EntityPassClipStackTest, AppendIncreasingSizeClipCoverage) {
188
+ EntityPassClipStack recorder =
189
+ EntityPassClipStack (Rect::MakeLTRB (0 , 0 , 100 , 100 ));
190
+
191
+ ASSERT_EQ (recorder.GetClipCoverageLayers ().size (), 1u );
192
+
193
+ // Push Clips that grow in size. All should be skipped.
194
+ Entity entity;
195
+
196
+ for (auto i = 1 ; i < 20 ; i++) {
197
+ EntityPassClipStack::ClipStateResult result = recorder.ApplyClipState (
198
+ Contents::ClipCoverage{
199
+ .type = Contents::ClipCoverage::Type::kAppend ,
200
+ .coverage = Rect::MakeLTRB (0 - i, 0 - i, 100 + i, 100 + i),
201
+ },
202
+ entity, 0 , Point (0 , 0 ));
203
+ EXPECT_FALSE (result.should_render );
204
+ EXPECT_FALSE (result.clip_did_change );
205
+ EXPECT_EQ (recorder.CurrentClipCoverage (), Rect::MakeLTRB (0 , 0 , 100 , 100 ));
206
+ }
207
+ }
208
+
133
209
TEST (EntityPassClipStackTest, UnbalancedRestore) {
134
210
EntityPassClipStack recorder =
135
211
EntityPassClipStack (Rect::MakeLTRB (0 , 0 , 100 , 100 ));
0 commit comments