diff options
author | robertphillips <robertphillips@google.com> | 2016-04-04 04:31:25 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-04-04 04:31:25 -0700 |
commit | 6e7025ab13dfc4f0037233e67b4b8e18d6dfd1e1 (patch) | |
tree | ad46002c401ef4bd42ac963a1f8eed09beeb90b3 /tests | |
parent | 60c9b58b3214b0154c931656e91e39b230e987d8 (diff) |
Update SkBlurImageFilter to sk_sp
TBR=reed@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1852743002
Review URL: https://codereview.chromium.org/1852743002
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ImageFilterTest.cpp | 207 | ||||
-rw-r--r-- | tests/RecordOptsTest.cpp | 6 |
2 files changed, 122 insertions, 91 deletions
diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp index 3f60286e39..f873fa0822 100644 --- a/tests/ImageFilterTest.cpp +++ b/tests/ImageFilterTest.cpp @@ -106,7 +106,6 @@ SkBitmap make_gradient_circle(int width, int height) { class FilterList { public: FilterList(SkImageFilter* input = nullptr, const SkImageFilter::CropRect* cropRect = nullptr) { - auto cf(SkColorFilter::MakeModeFilter(SK_ColorRED, SkXfermode::kSrcIn_Mode)); SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1); SkScalar kernel[9] = { SkIntToScalar( 1), SkIntToScalar( 1), SkIntToScalar( 1), @@ -117,46 +116,33 @@ public: const SkScalar gain = SK_Scalar1, bias = 0; const SkScalar five = SkIntToScalar(5); - sk_sp<SkImage> gradientImage(SkImage::MakeFromBitmap(make_gradient_circle(64, 64))); - sk_sp<SkImageFilter> gradientSource(SkImageSource::Make(std::move(gradientImage))); - sk_sp<SkImageFilter> blur(SkBlurImageFilter::Create(five, five, input)); SkMatrix matrix; matrix.setTranslate(SK_Scalar1, SK_Scalar1); matrix.postRotate(SkIntToScalar(45), SK_Scalar1, SK_Scalar1); - SkRTreeFactory factory; - SkPictureRecorder recorder; - SkCanvas* recordingCanvas = recorder.beginRecording(64, 64, &factory, 0); + { + sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(SK_ColorRED, + SkXfermode::kSrcIn_Mode)); - SkPaint greenPaint; - greenPaint.setColor(SK_ColorGREEN); - recordingCanvas->drawRect(SkRect::Make(SkIRect::MakeXYWH(10, 10, 30, 20)), greenPaint); - sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture()); - sk_sp<SkImageFilter> pictureFilter(SkPictureImageFilter::Make(picture)); - sk_sp<SkShader> shader(SkPerlinNoiseShader::MakeTurbulence(SK_Scalar1, SK_Scalar1, 1, 0)); + this->addFilter("color filter", + SkColorFilterImageFilter::Create(cf.get(), input, cropRect)); + } - SkPaint paint; - paint.setShader(shader); - sk_sp<SkImageFilter> paintFilter(SkPaintImageFilter::Make(paint)); - - sk_sp<SkShader> greenColorShader(SkShader::MakeColorShader(SK_ColorGREEN)); - SkPaint greenColorShaderPaint; - greenColorShaderPaint.setShader(greenColorShader); - SkImageFilter::CropRect leftSideCropRect(SkRect::MakeXYWH(0, 0, 32, 64)); - sk_sp<SkImageFilter> paintFilterLeft(SkPaintImageFilter::Make(greenColorShaderPaint, - &leftSideCropRect)); - SkImageFilter::CropRect rightSideCropRect(SkRect::MakeXYWH(32, 0, 32, 64)); - sk_sp<SkImageFilter> paintFilterRight(SkPaintImageFilter::Make(greenColorShaderPaint, - &rightSideCropRect)); - - this->addFilter("color filter", - SkColorFilterImageFilter::Create(cf.get(), input, cropRect)); - this->addFilter("displacement map", SkDisplacementMapEffect::Create( - SkDisplacementMapEffect::kR_ChannelSelectorType, - SkDisplacementMapEffect::kB_ChannelSelectorType, - 20.0f, gradientSource.get(), input, cropRect)); - this->addFilter("blur", SkBlurImageFilter::Create(SK_Scalar1, SK_Scalar1, input, cropRect)); + { + sk_sp<SkImage> gradientImage(SkImage::MakeFromBitmap(make_gradient_circle(64, 64))); + sk_sp<SkImageFilter> gradientSource(SkImageSource::Make(std::move(gradientImage))); + + this->addFilter("displacement map", SkDisplacementMapEffect::Create( + SkDisplacementMapEffect::kR_ChannelSelectorType, + SkDisplacementMapEffect::kB_ChannelSelectorType, + 20.0f, gradientSource.get(), input, cropRect)); + } + + this->addFilter("blur", SkBlurImageFilter::Make(SK_Scalar1, + SK_Scalar1, + sk_ref_sp<SkImageFilter>(input), + cropRect).release()); this->addFilter("drop shadow", SkDropShadowImageFilter::Create( SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_ColorGREEN, SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, input, cropRect)); @@ -173,9 +159,23 @@ public: sk_ref_sp<SkImageFilter>(input), SkXfermode::kSrcOver_Mode, cropRect).release()); - this->addFilter("merge with disjoint inputs", SkMergeImageFilter::Make( + { + SkPaint greenColorShaderPaint; + greenColorShaderPaint.setShader(SkShader::MakeColorShader(SK_ColorGREEN)); + + SkImageFilter::CropRect leftSideCropRect(SkRect::MakeXYWH(0, 0, 32, 64)); + sk_sp<SkImageFilter> paintFilterLeft(SkPaintImageFilter::Make(greenColorShaderPaint, + &leftSideCropRect)); + SkImageFilter::CropRect rightSideCropRect(SkRect::MakeXYWH(32, 0, 32, 64)); + sk_sp<SkImageFilter> paintFilterRight(SkPaintImageFilter::Make(greenColorShaderPaint, + &rightSideCropRect)); + + + this->addFilter("merge with disjoint inputs", SkMergeImageFilter::Make( std::move(paintFilterLeft), std::move(paintFilterRight), SkXfermode::kSrcOver_Mode, cropRect).release()); + } + this->addFilter("offset", SkOffsetImageFilter::Make(SK_Scalar1, SK_Scalar1, sk_ref_sp<SkImageFilter>(input), @@ -190,13 +190,39 @@ public: this->addFilter("matrix", SkImageFilter::CreateMatrixFilter( matrix, kLow_SkFilterQuality, input)); } - this->addFilter("blur and offset", - SkOffsetImageFilter::Make(five, five, blur, - cropRect).release()); - this->addFilter("picture and blur", SkBlurImageFilter::Create( - five, five, pictureFilter.get(), cropRect)); - this->addFilter("paint and blur", SkBlurImageFilter::Create( - five, five, paintFilter.get(), cropRect)); + + { + sk_sp<SkImageFilter> blur(SkBlurImageFilter::Make(five, five, + sk_ref_sp<SkImageFilter>(input))); + + this->addFilter("blur and offset", SkOffsetImageFilter::Make(five, five, + std::move(blur), + cropRect).release()); + } + { + SkRTreeFactory factory; + SkPictureRecorder recorder; + SkCanvas* recordingCanvas = recorder.beginRecording(64, 64, &factory, 0); + + SkPaint greenPaint; + greenPaint.setColor(SK_ColorGREEN); + recordingCanvas->drawRect(SkRect::Make(SkIRect::MakeXYWH(10, 10, 30, 20)), greenPaint); + sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture()); + sk_sp<SkImageFilter> pictureFilter(SkPictureImageFilter::Make(std::move(picture))); + + this->addFilter("picture and blur", SkBlurImageFilter::Make(five, five, + std::move(pictureFilter), + cropRect).release()); + } + { + SkPaint paint; + paint.setShader(SkPerlinNoiseShader::MakeTurbulence(SK_Scalar1, SK_Scalar1, 1, 0)); + sk_sp<SkImageFilter> paintFilter(SkPaintImageFilter::Make(paint)); + + this->addFilter("paint and blur", SkBlurImageFilter::Make(five, five, + std::move(paintFilter), + cropRect).release()); + } this->addFilter("xfermode", SkXfermodeImageFilter::Make( SkXfermode::Make(SkXfermode::kSrc_Mode), input, input, cropRect).release()); } @@ -477,8 +503,8 @@ static void test_negative_blur_sigma(SkImageFilter::Proxy* proxy, const int width = 32, height = 32; const SkScalar five = SkIntToScalar(5); - SkAutoTUnref<SkImageFilter> positiveFilter(SkBlurImageFilter::Create(five, five)); - SkAutoTUnref<SkImageFilter> negativeFilter(SkBlurImageFilter::Create(-five, five)); + sk_sp<SkImageFilter> positiveFilter(SkBlurImageFilter::Make(five, five, nullptr)); + sk_sp<SkImageFilter> negativeFilter(SkBlurImageFilter::Make(-five, five, nullptr)); SkBitmap gradient = make_gradient_circle(width, height); sk_sp<SkSpecialImage> imgSrc(SkSpecialImage::MakeFromRaster(proxy, @@ -599,7 +625,7 @@ static void test_zero_blur_sigma(SkImageFilter::Proxy* proxy, // Check that SkBlurImageFilter with a zero sigma and a non-zero srcOffset works correctly. SkImageFilter::CropRect cropRect(SkRect::Make(SkIRect::MakeXYWH(5, 0, 5, 10))); sk_sp<SkImageFilter> input(SkOffsetImageFilter::Make(0, 0, nullptr, &cropRect)); - sk_sp<SkImageFilter> filter(SkBlurImageFilter::Create(0, 0, input.get(), &cropRect)); + sk_sp<SkImageFilter> filter(SkBlurImageFilter::Make(0, 0, std::move(input), &cropRect)); sk_sp<SkSpecialSurface> surf(create_empty_special_surface(context, proxy, 10)); surf->getCanvas()->clear(SK_ColorGREEN); @@ -742,21 +768,21 @@ DEF_TEST(ImageFilterDrawMatrixBBH, reporter) { } } -static SkImageFilter* makeBlur(SkImageFilter* input = nullptr) { - return SkBlurImageFilter::Create(SK_Scalar1, SK_Scalar1, input); +static sk_sp<SkImageFilter> make_blur(sk_sp<SkImageFilter> input) { + return SkBlurImageFilter::Make(SK_Scalar1, SK_Scalar1, std::move(input)); } -static SkImageFilter* makeDropShadow(SkImageFilter* input = nullptr) { - return SkDropShadowImageFilter::Create( +static sk_sp<SkImageFilter> make_drop_shadow(sk_sp<SkImageFilter> input) { + return sk_sp<SkImageFilter>(SkDropShadowImageFilter::Create( SkIntToScalar(100), SkIntToScalar(100), SkIntToScalar(10), SkIntToScalar(10), SK_ColorBLUE, SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, - input, nullptr); + input.get(), nullptr)); } DEF_TEST(ImageFilterBlurThenShadowBounds, reporter) { - SkAutoTUnref<SkImageFilter> filter1(makeBlur()); - SkAutoTUnref<SkImageFilter> filter2(makeDropShadow(filter1.get())); + sk_sp<SkImageFilter> filter1(make_blur(nullptr)); + sk_sp<SkImageFilter> filter2(make_drop_shadow(std::move(filter1))); SkIRect bounds = SkIRect::MakeXYWH(0, 0, 100, 100); SkIRect expectedBounds = SkIRect::MakeXYWH(-133, -133, 236, 236); @@ -766,8 +792,8 @@ DEF_TEST(ImageFilterBlurThenShadowBounds, reporter) { } DEF_TEST(ImageFilterShadowThenBlurBounds, reporter) { - SkAutoTUnref<SkImageFilter> filter1(makeDropShadow()); - SkAutoTUnref<SkImageFilter> filter2(makeBlur(filter1.get())); + sk_sp<SkImageFilter> filter1(make_drop_shadow(nullptr)); + sk_sp<SkImageFilter> filter2(make_blur(std::move(filter1))); SkIRect bounds = SkIRect::MakeXYWH(0, 0, 100, 100); SkIRect expectedBounds = SkIRect::MakeXYWH(-133, -133, 236, 236); @@ -777,8 +803,8 @@ DEF_TEST(ImageFilterShadowThenBlurBounds, reporter) { } DEF_TEST(ImageFilterDilateThenBlurBounds, reporter) { - SkAutoTUnref<SkImageFilter> filter1(SkDilateImageFilter::Create(2, 2)); - SkAutoTUnref<SkImageFilter> filter2(makeDropShadow(filter1.get())); + sk_sp<SkImageFilter> filter1(SkDilateImageFilter::Create(2, 2)); + sk_sp<SkImageFilter> filter2(make_drop_shadow(std::move(filter1))); SkIRect bounds = SkIRect::MakeXYWH(0, 0, 100, 100); SkIRect expectedBounds = SkIRect::MakeXYWH(-132, -132, 234, 234); @@ -788,8 +814,8 @@ DEF_TEST(ImageFilterDilateThenBlurBounds, reporter) { } DEF_TEST(ImageFilterComposedBlurFastBounds, reporter) { - sk_sp<SkImageFilter> filter1(makeBlur()); - sk_sp<SkImageFilter> filter2(makeBlur()); + sk_sp<SkImageFilter> filter1(make_blur(nullptr)); + sk_sp<SkImageFilter> filter2(make_blur(nullptr)); sk_sp<SkImageFilter> composedFilter(SkComposeImageFilter::Make(std::move(filter1), std::move(filter2))); @@ -854,10 +880,9 @@ DEF_GPUTEST_FOR_NATIVE_CONTEXT(ImageFilterMergeResultSize_Gpu, reporter, context #endif static void draw_blurred_rect(SkCanvas* canvas) { - SkAutoTUnref<SkImageFilter> filter(SkBlurImageFilter::Create(SkIntToScalar(8), 0)); SkPaint filterPaint; filterPaint.setColor(SK_ColorWHITE); - filterPaint.setImageFilter(filter); + filterPaint.setImageFilter(SkBlurImageFilter::Make(SkIntToScalar(8), 0, nullptr)); canvas->saveLayer(nullptr, &filterPaint); SkPaint whitePaint; whitePaint.setColor(SK_ColorWHITE); @@ -1172,10 +1197,10 @@ static void test_huge_blur(SkCanvas* canvas, skiatest::Reporter* reporter) { bitmap.eraseARGB(0, 0, 0, 0); // Check that a blur with an insane radius does not crash or assert. - SkAutoTUnref<SkImageFilter> blur(SkBlurImageFilter::Create(SkIntToScalar(1<<30), SkIntToScalar(1<<30))); - SkPaint paint; - paint.setImageFilter(blur); + paint.setImageFilter(SkBlurImageFilter::Make(SkIntToScalar(1<<30), + SkIntToScalar(1<<30), + nullptr)); canvas->drawBitmap(bitmap, 0, 0, &paint); } @@ -1344,8 +1369,8 @@ static void test_composed_imagefilter_offset(SkImageFilter::Proxy* proxy, SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(1, 0, 20, 20)); sk_sp<SkImageFilter> offsetFilter(SkOffsetImageFilter::Make(0, 0, nullptr, &cropRect)); - sk_sp<SkImageFilter> blurFilter(SkBlurImageFilter::Create(SK_Scalar1, SK_Scalar1, - nullptr, &cropRect)); + sk_sp<SkImageFilter> blurFilter(SkBlurImageFilter::Make(SK_Scalar1, SK_Scalar1, + nullptr, &cropRect)); sk_sp<SkImageFilter> composedFilter(SkComposeImageFilter::Make(std::move(blurFilter), std::move(offsetFilter))); SkIPoint offset; @@ -1447,31 +1472,37 @@ DEF_TEST(ImageFilterCanComputeFastBounds, reporter) { location, SK_ColorGREEN, 0, 0)); REPORTER_ASSERT(reporter, !lighting->canComputeFastBounds()); - SkAutoTUnref<SkImageFilter> gray(make_grayscale(nullptr, nullptr)); - REPORTER_ASSERT(reporter, gray->canComputeFastBounds()); { - SkColorFilter* grayCF; - REPORTER_ASSERT(reporter, gray->asAColorFilter(&grayCF)); - REPORTER_ASSERT(reporter, !grayCF->affectsTransparentBlack()); - grayCF->unref(); - } - REPORTER_ASSERT(reporter, gray->canComputeFastBounds()); - - SkAutoTUnref<SkImageFilter> grayBlur(SkBlurImageFilter::Create(SK_Scalar1, SK_Scalar1, gray.get())); - REPORTER_ASSERT(reporter, grayBlur->canComputeFastBounds()); - - SkScalar greenMatrix[20] = { 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1 }; - auto greenCF(SkColorFilter::MakeMatrixFilterRowMajor255(greenMatrix)); - SkAutoTUnref<SkImageFilter> green(SkColorFilterImageFilter::Create(greenCF.get())); + sk_sp<SkImageFilter> gray(make_grayscale(nullptr, nullptr)); + REPORTER_ASSERT(reporter, gray->canComputeFastBounds()); + { + SkColorFilter* grayCF; + REPORTER_ASSERT(reporter, gray->asAColorFilter(&grayCF)); + REPORTER_ASSERT(reporter, !grayCF->affectsTransparentBlack()); + grayCF->unref(); + } + REPORTER_ASSERT(reporter, gray->canComputeFastBounds()); - REPORTER_ASSERT(reporter, greenCF->affectsTransparentBlack()); - REPORTER_ASSERT(reporter, !green->canComputeFastBounds()); + sk_sp<SkImageFilter> grayBlur(SkBlurImageFilter::Make(SK_Scalar1, SK_Scalar1, + std::move(gray))); + REPORTER_ASSERT(reporter, grayBlur->canComputeFastBounds()); + } - SkAutoTUnref<SkImageFilter> greenBlur(SkBlurImageFilter::Create(SK_Scalar1, SK_Scalar1, green.get())); - REPORTER_ASSERT(reporter, !greenBlur->canComputeFastBounds()); + { + SkScalar greenMatrix[20] = { 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1 }; + sk_sp<SkColorFilter> greenCF(SkColorFilter::MakeMatrixFilterRowMajor255(greenMatrix)); + sk_sp<SkImageFilter> green(SkColorFilterImageFilter::Create(greenCF.get())); + + REPORTER_ASSERT(reporter, greenCF->affectsTransparentBlack()); + REPORTER_ASSERT(reporter, !green->canComputeFastBounds()); + + sk_sp<SkImageFilter> greenBlur(SkBlurImageFilter::Make(SK_Scalar1, SK_Scalar1, + std::move(green))); + REPORTER_ASSERT(reporter, !greenBlur->canComputeFastBounds()); + } uint8_t allOne[256], identity[256]; for (int i = 0; i < 256; ++i) { @@ -1545,7 +1576,7 @@ static void test_large_blur_input(skiatest::Reporter* reporter, SkCanvas* canvas return; } - sk_sp<SkImageFilter> blur(SkBlurImageFilter::Create(10.f, 10.f, largeSource.get())); + sk_sp<SkImageFilter> blur(SkBlurImageFilter::Make(10.f, 10.f, std::move(largeSource))); if (!blur) { ERRORF(reporter, "Failed to create SkBlurImageFilter."); return; diff --git a/tests/RecordOptsTest.cpp b/tests/RecordOptsTest.cpp index 242712da3b..4341b870bf 100644 --- a/tests/RecordOptsTest.cpp +++ b/tests/RecordOptsTest.cpp @@ -188,8 +188,8 @@ DEF_TEST(RecordOpts_NoopSaveLayerDrawRestore, r) { REPORTER_ASSERT(r, drawRect->paint.getColor() == 0x03020202); // saveLayer w/ backdrop should NOT go away - SkAutoTUnref<SkImageFilter> filter(SkBlurImageFilter::Create(3, 3)); - recorder.saveLayer({ nullptr, nullptr, filter, 0}); + sk_sp<SkImageFilter> filter(SkBlurImageFilter::Make(3, 3, nullptr)); + recorder.saveLayer({ nullptr, nullptr, filter.get(), 0}); recorder.drawRect(draw, opaqueDrawPaint); recorder.restore(); assert_savelayer_draw_restore(r, &record, 18, false); @@ -244,7 +244,7 @@ DEF_TEST(RecordOpts_MergeSvgOpacityAndFilterLayers, r) { int index = 0; { - SkAutoTUnref<SkImageFilter> filter(SkBlurImageFilter::Create(3, 3)); + sk_sp<SkImageFilter> filter(SkBlurImageFilter::Make(3, 3, nullptr)); // first (null) should be optimized, 2nd should not SkImageFilter* filters[] = { nullptr, filter.get() }; |