| Index: tests/ImageFilterTest.cpp
|
| diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp
|
| index 4db9196db9bb220f2d0fb5c7e41b965b7d401876..7aefd484816b51e80d9f6a739126cefaa88bf5db 100644
|
| --- a/tests/ImageFilterTest.cpp
|
| +++ b/tests/ImageFilterTest.cpp
|
| @@ -1706,3 +1706,31 @@ DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(ImageFilterBlurLargeImage_Gpu, reporter, ctxInfo
|
| test_large_blur_input(reporter, surface->getCanvas());
|
| }
|
| #endif
|
| +
|
| +/*
|
| + * Test that colorfilterimagefilter does not require its CTM to be decomposed when it has more
|
| + * than just scale/translate, but that other filters do.
|
| + */
|
| +DEF_TEST(ImageFilterDecomposeCTM, reporter) {
|
| + // just need a colorfilter to exercise the corresponding imagefilter
|
| + sk_sp<SkColorFilter> cf = SkColorFilter::MakeModeFilter(SK_ColorRED, SkXfermode::kSrcATop_Mode);
|
| + sk_sp<SkImageFilter> cfif = SkColorFilterImageFilter::Make(cf, nullptr);
|
| + sk_sp<SkImageFilter> blif = SkBlurImageFilter::Make(3, 3, nullptr);
|
| +
|
| + struct {
|
| + sk_sp<SkImageFilter> fFilter;
|
| + bool fExpectCanHandle;
|
| + } recs[] = {
|
| + { cfif, true },
|
| + { SkColorFilterImageFilter::Make(cf, cfif), true },
|
| + { SkMergeImageFilter::Make(cfif, cfif), true },
|
| + { blif, false },
|
| + { SkMergeImageFilter::Make(cfif, blif), false },
|
| + { SkColorFilterImageFilter::Make(cf, blif), false },
|
| + };
|
| +
|
| + for (const auto& rec : recs) {
|
| + const bool canHandle = rec.fFilter->canHandleAffine();
|
| + REPORTER_ASSERT(reporter, canHandle == rec.fExpectCanHandle);
|
| + }
|
| +}
|
|
|