@@ -224,6 +224,62 @@ TEST(SaveLayerUtilsTest,
224
224
ASSERT_FALSE (coverage.has_value ());
225
225
}
226
226
227
+ TEST (
228
+ SaveLayerUtilsTest,
229
+ CoverageLimitIgnoredIfIntersectedValueIsCloseToActualCoverageSmallerWithImageFilter) {
230
+ // Create an image filter that slightly shrinks the coverage limit
231
+ auto image_filter = FilterContents::MakeMatrixFilter (
232
+ FilterInput::Make (Rect ()), Matrix::MakeScale ({1.1 , 1.1 , 1 }), {});
233
+
234
+ auto coverage = ComputeSaveLayerCoverage (
235
+ /* content_coverage=*/ Rect::MakeLTRB (0 , 0 , 100 , 100 ), //
236
+ /* effect_transform=*/ {}, //
237
+ /* coverage_limit=*/ Rect::MakeLTRB (0 , 0 , 100 , 100 ), //
238
+ /* image_filter=*/ image_filter //
239
+ );
240
+
241
+ ASSERT_TRUE (coverage.has_value ());
242
+ // The transfomed coverage limit is ((0, 0), (90.9091, 90.9091)).
243
+ EXPECT_EQ (coverage.value (), Rect::MakeLTRB (0 , 0 , 100 , 100 ));
244
+ }
245
+
246
+ TEST (
247
+ SaveLayerUtilsTest,
248
+ CoverageLimitIgnoredIfIntersectedValueIsCloseToActualCoverageLargerWithImageFilter) {
249
+ // Create an image filter that slightly stretches the coverage limit. Even
250
+ // without the special logic for using the original content coverage, we
251
+ // verify that we don't introduce any artifacts from the intersection.
252
+ auto image_filter = FilterContents::MakeMatrixFilter (
253
+ FilterInput::Make (Rect ()), Matrix::MakeScale ({0.9 , 0.9 , 1 }), {});
254
+
255
+ auto coverage = ComputeSaveLayerCoverage (
256
+ /* content_coverage=*/ Rect::MakeLTRB (0 , 0 , 100 , 100 ), //
257
+ /* effect_transform=*/ {}, //
258
+ /* coverage_limit=*/ Rect::MakeLTRB (0 , 0 , 100 , 100 ), //
259
+ /* image_filter=*/ image_filter //
260
+ );
261
+
262
+ ASSERT_TRUE (coverage.has_value ());
263
+ // The transfomed coverage limit is ((0, 0), (111.111, 111.111)).
264
+ EXPECT_EQ (coverage.value (), Rect::MakeLTRB (0 , 0 , 100 , 100 ));
265
+ }
266
+
267
+ TEST (SaveLayerUtilsTest,
268
+ CoverageLimitRespectedIfSubstantiallyDifferentFromContentCoverge) {
269
+ auto image_filter = FilterContents::MakeMatrixFilter (
270
+ FilterInput::Make (Rect ()), Matrix::MakeScale ({2 , 2 , 1 }), {});
271
+
272
+ auto coverage = ComputeSaveLayerCoverage (
273
+ /* content_coverage=*/ Rect::MakeLTRB (0 , 0 , 1000 , 1000 ), //
274
+ /* effect_transform=*/ {}, //
275
+ /* coverage_limit=*/ Rect::MakeLTRB (0 , 0 , 100 , 100 ), //
276
+ /* image_filter=*/ image_filter //
277
+ );
278
+
279
+ ASSERT_TRUE (coverage.has_value ());
280
+ EXPECT_EQ (coverage.value (), Rect::MakeLTRB (0 , 0 , 50 , 50 ));
281
+ }
282
+
227
283
} // namespace testing
228
284
} // namespace impeller
229
285
0 commit comments