aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--bench/ImageFilterDAGBench.cpp16
-rw-r--r--bench/MergeBench.cpp84
-rw-r--r--gm/imagefiltersbase.cpp2
-rw-r--r--gm/imagefilterscropped.cpp5
-rw-r--r--gm/imagefiltersgraph.cpp17
-rw-r--r--gm/testimagefilters.cpp6
-rw-r--r--include/core/SkImageFilter.h9
-rw-r--r--include/effects/SkMergeImageFilter.h41
-rw-r--r--samplecode/SampleFilterFuzz.cpp11
-rw-r--r--src/core/SkImageFilter.cpp16
-rw-r--r--src/core/SkLocalMatrixImageFilter.cpp3
-rw-r--r--src/core/SkMatrixImageFilter.cpp2
-rw-r--r--src/effects/SkAlphaThresholdFilter.cpp2
-rw-r--r--src/effects/SkBlurImageFilter.cpp2
-rw-r--r--src/effects/SkColorFilterImageFilter.cpp2
-rw-r--r--src/effects/SkComposeImageFilter.cpp3
-rw-r--r--src/effects/SkDisplacementMapEffect.cpp3
-rw-r--r--src/effects/SkDropShadowImageFilter.cpp2
-rw-r--r--src/effects/SkLightingImageFilter.cpp4
-rw-r--r--src/effects/SkMagnifierImageFilter.cpp2
-rw-r--r--src/effects/SkMatrixConvolutionImageFilter.cpp2
-rwxr-xr-xsrc/effects/SkMergeImageFilter.cpp8
-rw-r--r--src/effects/SkMorphologyImageFilter.cpp4
-rw-r--r--src/effects/SkOffsetImageFilter.cpp2
-rwxr-xr-xsrc/effects/SkTestImageFilters.cpp2
-rw-r--r--src/effects/SkTileImageFilter.cpp2
-rw-r--r--src/effects/SkXfermodeImageFilter.cpp4
-rw-r--r--tests/ImageFilterTest.cpp16
28 files changed, 141 insertions, 131 deletions
diff --git a/bench/ImageFilterDAGBench.cpp b/bench/ImageFilterDAGBench.cpp
index d66d287e18..5fdf95b06d 100644
--- a/bench/ImageFilterDAGBench.cpp
+++ b/bench/ImageFilterDAGBench.cpp
@@ -11,12 +11,10 @@
#include "SkCanvas.h"
#include "SkMergeImageFilter.h"
-enum { kNumInputs = 5 };
// Exercise a blur filter connected to 5 inputs of the same merge filter.
// This bench shows an improvement in performance once cacheing of re-used
// nodes is implemented, since the DAG is no longer flattened to a tree.
-
class ImageFilterDAGBench : public Benchmark {
public:
ImageFilterDAGBench() {}
@@ -27,21 +25,23 @@ protected:
}
void onDraw(int loops, SkCanvas* canvas) override {
+ const SkRect rect = SkRect::Make(SkIRect::MakeWH(400, 400));
+
for (int j = 0; j < loops; j++) {
- SkAutoTUnref<SkImageFilter> blur(SkBlurImageFilter::Create(20.0f, 20.0f));
- SkImageFilter* inputs[kNumInputs];
+ sk_sp<SkImageFilter> blur(SkBlurImageFilter::Create(20.0f, 20.0f));
+ sk_sp<SkImageFilter> inputs[kNumInputs];
for (int i = 0; i < kNumInputs; ++i) {
- inputs[i] = blur.get();
+ inputs[i] = blur;
}
- SkAutoTUnref<SkImageFilter> merge(SkMergeImageFilter::Create(inputs, kNumInputs));
SkPaint paint;
- paint.setImageFilter(merge);
- SkRect rect = SkRect::Make(SkIRect::MakeWH(400, 400));
+ paint.setImageFilter(SkMergeImageFilter::Make(inputs, kNumInputs));
canvas->drawRect(rect, paint);
}
}
private:
+ static const int kNumInputs = 5;
+
typedef Benchmark INHERITED;
};
diff --git a/bench/MergeBench.cpp b/bench/MergeBench.cpp
index e1f7d97b5e..061a4d36f3 100644
--- a/bench/MergeBench.cpp
+++ b/bench/MergeBench.cpp
@@ -16,6 +16,41 @@
#define FILTER_WIDTH_LARGE SkIntToScalar(256)
#define FILTER_HEIGHT_LARGE SkIntToScalar(256)
+static sk_sp<SkImage> make_bitmap() {
+ sk_sp<SkSurface> surface(SkSurface::MakeRasterN32Premul(80, 80));
+ surface->getCanvas()->clear(0x00000000);
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ paint.setColor(0xFF884422);
+ paint.setTextSize(SkIntToScalar(96));
+ const char* str = "g";
+ surface->getCanvas()->drawText(str, strlen(str), 15, 55, paint);
+ return surface->makeImageSnapshot();
+}
+
+static sk_sp<SkImage> make_checkerboard() {
+ sk_sp<SkSurface> surface(SkSurface::MakeRasterN32Premul(80, 80));
+ SkCanvas* canvas = surface->getCanvas();
+ canvas->clear(0x00000000);
+ SkPaint darkPaint;
+ darkPaint.setColor(0xFF804020);
+ SkPaint lightPaint;
+ lightPaint.setColor(0xFF244484);
+ for (int y = 0; y < 80; y += 16) {
+ for (int x = 0; x < 80; x += 16) {
+ canvas->save();
+ canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
+ canvas->drawRect(SkRect::MakeXYWH(0, 0, 8, 8), darkPaint);
+ canvas->drawRect(SkRect::MakeXYWH(8, 0, 8, 8), lightPaint);
+ canvas->drawRect(SkRect::MakeXYWH(0, 8, 8, 8), lightPaint);
+ canvas->drawRect(SkRect::MakeXYWH(8, 8, 8, 8), darkPaint);
+ canvas->restore();
+ }
+ }
+
+ return surface->makeImageSnapshot();
+}
+
class MergeBench : public Benchmark {
public:
MergeBench(bool small) : fIsSmall(small), fInitialized(false) { }
@@ -27,8 +62,8 @@ protected:
void onDelayedSetup() override {
if (!fInitialized) {
- make_bitmap();
- make_checkerboard();
+ fImage = make_bitmap();
+ fCheckerboard = make_checkerboard();
fInitialized = true;
}
}
@@ -37,52 +72,17 @@ protected:
SkRect r = fIsSmall ? SkRect::MakeWH(FILTER_WIDTH_SMALL, FILTER_HEIGHT_SMALL) :
SkRect::MakeWH(FILTER_WIDTH_LARGE, FILTER_HEIGHT_LARGE);
SkPaint paint;
- paint.setImageFilter(mergeBitmaps())->unref();
+ paint.setImageFilter(this->mergeBitmaps());
for (int i = 0; i < loops; i++) {
canvas->drawRect(r, paint);
}
}
private:
- SkImageFilter* mergeBitmaps() {
- SkAutoTUnref<SkImageFilter> first(SkImageSource::Create(fCheckerboard.get()));
- SkAutoTUnref<SkImageFilter> second(SkImageSource::Create(fImage.get()));
- return SkMergeImageFilter::Create(first, second);
- }
-
- void make_bitmap() {
- auto surface(SkSurface::MakeRasterN32Premul(80, 80));
- surface->getCanvas()->clear(0x00000000);
- SkPaint paint;
- paint.setAntiAlias(true);
- paint.setColor(0xFF884422);
- paint.setTextSize(SkIntToScalar(96));
- const char* str = "g";
- surface->getCanvas()->drawText(str, strlen(str), 15, 55, paint);
- fImage = surface->makeImageSnapshot();
- }
-
- void make_checkerboard() {
- auto surface(SkSurface::MakeRasterN32Premul(80, 80));
- SkCanvas* canvas = surface->getCanvas();
- canvas->clear(0x00000000);
- SkPaint darkPaint;
- darkPaint.setColor(0xFF804020);
- SkPaint lightPaint;
- lightPaint.setColor(0xFF244484);
- for (int y = 0; y < 80; y += 16) {
- for (int x = 0; x < 80; x += 16) {
- canvas->save();
- canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
- canvas->drawRect(SkRect::MakeXYWH(0, 0, 8, 8), darkPaint);
- canvas->drawRect(SkRect::MakeXYWH(8, 0, 8, 8), lightPaint);
- canvas->drawRect(SkRect::MakeXYWH(0, 8, 8, 8), lightPaint);
- canvas->drawRect(SkRect::MakeXYWH(8, 8, 8, 8), darkPaint);
- canvas->restore();
- }
- }
-
- fCheckerboard = surface->makeImageSnapshot();
+ sk_sp<SkImageFilter> mergeBitmaps() {
+ sk_sp<SkImageFilter> first(SkImageSource::Create(fCheckerboard.get()));
+ sk_sp<SkImageFilter> second(SkImageSource::Create(fImage.get()));
+ return SkMergeImageFilter::Make(std::move(first), std::move(second));
}
bool fIsSmall;
diff --git a/gm/imagefiltersbase.cpp b/gm/imagefiltersbase.cpp
index d580243453..4a5f5e5977 100644
--- a/gm/imagefiltersbase.cpp
+++ b/gm/imagefiltersbase.cpp
@@ -91,7 +91,7 @@ static IdentityImageFilter::Registrar gReg1;
SkFlattenable* IdentityImageFilter::CreateProc(SkReadBuffer& buffer) {
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
- return IdentityImageFilter::Create(common.getInput(0));
+ return IdentityImageFilter::Create(common.getInput(0).get());
}
#ifndef SK_IGNORE_TO_STRING
diff --git a/gm/imagefilterscropped.cpp b/gm/imagefilterscropped.cpp
index b06761d80c..612990984a 100644
--- a/gm/imagefilterscropped.cpp
+++ b/gm/imagefilterscropped.cpp
@@ -122,7 +122,7 @@ protected:
SkAutoTUnref<SkImageFilter> offset(SkOffsetImageFilter::Create(
SkIntToScalar(-10), SkIntToScalar(-10)));
- SkAutoTUnref<SkImageFilter> cfOffset(SkColorFilterImageFilter::Create(cf.get(), offset.get()));
+ sk_sp<SkImageFilter> cfOffset(SkColorFilterImageFilter::Create(cf.get(), offset.get()));
SkAutoTUnref<SkImageFilter> erodeX(SkErodeImageFilter::Create(8, 0, nullptr, &cropRect));
SkAutoTUnref<SkImageFilter> erodeY(SkErodeImageFilter::Create(0, 8, nullptr, &cropRect));
@@ -139,7 +139,8 @@ protected:
SkErodeImageFilter::Create(8, 0, erodeY, &cropRect),
SkErodeImageFilter::Create(0, 8, erodeX, &cropRect),
SkErodeImageFilter::Create(8, 8, nullptr, &cropRect),
- SkMergeImageFilter::Create(nullptr, cfOffset.get(), SkXfermode::kSrcOver_Mode, &cropRect),
+ SkMergeImageFilter::Make(nullptr, std::move(cfOffset),
+ SkXfermode::kSrcOver_Mode, &cropRect).release(),
SkBlurImageFilter::Create(8.0f, 8.0f, nullptr, &bogusRect),
SkColorFilterImageFilter::Create(cf.get(), nullptr, &bogusRect),
};
diff --git a/gm/imagefiltersgraph.cpp b/gm/imagefiltersgraph.cpp
index 53343bc3d0..e7abdcfc0f 100644
--- a/gm/imagefiltersgraph.cpp
+++ b/gm/imagefiltersgraph.cpp
@@ -88,7 +88,7 @@ SkFlattenable* SimpleOffsetFilter::CreateProc(SkReadBuffer& buffer) {
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
SkScalar dx = buffer.readScalar();
SkScalar dy = buffer.readScalar();
- return Create(dx, dy, common.getInput(0));
+ return Create(dx, dy, common.getInput(0).get());
}
#ifndef SK_IGNORE_TO_STRING
@@ -118,15 +118,16 @@ protected:
void onDraw(SkCanvas* canvas) override {
canvas->clear(SK_ColorBLACK);
{
- SkAutoTUnref<SkImageFilter> bitmapSource(SkImageSource::Create(fImage.get()));
- auto cf(SkColorFilter::MakeModeFilter(SK_ColorRED, SkXfermode::kSrcIn_Mode));
- SkAutoTUnref<SkImageFilter> blur(SkBlurImageFilter::Create(4.0f, 4.0f, bitmapSource));
- SkAutoTUnref<SkImageFilter> erode(SkErodeImageFilter::Create(4, 4, blur));
- SkAutoTUnref<SkImageFilter> color(SkColorFilterImageFilter::Create(cf.get(), erode));
- SkAutoTUnref<SkImageFilter> merge(SkMergeImageFilter::Create(blur, color));
+ sk_sp<SkImageFilter> bitmapSource(SkImageSource::Create(fImage.get()));
+ sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(SK_ColorRED,
+ SkXfermode::kSrcIn_Mode));
+ sk_sp<SkImageFilter> blur(SkBlurImageFilter::Create(4.0f, 4.0f, bitmapSource.get()));
+ sk_sp<SkImageFilter> erode(SkErodeImageFilter::Create(4, 4, blur.get()));
+ sk_sp<SkImageFilter> color(SkColorFilterImageFilter::Create(cf.get(), erode.get()));
+ sk_sp<SkImageFilter> merge(SkMergeImageFilter::Make(blur, color));
SkPaint paint;
- paint.setImageFilter(merge);
+ paint.setImageFilter(std::move(merge));
canvas->drawPaint(paint);
canvas->translate(SkIntToScalar(100), 0);
}
diff --git a/gm/testimagefilters.cpp b/gm/testimagefilters.cpp
index 2380b3438e..c4bddbf4e8 100644
--- a/gm/testimagefilters.cpp
+++ b/gm/testimagefilters.cpp
@@ -47,7 +47,7 @@ static SkImageFilter* make4() {
static SkImageFilter* make5() {
sk_sp<SkImageFilter> first(SkOffsetImageFilter::Create(SkIntToScalar(16), SkIntToScalar(16)));
sk_sp<SkImageFilter> second(SkDownSampleImageFilter::Create(SK_Scalar1 / 5));
- return SkMergeImageFilter::Create(first.get(), second.get());
+ return SkMergeImageFilter::Make(std::move(first), std::move(second)).release();
}
static SkImageFilter* make6() {
@@ -58,7 +58,7 @@ static SkImageFilter* make6() {
sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(0x880000FF, SkXfermode::kSrcIn_Mode));
sk_sp<SkImageFilter> blue(SkColorFilterImageFilter::Create(cf.get()));
- return SkMergeImageFilter::Create(compose.get(), blue.get());
+ return SkMergeImageFilter::Make(std::move(compose), std::move(blue)).release();
}
static SkImageFilter* make7() {
@@ -69,7 +69,7 @@ static SkImageFilter* make7() {
sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(0x880000FF, SkXfermode::kSrcIn_Mode));
sk_sp<SkImageFilter> blue(SkColorFilterImageFilter::Create(cf.get()));
- return SkMergeImageFilter::Create(compose.get(), blue.get());
+ return SkMergeImageFilter::Make(std::move(compose), std::move(blue)).release();
}
static void draw0(SkCanvas* canvas) {
diff --git a/include/core/SkImageFilter.h b/include/core/SkImageFilter.h
index d39d97857a..d1b1483386 100644
--- a/include/core/SkImageFilter.h
+++ b/include/core/SkImageFilter.h
@@ -293,9 +293,6 @@ public:
protected:
class Common {
public:
- Common() {}
- ~Common();
-
/**
* Attempt to unflatten the cropRect and the expected number of input filters.
* If any number of input filters is valid, pass -1.
@@ -308,9 +305,9 @@ protected:
const CropRect& cropRect() const { return fCropRect; }
int inputCount() const { return fInputs.count(); }
- SkImageFilter** inputs() const { return fInputs.get(); }
+ sk_sp<SkImageFilter>* inputs() const { return fInputs.get(); }
- SkImageFilter* getInput(int index) const { return fInputs[index]; }
+ sk_sp<SkImageFilter> getInput(int index) const { return fInputs[index]; }
// If the caller wants a copy of the inputs, call this and it will transfer ownership
// of the unflattened input filters to the caller. This is just a short-cut for copying
@@ -321,7 +318,7 @@ protected:
private:
CropRect fCropRect;
// most filters accept at most 2 input-filters
- SkAutoSTArray<2, SkImageFilter*> fInputs;
+ SkAutoSTArray<2, sk_sp<SkImageFilter>> fInputs;
void allocInputs(int count);
};
diff --git a/include/effects/SkMergeImageFilter.h b/include/effects/SkMergeImageFilter.h
index 3bf649d97d..e85cc1f97f 100644
--- a/include/effects/SkMergeImageFilter.h
+++ b/include/effects/SkMergeImageFilter.h
@@ -16,30 +16,51 @@ class SK_API SkMergeImageFilter : public SkImageFilter {
public:
~SkMergeImageFilter() override;
- static SkImageFilter* Create(SkImageFilter* first, SkImageFilter* second,
- SkXfermode::Mode mode = SkXfermode::kSrcOver_Mode,
- const CropRect* cropRect = NULL) {
- SkImageFilter* inputs[2] = { first, second };
+ static sk_sp<SkImageFilter> Make(sk_sp<SkImageFilter> first, sk_sp<SkImageFilter> second,
+ SkXfermode::Mode mode = SkXfermode::kSrcOver_Mode,
+ const CropRect* cropRect = nullptr) {
+ sk_sp<SkImageFilter> inputs[2] = { first, second };
SkXfermode::Mode modes[2] = { mode, mode };
- return new SkMergeImageFilter(inputs, 2, modes, cropRect);
+ return sk_sp<SkImageFilter>(new SkMergeImageFilter(inputs, 2, modes, cropRect));
}
- static SkImageFilter* Create(SkImageFilter* filters[], int count,
- const SkXfermode::Mode modes[] = NULL,
- const CropRect* cropRect = NULL) {
- return new SkMergeImageFilter(filters, count, modes, cropRect);
+ static sk_sp<SkImageFilter> Make(sk_sp<SkImageFilter> filters[],
+ int count,
+ const SkXfermode::Mode modes[] = nullptr,
+ const CropRect* cropRect = nullptr) {
+ return sk_sp<SkImageFilter>(new SkMergeImageFilter(filters, count, modes, cropRect));
}
SK_TO_STRING_OVERRIDE()
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMergeImageFilter)
+#ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR
+ static SkImageFilter* Create(SkImageFilter* first, SkImageFilter* second,
+ SkXfermode::Mode mode = SkXfermode::kSrcOver_Mode,
+ const CropRect* cropRect = nullptr) {
+ return Make(sk_ref_sp<SkImageFilter>(first),
+ sk_ref_sp<SkImageFilter>(second),
+ mode, cropRect).release();
+ }
+
+ static SkImageFilter* Create(SkImageFilter* filters[], int count,
+ const SkXfermode::Mode modes[] = nullptr,
+ const CropRect* cropRect = nullptr) {
+ SkAutoTDeleteArray<sk_sp<SkImageFilter>> temp(new sk_sp<SkImageFilter>[count]);
+ for (int i = 0; i < count; ++i) {
+ temp[i] = sk_ref_sp<SkImageFilter>(filters[i]);
+ }
+ return Make(temp.get(), count, modes, cropRect).release();
+ }
+#endif
+
protected:
void flatten(SkWriteBuffer&) const override;
sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
SkIPoint* offset) const override;
private:
- SkMergeImageFilter(SkImageFilter* filters[], int count, const SkXfermode::Mode modes[],
+ SkMergeImageFilter(sk_sp<SkImageFilter> filters[], int count, const SkXfermode::Mode modes[],
const CropRect* cropRect);
uint8_t* fModes; // SkXfermode::Mode
diff --git a/samplecode/SampleFilterFuzz.cpp b/samplecode/SampleFilterFuzz.cpp
index 103d8c4a56..a1e8c2df7b 100644
--- a/samplecode/SampleFilterFuzz.cpp
+++ b/samplecode/SampleFilterFuzz.cpp
@@ -559,14 +559,11 @@ static sk_sp<SkImageFilter> make_image_filter(bool canBeNull) {
make_scalar(),
make_scalar()));
break;
- case MERGE: {
- sk_sp<SkImageFilter> subFilter1(make_image_filter());
- sk_sp<SkImageFilter> subFilter2(make_image_filter());
- filter = sk_sp<SkImageFilter>(SkMergeImageFilter::Create(subFilter1.get(),
- subFilter2.get(),
- make_xfermode()));
+ case MERGE:
+ filter = SkMergeImageFilter::Make(make_image_filter(),
+ make_image_filter(),
+ make_xfermode());
break;
- }
case COLOR: {
sk_sp<SkColorFilter> cf(make_color_filter());
sk_sp<SkImageFilter> subFilter(make_image_filter());
diff --git a/src/core/SkImageFilter.cpp b/src/core/SkImageFilter.cpp
index e999d3aebb..3b4ad31456 100644
--- a/src/core/SkImageFilter.cpp
+++ b/src/core/SkImageFilter.cpp
@@ -105,22 +105,14 @@ static int32_t next_image_filter_unique_id() {
return id;
}
-SkImageFilter::Common::~Common() {
- for (int i = 0; i < fInputs.count(); ++i) {
- SkSafeUnref(fInputs[i]);
- }
-}
-
void SkImageFilter::Common::allocInputs(int count) {
- const size_t size = count * sizeof(SkImageFilter*);
fInputs.reset(count);
- sk_bzero(fInputs.get(), size);
}
void SkImageFilter::Common::detachInputs(SkImageFilter** inputs) {
- const size_t size = fInputs.count() * sizeof(SkImageFilter*);
- memcpy(inputs, fInputs.get(), size);
- sk_bzero(fInputs.get(), size);
+ for (int i = 0; i < fInputs.count(); ++i) {
+ inputs[i] = fInputs[i].release();
+ }
}
bool SkImageFilter::Common::unflatten(SkReadBuffer& buffer, int expectedCount) {
@@ -135,7 +127,7 @@ bool SkImageFilter::Common::unflatten(SkReadBuffer& buffer, int expectedCount) {
this->allocInputs(count);
for (int i = 0; i < count; i++) {
if (buffer.readBool()) {
- fInputs[i] = buffer.readImageFilter();
+ fInputs[i] = sk_sp<SkImageFilter>(buffer.readImageFilter());
}
if (!buffer.isValid()) {
return false;
diff --git a/src/core/SkLocalMatrixImageFilter.cpp b/src/core/SkLocalMatrixImageFilter.cpp
index d1b5715b7f..bf29bd235b 100644
--- a/src/core/SkLocalMatrixImageFilter.cpp
+++ b/src/core/SkLocalMatrixImageFilter.cpp
@@ -20,8 +20,7 @@ SkFlattenable* SkLocalMatrixImageFilter::CreateProc(SkReadBuffer& buffer) {
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
SkMatrix lm;
buffer.readMatrix(&lm);
- return SkLocalMatrixImageFilter::Make(lm,
- sk_ref_sp<SkImageFilter>(common.getInput(0))).release();
+ return SkLocalMatrixImageFilter::Make(lm, common.getInput(0)).release();
}
void SkLocalMatrixImageFilter::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/core/SkMatrixImageFilter.cpp b/src/core/SkMatrixImageFilter.cpp
index ec221fdcac..b8f510f91c 100644
--- a/src/core/SkMatrixImageFilter.cpp
+++ b/src/core/SkMatrixImageFilter.cpp
@@ -34,7 +34,7 @@ SkFlattenable* SkMatrixImageFilter::CreateProc(SkReadBuffer& buffer) {
SkMatrix matrix;
buffer.readMatrix(&matrix);
SkFilterQuality quality = static_cast<SkFilterQuality>(buffer.readInt());
- return Create(matrix, quality, common.getInput(0));
+ return Create(matrix, quality, common.getInput(0).get());
}
void SkMatrixImageFilter::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/effects/SkAlphaThresholdFilter.cpp b/src/effects/SkAlphaThresholdFilter.cpp
index 55dfe58b46..177a3ba5f0 100644
--- a/src/effects/SkAlphaThresholdFilter.cpp
+++ b/src/effects/SkAlphaThresholdFilter.cpp
@@ -269,7 +269,7 @@ SkFlattenable* SkAlphaThresholdFilterImpl::CreateProc(SkReadBuffer& buffer) {
SkScalar outer = buffer.readScalar();
SkRegion rgn;
buffer.readRegion(&rgn);
- return SkAlphaThresholdFilter::Create(rgn, inner, outer, common.getInput(0));
+ return SkAlphaThresholdFilter::Create(rgn, inner, outer, common.getInput(0).get());
}
SkAlphaThresholdFilterImpl::SkAlphaThresholdFilterImpl(const SkRegion& region,
diff --git a/src/effects/SkBlurImageFilter.cpp b/src/effects/SkBlurImageFilter.cpp
index 65c0aa8d0a..c7964c3218 100644
--- a/src/effects/SkBlurImageFilter.cpp
+++ b/src/effects/SkBlurImageFilter.cpp
@@ -46,7 +46,7 @@ SkFlattenable* SkBlurImageFilter::CreateProc(SkReadBuffer& buffer) {
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
SkScalar sigmaX = buffer.readScalar();
SkScalar sigmaY = buffer.readScalar();
- return Create(sigmaX, sigmaY, common.getInput(0), &common.cropRect());
+ return Create(sigmaX, sigmaY, common.getInput(0).get(), &common.cropRect());
}
void SkBlurImageFilter::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/effects/SkColorFilterImageFilter.cpp b/src/effects/SkColorFilterImageFilter.cpp
index 1da8b2ce16..beb3138c84 100644
--- a/src/effects/SkColorFilterImageFilter.cpp
+++ b/src/effects/SkColorFilterImageFilter.cpp
@@ -44,7 +44,7 @@ SkColorFilterImageFilter::SkColorFilterImageFilter(SkColorFilter* cf,
SkFlattenable* SkColorFilterImageFilter::CreateProc(SkReadBuffer& buffer) {
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
sk_sp<SkColorFilter> cf(buffer.readColorFilter());
- return Create(cf.get(), common.getInput(0), &common.cropRect());
+ return Create(cf.get(), common.getInput(0).get(), &common.cropRect());
}
void SkColorFilterImageFilter::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/effects/SkComposeImageFilter.cpp b/src/effects/SkComposeImageFilter.cpp
index 3cd8a9e6fd..e2a27a8312 100644
--- a/src/effects/SkComposeImageFilter.cpp
+++ b/src/effects/SkComposeImageFilter.cpp
@@ -60,8 +60,7 @@ SkIRect SkComposeImageFilter::onFilterBounds(const SkIRect& src, const SkMatrix&
SkFlattenable* SkComposeImageFilter::CreateProc(SkReadBuffer& buffer) {
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 2);
- return SkComposeImageFilter::Make(sk_ref_sp<SkImageFilter>(common.getInput(0)),
- sk_ref_sp<SkImageFilter>(common.getInput(1))).release();
+ return SkComposeImageFilter::Make(common.getInput(0), common.getInput(1)).release();
}
#ifndef SK_IGNORE_TO_STRING
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index ec75fd0604..d054e58e51 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -200,7 +200,8 @@ SkFlattenable* SkDisplacementMapEffect::CreateProc(SkReadBuffer& buffer) {
ChannelSelectorType xsel = (ChannelSelectorType)buffer.readInt();
ChannelSelectorType ysel = (ChannelSelectorType)buffer.readInt();
SkScalar scale = buffer.readScalar();
- return Create(xsel, ysel, scale, common.getInput(0), common.getInput(1), &common.cropRect());
+ return Create(xsel, ysel, scale,
+ common.getInput(0).get(), common.getInput(1).get(), &common.cropRect());
}
void SkDisplacementMapEffect::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/effects/SkDropShadowImageFilter.cpp b/src/effects/SkDropShadowImageFilter.cpp
index 93c11ca1bb..6e750ca74c 100644
--- a/src/effects/SkDropShadowImageFilter.cpp
+++ b/src/effects/SkDropShadowImageFilter.cpp
@@ -37,7 +37,7 @@ SkFlattenable* SkDropShadowImageFilter::CreateProc(SkReadBuffer& buffer) {
ShadowMode shadowMode = buffer.isVersionLT(SkReadBuffer::kDropShadowMode_Version) ?
kDrawShadowAndForeground_ShadowMode :
static_cast<ShadowMode>(buffer.readInt());
- return Create(dx, dy, sigmaX, sigmaY, color, shadowMode, common.getInput(0),
+ return Create(dx, dy, sigmaX, sigmaY, color, shadowMode, common.getInput(0).get(),
&common.cropRect());
}
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
index 92028180f6..55a1f22909 100644
--- a/src/effects/SkLightingImageFilter.cpp
+++ b/src/effects/SkLightingImageFilter.cpp
@@ -1215,7 +1215,7 @@ SkFlattenable* SkDiffuseLightingImageFilter::CreateProc(SkReadBuffer& buffer) {
SkAutoTUnref<SkImageFilterLight> light(SkImageFilterLight::UnflattenLight(buffer));
SkScalar surfaceScale = buffer.readScalar();
SkScalar kd = buffer.readScalar();
- return Create(light, surfaceScale, kd, common.getInput(0), &common.cropRect());
+ return Create(light, surfaceScale, kd, common.getInput(0).get(), &common.cropRect());
}
void SkDiffuseLightingImageFilter::flatten(SkWriteBuffer& buffer) const {
@@ -1358,7 +1358,7 @@ SkFlattenable* SkSpecularLightingImageFilter::CreateProc(SkReadBuffer& buffer) {
SkScalar surfaceScale = buffer.readScalar();
SkScalar ks = buffer.readScalar();
SkScalar shine = buffer.readScalar();
- return Create(light, surfaceScale, ks, shine, common.getInput(0), &common.cropRect());
+ return Create(light, surfaceScale, ks, shine, common.getInput(0).get(), &common.cropRect());
}
void SkSpecularLightingImageFilter::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/effects/SkMagnifierImageFilter.cpp b/src/effects/SkMagnifierImageFilter.cpp
index 7ec2aa21ec..bfad549485 100644
--- a/src/effects/SkMagnifierImageFilter.cpp
+++ b/src/effects/SkMagnifierImageFilter.cpp
@@ -285,7 +285,7 @@ SkFlattenable* SkMagnifierImageFilter::CreateProc(SkReadBuffer& buffer) {
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
SkRect src;
buffer.readRect(&src);
- return Create(src, buffer.readScalar(), common.getInput(0));
+ return Create(src, buffer.readScalar(), common.getInput(0).get());
}
void SkMagnifierImageFilter::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/effects/SkMatrixConvolutionImageFilter.cpp b/src/effects/SkMatrixConvolutionImageFilter.cpp
index 7a25f5f7eb..c8b43bbfd0 100644
--- a/src/effects/SkMatrixConvolutionImageFilter.cpp
+++ b/src/effects/SkMatrixConvolutionImageFilter.cpp
@@ -97,7 +97,7 @@ SkFlattenable* SkMatrixConvolutionImageFilter::CreateProc(SkReadBuffer& buffer)
TileMode tileMode = (TileMode)buffer.readInt();
bool convolveAlpha = buffer.readBool();
return Create(kernelSize, kernel.get(), gain, bias, kernelOffset, tileMode, convolveAlpha,
- common.getInput(0), &common.cropRect());
+ common.getInput(0).get(), &common.cropRect());
}
void SkMatrixConvolutionImageFilter::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/effects/SkMergeImageFilter.cpp b/src/effects/SkMergeImageFilter.cpp
index 47d33dffb4..07b2c1cf3e 100755
--- a/src/effects/SkMergeImageFilter.cpp
+++ b/src/effects/SkMergeImageFilter.cpp
@@ -42,10 +42,10 @@ void SkMergeImageFilter::initModes(const SkXfermode::Mode modes[]) {
}
}
-SkMergeImageFilter::SkMergeImageFilter(SkImageFilter* filters[], int count,
+SkMergeImageFilter::SkMergeImageFilter(sk_sp<SkImageFilter> filters[], int count,
const SkXfermode::Mode modes[],
const CropRect* cropRect)
- : INHERITED(count, filters, cropRect) {
+ : INHERITED(filters, count, cropRect) {
SkASSERT(count >= 0);
this->initModes(modes);
}
@@ -149,9 +149,9 @@ SkFlattenable* SkMergeImageFilter::CreateProc(SkReadBuffer& buffer) {
if (!buffer.isValid()) {
return nullptr;
}
- return Create(common.inputs(), count, modes.get(), &common.cropRect());
+ return Make(common.inputs(), count, modes.get(), &common.cropRect()).release();
}
- return Create(common.inputs(), count, nullptr, &common.cropRect());
+ return Make(common.inputs(), count, nullptr, &common.cropRect()).release();
}
void SkMergeImageFilter::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
index 5c36480bc8..dbb116ed22 100644
--- a/src/effects/SkMorphologyImageFilter.cpp
+++ b/src/effects/SkMorphologyImageFilter.cpp
@@ -76,14 +76,14 @@ SkFlattenable* SkErodeImageFilter::CreateProc(SkReadBuffer& buffer) {
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
const int width = buffer.readInt();
const int height = buffer.readInt();
- return Create(width, height, common.getInput(0), &common.cropRect());
+ return Create(width, height, common.getInput(0).get(), &common.cropRect());
}
SkFlattenable* SkDilateImageFilter::CreateProc(SkReadBuffer& buffer) {
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
const int width = buffer.readInt();
const int height = buffer.readInt();
- return Create(width, height, common.getInput(0), &common.cropRect());
+ return Create(width, height, common.getInput(0).get(), &common.cropRect());
}
#ifndef SK_IGNORE_TO_STRING
diff --git a/src/effects/SkOffsetImageFilter.cpp b/src/effects/SkOffsetImageFilter.cpp
index 05df229b3e..a2de25e7de 100644
--- a/src/effects/SkOffsetImageFilter.cpp
+++ b/src/effects/SkOffsetImageFilter.cpp
@@ -86,7 +86,7 @@ SkFlattenable* SkOffsetImageFilter::CreateProc(SkReadBuffer& buffer) {
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
SkPoint offset;
buffer.readPoint(&offset);
- return Create(offset.x(), offset.y(), common.getInput(0), &common.cropRect());
+ return Create(offset.x(), offset.y(), common.getInput(0).get(), &common.cropRect());
}
void SkOffsetImageFilter::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/effects/SkTestImageFilters.cpp b/src/effects/SkTestImageFilters.cpp
index b8b0e187ed..a77f5190ff 100755
--- a/src/effects/SkTestImageFilters.cpp
+++ b/src/effects/SkTestImageFilters.cpp
@@ -77,7 +77,7 @@ bool SkDownSampleImageFilter::onFilterImageDeprecated(Proxy* proxy, const SkBitm
SkFlattenable* SkDownSampleImageFilter::CreateProc(SkReadBuffer& buffer) {
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
- return Create(buffer.readScalar(), common.getInput(0));
+ return Create(buffer.readScalar(), common.getInput(0).get());
}
void SkDownSampleImageFilter::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/effects/SkTileImageFilter.cpp b/src/effects/SkTileImageFilter.cpp
index e6b561dec4..a4129a5ad0 100644
--- a/src/effects/SkTileImageFilter.cpp
+++ b/src/effects/SkTileImageFilter.cpp
@@ -127,7 +127,7 @@ SkFlattenable* SkTileImageFilter::CreateProc(SkReadBuffer& buffer) {
SkRect src, dst;
buffer.readRect(&src);
buffer.readRect(&dst);
- return Create(src, dst, common.getInput(0));
+ return Create(src, dst, common.getInput(0).get());
}
void SkTileImageFilter::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/effects/SkXfermodeImageFilter.cpp b/src/effects/SkXfermodeImageFilter.cpp
index 8cd75127ba..3b186039d0 100644
--- a/src/effects/SkXfermodeImageFilter.cpp
+++ b/src/effects/SkXfermodeImageFilter.cpp
@@ -40,8 +40,8 @@ SkXfermodeImageFilter::SkXfermodeImageFilter(sk_sp<SkXfermode> mode,
SkFlattenable* SkXfermodeImageFilter::CreateProc(SkReadBuffer& buffer) {
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 2);
sk_sp<SkXfermode> mode(buffer.readXfermode());
- return Make(std::move(mode), common.getInput(0),
- common.getInput(1), &common.cropRect()).release();
+ return Make(std::move(mode), common.getInput(0).get(),
+ common.getInput(1).get(), &common.cropRect()).release();
}
void SkXfermodeImageFilter::flatten(SkWriteBuffer& buffer) const {
diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp
index 3cf73a8a9c..910ad46d91 100644
--- a/tests/ImageFilterTest.cpp
+++ b/tests/ImageFilterTest.cpp
@@ -169,11 +169,13 @@ public:
SkMatrixConvolutionImageFilter::Create(
kernelSize, kernel, gain, bias, SkIPoint::Make(1, 1),
SkMatrixConvolutionImageFilter::kRepeat_TileMode, false, input, cropRect));
- this->addFilter("merge", SkMergeImageFilter::Create(input, input, SkXfermode::kSrcOver_Mode,
- cropRect));
- this->addFilter("merge with disjoint inputs", SkMergeImageFilter::Create(
- paintFilterLeft.get(), paintFilterRight.get(),
- SkXfermode::kSrcOver_Mode, cropRect));
+ this->addFilter("merge", SkMergeImageFilter::Make(sk_ref_sp<SkImageFilter>(input),
+ sk_ref_sp<SkImageFilter>(input),
+ SkXfermode::kSrcOver_Mode,
+ cropRect).release());
+ this->addFilter("merge with disjoint inputs", SkMergeImageFilter::Make(
+ std::move(paintFilterLeft), std::move(paintFilterRight),
+ SkXfermode::kSrcOver_Mode, cropRect).release());
this->addFilter("offset",
SkOffsetImageFilter::Create(SK_Scalar1, SK_Scalar1, input, cropRect));
this->addFilter("dilate", SkDilateImageFilter::Create(3, 2, input, cropRect));
@@ -824,8 +826,8 @@ static void test_imagefilter_merge_result_size(SkImageFilter::Proxy* proxy,
greenBM.allocN32Pixels(20, 20);
greenBM.eraseColor(SK_ColorGREEN);
sk_sp<SkImage> greenImage(SkImage::MakeFromBitmap(greenBM));
- SkAutoTUnref<SkImageFilter> source(SkImageSource::Create(greenImage.get()));
- SkAutoTUnref<SkImageFilter> merge(SkMergeImageFilter::Create(source.get(), source.get()));
+ sk_sp<SkImageFilter> source(SkImageSource::Create(greenImage.get()));
+ sk_sp<SkImageFilter> merge(SkMergeImageFilter::Make(source, source));
sk_sp<SkSpecialImage> srcImg(create_empty_special_image(context, proxy, 1));