Update DisplacementMapEffect to sk_sp

TBR=reed@google.com

GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1877783003

Committed: https://skia.googlesource.com/skia/+/a53011ef44705a091a8e24f7ea289a3f9ad759f2

Review URL: https://codereview.chromium.org/1877783003
diff --git a/bench/DisplacementBench.cpp b/bench/DisplacementBench.cpp
index 82857e6..9edf214 100644
--- a/bench/DisplacementBench.cpp
+++ b/bench/DisplacementBench.cpp
@@ -18,9 +18,7 @@
 
 class DisplacementBaseBench : public Benchmark {
 public:
-    DisplacementBaseBench(bool small) :
-        fInitialized(false), fIsSmall(small) {
-    }
+    DisplacementBaseBench(bool small) : fInitialized(false), fIsSmall(small) { }
 
 protected:
     void onDelayedSetup() override {
@@ -92,8 +90,7 @@
 
 class DisplacementZeroBench : public DisplacementBaseBench {
 public:
-    DisplacementZeroBench(bool small) : INHERITED(small) {
-    }
+    DisplacementZeroBench(bool small) : INHERITED(small) { }
 
 protected:
     const char* onGetName() override {
@@ -104,9 +101,10 @@
         SkPaint paint;
         sk_sp<SkImageFilter> displ(SkImageSource::Make(fCheckerboard));
         // No displacement effect
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
-            SkDisplacementMapEffect::kR_ChannelSelectorType,
-            SkDisplacementMapEffect::kG_ChannelSelectorType, 0.0f, displ.get()))->unref();
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
+                                                SkDisplacementMapEffect::kR_ChannelSelectorType,
+                                                SkDisplacementMapEffect::kG_ChannelSelectorType,
+                                                0.0f, std::move(displ), nullptr));
 
         for (int i = 0; i < loops; i++) {
             this->drawClippedBitmap(canvas, 0, 0, paint);
@@ -119,8 +117,7 @@
 
 class DisplacementAlphaBench : public DisplacementBaseBench {
 public:
-    DisplacementAlphaBench(bool small) : INHERITED(small) {
-    }
+    DisplacementAlphaBench(bool small) : INHERITED(small) { }
 
 protected:
     const char* onGetName() override {
@@ -131,11 +128,12 @@
         SkPaint paint;
         sk_sp<SkImageFilter> displ(SkImageSource::Make(fCheckerboard));
         // Displacement, with 1 alpha component (which isn't pre-multiplied)
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
-            SkDisplacementMapEffect::kB_ChannelSelectorType,
-            SkDisplacementMapEffect::kA_ChannelSelectorType, 16.0f, displ.get()))->unref();
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
+                                                SkDisplacementMapEffect::kB_ChannelSelectorType,
+                                                SkDisplacementMapEffect::kA_ChannelSelectorType,
+                                                16.0f, std::move(displ), nullptr));
         for (int i = 0; i < loops; i++) {
-            drawClippedBitmap(canvas, 100, 0, paint);
+            this->drawClippedBitmap(canvas, 100, 0, paint);
         }
     }
 
@@ -145,8 +143,7 @@
 
 class DisplacementFullBench : public DisplacementBaseBench {
 public:
-    DisplacementFullBench(bool small) : INHERITED(small) {
-    }
+    DisplacementFullBench(bool small) : INHERITED(small) { }
 
 protected:
     const char* onGetName() override {
@@ -157,9 +154,10 @@
         SkPaint paint;
         sk_sp<SkImageFilter> displ(SkImageSource::Make(fCheckerboard));
         // Displacement, with 2 non-alpha components
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
-            SkDisplacementMapEffect::kR_ChannelSelectorType,
-            SkDisplacementMapEffect::kB_ChannelSelectorType, 32.0f, displ.get()))->unref();
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
+                                                SkDisplacementMapEffect::kR_ChannelSelectorType,
+                                                SkDisplacementMapEffect::kB_ChannelSelectorType,
+                                                32.0f, std::move(displ), nullptr));
         for (int i = 0; i < loops; ++i) {
             this->drawClippedBitmap(canvas, 200, 0, paint);
         }
diff --git a/bench/ImageFilterDAGBench.cpp b/bench/ImageFilterDAGBench.cpp
index 308b3b0..776ee78 100644
--- a/bench/ImageFilterDAGBench.cpp
+++ b/bench/ImageFilterDAGBench.cpp
@@ -62,10 +62,11 @@
             auto xSelector = SkDisplacementMapEffect::kR_ChannelSelectorType;
             auto ySelector = SkDisplacementMapEffect::kB_ChannelSelectorType;
             SkScalar scale = 2;
-            sk_sp<SkImageFilter> displ(SkDisplacementMapEffect::Create(xSelector, ySelector, scale,
-                                                                       blur.get(), blur.get()));
+
             SkPaint paint;
-            paint.setImageFilter(std::move(displ));
+            paint.setImageFilter(SkDisplacementMapEffect::Make(xSelector, ySelector, scale,
+                                                               blur, blur));
+
             SkRect rect = SkRect::Make(SkIRect::MakeWH(400, 400));
             canvas->drawRect(rect, paint);
         }
diff --git a/fuzz/FilterFuzz.cpp b/fuzz/FilterFuzz.cpp
index 791fe01..484bbf7 100644
--- a/fuzz/FilterFuzz.cpp
+++ b/fuzz/FilterFuzz.cpp
@@ -706,17 +706,13 @@
         }
         break;
     }
-    case DISPLACE: {
-        sk_sp<SkImageFilter> subFilter1(make_image_filter(false));
-        sk_sp<SkImageFilter> subFilter2(make_image_filter());
-
-        filter = sk_sp<SkImageFilter>(SkDisplacementMapEffect::Create(make_channel_selector_type(),
-                                                                      make_channel_selector_type(),
-                                                                      make_scalar(),
-                                                                      subFilter1.get(),
-                                                                      subFilter2.get()));
+    case DISPLACE:
+        filter = SkDisplacementMapEffect::Make(make_channel_selector_type(),
+                                               make_channel_selector_type(),
+                                               make_scalar(),
+                                               make_image_filter(false),
+                                               make_image_filter());
         break;
-    }
     case TILE: {
         sk_sp<SkImageFilter> subFilter(make_image_filter(false));
 
diff --git a/gm/displacement.cpp b/gm/displacement.cpp
index 9b62a60..9fea018 100644
--- a/gm/displacement.cpp
+++ b/gm/displacement.cpp
@@ -58,142 +58,142 @@
         canvas->clear(SK_ColorBLACK);
         SkPaint paint;
         sk_sp<SkImageFilter> displ(SkImageSource::Make(fCheckerboard));
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kR_ChannelSelectorType,
-            SkDisplacementMapEffect::kG_ChannelSelectorType, 0.0f, displ.get()))->unref();
-        drawClippedBitmap(canvas, 0, 0, paint);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+            SkDisplacementMapEffect::kG_ChannelSelectorType, 0.0f, displ, nullptr));
+        this->drawClippedBitmap(canvas, 0, 0, paint);
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kB_ChannelSelectorType,
-            SkDisplacementMapEffect::kA_ChannelSelectorType, 16.0f, displ.get()))->unref();
-        drawClippedBitmap(canvas, 100, 0, paint);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+            SkDisplacementMapEffect::kA_ChannelSelectorType, 16.0f, displ, nullptr));
+        this->drawClippedBitmap(canvas, 100, 0, paint);
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kR_ChannelSelectorType,
-            SkDisplacementMapEffect::kB_ChannelSelectorType, 32.0f, displ.get()))->unref();
-        drawClippedBitmap(canvas, 200, 0, paint);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+            SkDisplacementMapEffect::kB_ChannelSelectorType, 32.0f, displ, nullptr));
+        this->drawClippedBitmap(canvas, 200, 0, paint);
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kG_ChannelSelectorType,
-            SkDisplacementMapEffect::kA_ChannelSelectorType, 48.0f, displ.get()))->unref();
-        drawClippedBitmap(canvas, 300, 0, paint);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+            SkDisplacementMapEffect::kA_ChannelSelectorType, 48.0f, displ, nullptr));
+        this->drawClippedBitmap(canvas, 300, 0, paint);
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kR_ChannelSelectorType,
-            SkDisplacementMapEffect::kA_ChannelSelectorType, 64.0f, displ.get()))->unref();
-        drawClippedBitmap(canvas, 400, 0, paint);
+            SkDisplacementMapEffect::kA_ChannelSelectorType, 64.0f, displ, nullptr));
+        this->drawClippedBitmap(canvas, 400, 0, paint);
 
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kR_ChannelSelectorType,
-            SkDisplacementMapEffect::kG_ChannelSelectorType, 40.0f, displ.get()))->unref();
-        drawClippedBitmap(canvas, 0, 100, paint);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+            SkDisplacementMapEffect::kG_ChannelSelectorType, 40.0f, displ, nullptr));
+        this->drawClippedBitmap(canvas, 0, 100, paint);
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kB_ChannelSelectorType,
-            SkDisplacementMapEffect::kA_ChannelSelectorType, 40.0f, displ.get()))->unref();
-        drawClippedBitmap(canvas, 100, 100, paint);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+            SkDisplacementMapEffect::kA_ChannelSelectorType, 40.0f, displ, nullptr));
+        this->drawClippedBitmap(canvas, 100, 100, paint);
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kR_ChannelSelectorType,
-            SkDisplacementMapEffect::kB_ChannelSelectorType, 40.0f, displ.get()))->unref();
-        drawClippedBitmap(canvas, 200, 100, paint);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+            SkDisplacementMapEffect::kB_ChannelSelectorType, 40.0f, displ, nullptr));
+        this->drawClippedBitmap(canvas, 200, 100, paint);
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kG_ChannelSelectorType,
-            SkDisplacementMapEffect::kA_ChannelSelectorType, 40.0f, displ.get()))->unref();
-        drawClippedBitmap(canvas, 300, 100, paint);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+            SkDisplacementMapEffect::kA_ChannelSelectorType, 40.0f, displ, nullptr));
+        this->drawClippedBitmap(canvas, 300, 100, paint);
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kR_ChannelSelectorType,
-            SkDisplacementMapEffect::kA_ChannelSelectorType, 40.0f, displ.get()))->unref();
-        drawClippedBitmap(canvas, 400, 100, paint);
+            SkDisplacementMapEffect::kA_ChannelSelectorType, 40.0f, displ, nullptr));
+        this->drawClippedBitmap(canvas, 400, 100, paint);
 
         SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(30, 30, 40, 40));
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kR_ChannelSelectorType,
             SkDisplacementMapEffect::kG_ChannelSelectorType,
-            0.0f, displ.get(), nullptr, &cropRect))->unref();
-        drawClippedBitmap(canvas, 0, 200, paint);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+            0.0f, displ, nullptr, &cropRect));
+        this->drawClippedBitmap(canvas, 0, 200, paint);
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kB_ChannelSelectorType,
             SkDisplacementMapEffect::kA_ChannelSelectorType,
-            16.0f, displ.get(), nullptr, &cropRect))->unref();
-        drawClippedBitmap(canvas, 100, 200, paint);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+            16.0f, displ, nullptr, &cropRect));
+        this->drawClippedBitmap(canvas, 100, 200, paint);
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kR_ChannelSelectorType,
             SkDisplacementMapEffect::kB_ChannelSelectorType,
-            32.0f, displ.get(), nullptr, &cropRect))->unref();
-        drawClippedBitmap(canvas, 200, 200, paint);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+            32.0f, displ, nullptr, &cropRect));
+        this->drawClippedBitmap(canvas, 200, 200, paint);
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kG_ChannelSelectorType,
             SkDisplacementMapEffect::kA_ChannelSelectorType,
-            48.0f, displ.get(), nullptr, &cropRect))->unref();
-        drawClippedBitmap(canvas, 300, 200, paint);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+            48.0f, displ, nullptr, &cropRect));
+        this->drawClippedBitmap(canvas, 300, 200, paint);
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kR_ChannelSelectorType,
             SkDisplacementMapEffect::kA_ChannelSelectorType,
-            64.0f, displ.get(), nullptr, &cropRect))->unref();
-        drawClippedBitmap(canvas, 400, 200, paint);
+            64.0f, displ, nullptr, &cropRect));
+        this->drawClippedBitmap(canvas, 400, 200, paint);
 
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kR_ChannelSelectorType,
             SkDisplacementMapEffect::kG_ChannelSelectorType,
-            40.0f, displ.get(), nullptr, &cropRect))->unref();
-        drawClippedBitmap(canvas, 0, 300, paint);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+            40.0f, displ, nullptr, &cropRect));
+        this->drawClippedBitmap(canvas, 0, 300, paint);
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kB_ChannelSelectorType,
             SkDisplacementMapEffect::kA_ChannelSelectorType,
-            40.0f, displ.get(), nullptr, &cropRect))->unref();
-        drawClippedBitmap(canvas, 100, 300, paint);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+            40.0f, displ, nullptr, &cropRect));
+        this->drawClippedBitmap(canvas, 100, 300, paint);
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kR_ChannelSelectorType,
             SkDisplacementMapEffect::kB_ChannelSelectorType,
-            40.0f, displ.get(), nullptr, &cropRect))->unref();
-        drawClippedBitmap(canvas, 200, 300, paint);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+            40.0f, displ, nullptr, &cropRect));
+        this->drawClippedBitmap(canvas, 200, 300, paint);
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kG_ChannelSelectorType,
             SkDisplacementMapEffect::kA_ChannelSelectorType,
-            40.0f, displ.get(), nullptr, &cropRect))->unref();
-        drawClippedBitmap(canvas, 300, 300, paint);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+            40.0f, displ, nullptr, &cropRect));
+        this->drawClippedBitmap(canvas, 300, 300, paint);
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kR_ChannelSelectorType,
             SkDisplacementMapEffect::kA_ChannelSelectorType,
-            40.0f, displ.get(), nullptr, &cropRect))->unref();
-        drawClippedBitmap(canvas, 400, 300, paint);
+            40.0f, displ, nullptr, &cropRect));
+        this->drawClippedBitmap(canvas, 400, 300, paint);
 
         // Test for negative scale.
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kG_ChannelSelectorType,
             SkDisplacementMapEffect::kA_ChannelSelectorType,
-            -40.0f, displ.get()))->unref();
+            -40.0f, displ, nullptr));
         this->drawClippedBitmap(canvas, 500, 0, paint);
 
         // Tests for images of different sizes
         displ = SkImageSource::Make(fSmall);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kR_ChannelSelectorType,
             SkDisplacementMapEffect::kG_ChannelSelectorType,
-            40.0f, displ.get()))->unref();
-        drawClippedBitmap(canvas, 0, 400, paint);
+            40.0f, std::move(displ), nullptr));
+        this->drawClippedBitmap(canvas, 0, 400, paint);
         displ = SkImageSource::Make(fLarge);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kB_ChannelSelectorType,
             SkDisplacementMapEffect::kA_ChannelSelectorType,
-            40.0f, displ.get()))->unref();
-        drawClippedBitmap(canvas, 100, 400, paint);
+            40.0f, std::move(displ), nullptr));
+        this->drawClippedBitmap(canvas, 100, 400, paint);
         displ = SkImageSource::Make(fLargeW);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kR_ChannelSelectorType,
             SkDisplacementMapEffect::kB_ChannelSelectorType,
-            40.0f, displ.get()))->unref();
-        drawClippedBitmap(canvas, 200, 400, paint);
+            40.0f, std::move(displ), nullptr));
+        this->drawClippedBitmap(canvas, 200, 400, paint);
         displ = SkImageSource::Make(fLargeH);
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kG_ChannelSelectorType,
             SkDisplacementMapEffect::kA_ChannelSelectorType,
-            40.0f, displ.get()))->unref();
-        drawClippedBitmap(canvas, 300, 400, paint);
+            40.0f, std::move(displ), nullptr));
+        this->drawClippedBitmap(canvas, 300, 400, paint);
 
         // Test for no given displacement input. In this case, both displacement
         // and color should use the same bitmap, given to SkCanvas::drawBitmap()
         // as an input argument.
-        paint.setImageFilter(SkDisplacementMapEffect::Create(
+        paint.setImageFilter(SkDisplacementMapEffect::Make(
             SkDisplacementMapEffect::kG_ChannelSelectorType,
             SkDisplacementMapEffect::kA_ChannelSelectorType,
-            40.0f, nullptr))->unref();
-        drawClippedBitmap(canvas, 400, 400, paint);
+            40.0f, nullptr, nullptr));
+        this->drawClippedBitmap(canvas, 400, 400, paint);
     }
 
 private:
diff --git a/gm/imagefiltersclipped.cpp b/gm/imagefiltersclipped.cpp
index f243411..7989f8b 100644
--- a/gm/imagefiltersclipped.cpp
+++ b/gm/imagefiltersclipped.cpp
@@ -100,12 +100,11 @@
                                     SkIntToScalar(3), SkIntToScalar(3), SK_ColorGREEN,
                                     SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode,
                                     nullptr),
-            sk_sp<SkImageFilter>(SkDisplacementMapEffect::Create(
-                                            SkDisplacementMapEffect::kR_ChannelSelectorType,
-                                            SkDisplacementMapEffect::kR_ChannelSelectorType,
-                                            SkIntToScalar(12),
-                                            gradient.get(),
-                                            checkerboard.get())),
+            SkDisplacementMapEffect::Make(SkDisplacementMapEffect::kR_ChannelSelectorType,
+                                          SkDisplacementMapEffect::kR_ChannelSelectorType,
+                                          SkIntToScalar(12),
+                                          std::move(gradient),
+                                          checkerboard),
             SkDilateImageFilter::Make(2, 2, checkerboard),
             SkErodeImageFilter::Make(2, 2, checkerboard),
             SkOffsetImageFilter::Make(SkIntToScalar(-16), SkIntToScalar(32), nullptr),
diff --git a/gm/imagefilterscropexpand.cpp b/gm/imagefilterscropexpand.cpp
index 3d5fcf3..4ce845d 100644
--- a/gm/imagefilterscropexpand.cpp
+++ b/gm/imagefilterscropexpand.cpp
@@ -107,13 +107,12 @@
                                     &bigRect));
 
             Draw(canvas, checkerboard, rect,
-                 sk_sp<SkImageFilter>(SkDisplacementMapEffect::Create(
-                                                SkDisplacementMapEffect::kR_ChannelSelectorType,
-                                                SkDisplacementMapEffect::kR_ChannelSelectorType,
-                                                SkIntToScalar(12),
-                                                gradientCircleSource.get(),
-                                                noopCropped.get(),
-                                                &bigRect)));
+                 SkDisplacementMapEffect::Make(SkDisplacementMapEffect::kR_ChannelSelectorType,
+                                               SkDisplacementMapEffect::kR_ChannelSelectorType,
+                                               SkIntToScalar(12),
+                                               gradientCircleSource,
+                                               noopCropped,
+                                               &bigRect));
 
             Draw(canvas, checkerboard, rect,
                  SkOffsetImageFilter::Make(SkIntToScalar(-8), SkIntToScalar(16),
diff --git a/gm/imagefiltersscaled.cpp b/gm/imagefiltersscaled.cpp
index 4c48aec..756b7c6 100644
--- a/gm/imagefiltersscaled.cpp
+++ b/gm/imagefiltersscaled.cpp
@@ -98,12 +98,11 @@
                                     SkIntToScalar(3), SkIntToScalar(3), SK_ColorYELLOW,
                                     SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode,
                                     nullptr),
-            sk_sp<SkImageFilter>(SkDisplacementMapEffect::Create(
-                                            SkDisplacementMapEffect::kR_ChannelSelectorType,
-                                            SkDisplacementMapEffect::kR_ChannelSelectorType,
-                                            SkIntToScalar(12),
-                                            gradient.get(),
-                                            checkerboard.get())),
+            SkDisplacementMapEffect::Make(SkDisplacementMapEffect::kR_ChannelSelectorType,
+                                          SkDisplacementMapEffect::kR_ChannelSelectorType,
+                                          SkIntToScalar(12),
+                                          std::move(gradient),
+                                          checkerboard),
             SkDilateImageFilter::Make(1, 1, checkerboard),
             SkErodeImageFilter::Make(1, 1, checkerboard),
             SkOffsetImageFilter::Make(SkIntToScalar(32), 0, nullptr),
diff --git a/gm/imagefilterstransformed.cpp b/gm/imagefilterstransformed.cpp
index 291d1d4..ce7ba5d 100644
--- a/gm/imagefilterstransformed.cpp
+++ b/gm/imagefilterstransformed.cpp
@@ -69,12 +69,11 @@
             SkBlurImageFilter::Make(12, 0, nullptr),
             SkDropShadowImageFilter::Make(0, 15, 8, 0, SK_ColorGREEN,
                 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, nullptr),
-            sk_sp<SkImageFilter>(SkDisplacementMapEffect::Create(
-                                            SkDisplacementMapEffect::kR_ChannelSelectorType,
-                                            SkDisplacementMapEffect::kR_ChannelSelectorType,
-                                            12,
-                                            gradient.get(),
-                                            checkerboard.get())),
+            SkDisplacementMapEffect::Make(SkDisplacementMapEffect::kR_ChannelSelectorType,
+                                          SkDisplacementMapEffect::kR_ChannelSelectorType,
+                                          12,
+                                          std::move(gradient),
+                                          checkerboard),
             SkDilateImageFilter::Make(2, 2, checkerboard),
             SkErodeImageFilter::Make(2, 2, checkerboard),
         };
diff --git a/include/effects/SkDisplacementMapEffect.h b/include/effects/SkDisplacementMapEffect.h
index 4b6f321..f93f2c4 100644
--- a/include/effects/SkDisplacementMapEffect.h
+++ b/include/effects/SkDisplacementMapEffect.h
@@ -20,13 +20,14 @@
         kA_ChannelSelectorType
     };
 
-    ~SkDisplacementMapEffect();
+    ~SkDisplacementMapEffect() override;
 
-    static SkImageFilter* Create(ChannelSelectorType xChannelSelector,
-                                 ChannelSelectorType yChannelSelector,
-                                 SkScalar scale, SkImageFilter* displacement,
-                                 SkImageFilter* color = NULL,
-                                 const CropRect* cropRect = NULL);
+    static sk_sp<SkImageFilter> Make(ChannelSelectorType xChannelSelector,
+                                     ChannelSelectorType yChannelSelector,
+                                     SkScalar scale,
+                                     sk_sp<SkImageFilter> displacement,
+                                     sk_sp<SkImageFilter> color,
+                                     const CropRect* cropRect = nullptr);
 
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDisplacementMapEffect)
 
@@ -38,13 +39,26 @@
 
     SK_TO_STRING_OVERRIDE()
 
+#ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR
+    static SkImageFilter* Create(ChannelSelectorType xChannelSelector,
+                                 ChannelSelectorType yChannelSelector,
+                                 SkScalar scale, SkImageFilter* displacement,
+                                 SkImageFilter* color = nullptr,
+                                 const CropRect* cropRect = nullptr) {
+        return Make(xChannelSelector, yChannelSelector, scale, 
+                    sk_ref_sp<SkImageFilter>(displacement),
+                    sk_ref_sp<SkImageFilter>(color),
+                    cropRect).release();
+    }
+#endif
+
 protected:
     sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
                                         SkIPoint* offset) const override;
 
     SkDisplacementMapEffect(ChannelSelectorType xChannelSelector,
                             ChannelSelectorType yChannelSelector,
-                            SkScalar scale, SkImageFilter* inputs[2],
+                            SkScalar scale, sk_sp<SkImageFilter> inputs[2],
                             const CropRect* cropRect);
     void flatten(SkWriteBuffer&) const override;
 
diff --git a/samplecode/SampleFilterFuzz.cpp b/samplecode/SampleFilterFuzz.cpp
index 5f06731..12b6a8a 100644
--- a/samplecode/SampleFilterFuzz.cpp
+++ b/samplecode/SampleFilterFuzz.cpp
@@ -709,17 +709,13 @@
         }
         break;
     }
-    case DISPLACE: {
-        sk_sp<SkImageFilter> subFilter1(make_image_filter(false));
-        sk_sp<SkImageFilter> subFilter2(make_image_filter());
-
-        filter = sk_sp<SkImageFilter>(SkDisplacementMapEffect::Create(make_channel_selector_type(),
-                                                                      make_channel_selector_type(),
-                                                                      make_scalar(),
-                                                                      subFilter1.get(),
-                                                                      subFilter2.get()));
+    case DISPLACE:
+        filter = SkDisplacementMapEffect::Make(make_channel_selector_type(),
+                                               make_channel_selector_type(),
+                                               make_scalar(),
+                                               make_image_filter(false),
+                                               make_image_filter());
         break;
-    }
     case TILE: {
         sk_sp<SkImageFilter> subFilter(make_image_filter(false));
 
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index aee15ef..b715f6a 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -163,27 +163,29 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-SkImageFilter* SkDisplacementMapEffect::Create(ChannelSelectorType xChannelSelector,
-                                               ChannelSelectorType yChannelSelector,
-                                               SkScalar scale,
-                                               SkImageFilter* displacement,
-                                               SkImageFilter* color,
-                                               const CropRect* cropRect) {
+sk_sp<SkImageFilter> SkDisplacementMapEffect::Make(ChannelSelectorType xChannelSelector,
+                                                   ChannelSelectorType yChannelSelector,
+                                                   SkScalar scale,
+                                                   sk_sp<SkImageFilter> displacement,
+                                                   sk_sp<SkImageFilter> color,
+                                                   const CropRect* cropRect) {
     if (!channel_selector_type_is_valid(xChannelSelector) ||
         !channel_selector_type_is_valid(yChannelSelector)) {
         return nullptr;
     }
 
-    SkImageFilter* inputs[2] = { displacement, color };
-    return new SkDisplacementMapEffect(xChannelSelector, yChannelSelector, scale, inputs, cropRect);
+    sk_sp<SkImageFilter> inputs[2] = { std::move(displacement), std::move(color) };
+    return sk_sp<SkImageFilter>(new SkDisplacementMapEffect(xChannelSelector,
+                                                            yChannelSelector,
+                                                            scale, inputs, cropRect));
 }
 
 SkDisplacementMapEffect::SkDisplacementMapEffect(ChannelSelectorType xChannelSelector,
                                                  ChannelSelectorType yChannelSelector,
                                                  SkScalar scale,
-                                                 SkImageFilter* inputs[2],
+                                                 sk_sp<SkImageFilter> inputs[2],
                                                  const CropRect* cropRect)
-    : INHERITED(2, inputs, cropRect)
+    : INHERITED(inputs, 2, cropRect)
     , fXChannelSelector(xChannelSelector)
     , fYChannelSelector(yChannelSelector)
     , fScale(scale) {
@@ -197,8 +199,9 @@
     ChannelSelectorType xsel = (ChannelSelectorType)buffer.readInt();
     ChannelSelectorType ysel = (ChannelSelectorType)buffer.readInt();
     SkScalar scale = buffer.readScalar();
-    return sk_sp<SkFlattenable>(Create(xsel, ysel, scale, common.getInput(0).get(),
-                                       common.getInput(1).get(), &common.cropRect()));
+    return Make(xsel, ysel, scale,
+                common.getInput(0), common.getInput(1),
+                &common.cropRect());
 }
 
 void SkDisplacementMapEffect::flatten(SkWriteBuffer& buffer) const {
diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp
index 114c342..172f84f 100644
--- a/tests/ImageFilterTest.cpp
+++ b/tests/ImageFilterTest.cpp
@@ -160,10 +160,10 @@
             sk_sp<SkImageFilter> gradientSource(SkImageSource::Make(std::move(gradientImage)));
 
             this->addFilter("displacement map", 
-                sk_sp<SkImageFilter>(SkDisplacementMapEffect::Create(
-                                        SkDisplacementMapEffect::kR_ChannelSelectorType,
-                                        SkDisplacementMapEffect::kB_ChannelSelectorType,
-                                        20.0f, gradientSource.get(), input.get(), cropRect)));
+                SkDisplacementMapEffect::Make(SkDisplacementMapEffect::kR_ChannelSelectorType,
+                                              SkDisplacementMapEffect::kB_ChannelSelectorType,
+                                              20.0f,
+                                              std::move(gradientSource), input, cropRect));
         }
 
         this->addFilter("blur", SkBlurImageFilter::Make(SK_Scalar1,