Make GrFragmentProcessor be non-refcounted and use std::unique_ptr.

Change-Id: I985e54a071338e99292a5aa2f42c92bc115b4008
Reviewed-on: https://skia-review.googlesource.com/32760
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/src/effects/GrAlphaThresholdFragmentProcessor.cpp b/src/effects/GrAlphaThresholdFragmentProcessor.cpp
index 731ca99..8c3afb7 100644
--- a/src/effects/GrAlphaThresholdFragmentProcessor.cpp
+++ b/src/effects/GrAlphaThresholdFragmentProcessor.cpp
@@ -123,12 +123,12 @@
     this->addCoordTransform(&fImageCoordTransform);
     this->addCoordTransform(&fMaskCoordTransform);
 }
-sk_sp<GrFragmentProcessor> GrAlphaThresholdFragmentProcessor::clone() const {
-    return sk_sp<GrFragmentProcessor>(new GrAlphaThresholdFragmentProcessor(*this));
+std::unique_ptr<GrFragmentProcessor> GrAlphaThresholdFragmentProcessor::clone() const {
+    return std::unique_ptr<GrFragmentProcessor>(new GrAlphaThresholdFragmentProcessor(*this));
 }
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrAlphaThresholdFragmentProcessor);
 #if GR_TEST_UTILS
-sk_sp<GrFragmentProcessor> GrAlphaThresholdFragmentProcessor::TestCreate(
+std::unique_ptr<GrFragmentProcessor> GrAlphaThresholdFragmentProcessor::TestCreate(
         GrProcessorTestData* testData) {
     sk_sp<GrTextureProxy> bmpProxy = testData->textureProxy(GrProcessorUnitTest::kSkiaPMTextureIdx);
     sk_sp<GrTextureProxy> maskProxy = testData->textureProxy(GrProcessorUnitTest::kAlphaTextureIdx);
diff --git a/src/effects/GrAlphaThresholdFragmentProcessor.fp b/src/effects/GrAlphaThresholdFragmentProcessor.fp
index e930ed9..481549e 100644
--- a/src/effects/GrAlphaThresholdFragmentProcessor.fp
+++ b/src/effects/GrAlphaThresholdFragmentProcessor.fp
@@ -13,18 +13,14 @@
 }
 
 @make {
-    static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> image,
-                                           sk_sp<GrColorSpaceXform> colorXform,
-                                           sk_sp<GrTextureProxy> mask,
-                                           float innerThreshold,
-                                           float outerThreshold,
-                                           const SkIRect& bounds) {
-        return sk_sp<GrFragmentProcessor>(new GrAlphaThresholdFragmentProcessor(image,
-                                                                                colorXform,
-                                                                                mask,
-                                                                                innerThreshold,
-                                                                                outerThreshold,
-                                                                                bounds));
+    static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> image,
+                                                     sk_sp<GrColorSpaceXform> colorXform,
+                                                     sk_sp<GrTextureProxy> mask,
+                                                     float innerThreshold,
+                                                     float outerThreshold,
+                                                     const SkIRect& bounds) {
+        return std::unique_ptr<GrFragmentProcessor>(new GrAlphaThresholdFragmentProcessor(
+                image, colorXform, mask, innerThreshold, outerThreshold, bounds));
     }
 }
 
@@ -89,4 +85,4 @@
                                 std::move(maskProxy),
                                 innerThresh, outerThresh,
                                 bounds);
-}
\ No newline at end of file
+}
diff --git a/src/effects/GrAlphaThresholdFragmentProcessor.h b/src/effects/GrAlphaThresholdFragmentProcessor.h
index 78424d0..3b64951 100644
--- a/src/effects/GrAlphaThresholdFragmentProcessor.h
+++ b/src/effects/GrAlphaThresholdFragmentProcessor.h
@@ -24,19 +24,19 @@
     float innerThreshold() const { return fInnerThreshold; }
     float outerThreshold() const { return fOuterThreshold; }
 
-    static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> image,
-                                           sk_sp<GrColorSpaceXform>
-                                                   colorXform,
-                                           sk_sp<GrTextureProxy>
-                                                   mask,
-                                           float innerThreshold,
-                                           float outerThreshold,
-                                           const SkIRect& bounds) {
-        return sk_sp<GrFragmentProcessor>(new GrAlphaThresholdFragmentProcessor(
+    static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> image,
+                                                     sk_sp<GrColorSpaceXform>
+                                                             colorXform,
+                                                     sk_sp<GrTextureProxy>
+                                                             mask,
+                                                     float innerThreshold,
+                                                     float outerThreshold,
+                                                     const SkIRect& bounds) {
+        return std::unique_ptr<GrFragmentProcessor>(new GrAlphaThresholdFragmentProcessor(
                 image, colorXform, mask, innerThreshold, outerThreshold, bounds));
     }
     GrAlphaThresholdFragmentProcessor(const GrAlphaThresholdFragmentProcessor& src);
-    sk_sp<GrFragmentProcessor> clone() const override;
+    std::unique_ptr<GrFragmentProcessor> clone() const override;
     const char* name() const override { return "AlphaThresholdFragmentProcessor"; }
 
 private:
diff --git a/src/effects/GrCircleBlurFragmentProcessor.cpp b/src/effects/GrCircleBlurFragmentProcessor.cpp
index 68ba0af..7cec3cc 100644
--- a/src/effects/GrCircleBlurFragmentProcessor.cpp
+++ b/src/effects/GrCircleBlurFragmentProcessor.cpp
@@ -206,9 +206,8 @@
     return blurProfile;
 }
 
-sk_sp<GrFragmentProcessor> GrCircleBlurFragmentProcessor::Make(GrResourceProvider* resourceProvider,
-                                                               const SkRect& circle,
-                                                               float sigma) {
+std::unique_ptr<GrFragmentProcessor> GrCircleBlurFragmentProcessor::Make(
+        GrResourceProvider* resourceProvider, const SkRect& circle, float sigma) {
     float solidRadius;
     float textureRadius;
     sk_sp<GrTextureProxy> profile(
@@ -216,7 +215,7 @@
     if (!profile) {
         return nullptr;
     }
-    return sk_sp<GrFragmentProcessor>(new GrCircleBlurFragmentProcessor(
+    return std::unique_ptr<GrFragmentProcessor>(new GrCircleBlurFragmentProcessor(
             circle, textureRadius, solidRadius, std::move(profile), resourceProvider));
 }
 #include "glsl/GrGLSLColorSpaceXformHelper.h"
@@ -295,12 +294,12 @@
     this->initClassID<GrCircleBlurFragmentProcessor>();
     this->addTextureSampler(&fBlurProfileSampler);
 }
-sk_sp<GrFragmentProcessor> GrCircleBlurFragmentProcessor::clone() const {
-    return sk_sp<GrFragmentProcessor>(new GrCircleBlurFragmentProcessor(*this));
+std::unique_ptr<GrFragmentProcessor> GrCircleBlurFragmentProcessor::clone() const {
+    return std::unique_ptr<GrFragmentProcessor>(new GrCircleBlurFragmentProcessor(*this));
 }
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrCircleBlurFragmentProcessor);
 #if GR_TEST_UTILS
-sk_sp<GrFragmentProcessor> GrCircleBlurFragmentProcessor::TestCreate(
+std::unique_ptr<GrFragmentProcessor> GrCircleBlurFragmentProcessor::TestCreate(
         GrProcessorTestData* testData) {
     SkScalar wh = testData->fRandom->nextRangeScalar(100.f, 1000.f);
     SkScalar sigma = testData->fRandom->nextRangeF(1.f, 10.f);
diff --git a/src/effects/GrCircleBlurFragmentProcessor.fp b/src/effects/GrCircleBlurFragmentProcessor.fp
index 01e5426..856a468 100644
--- a/src/effects/GrCircleBlurFragmentProcessor.fp
+++ b/src/effects/GrCircleBlurFragmentProcessor.fp
@@ -18,8 +18,8 @@
 }
 
 @make {
-    static sk_sp<GrFragmentProcessor> Make(GrResourceProvider* resourceProvider,
-                                           const SkRect& circle, float sigma);
+    static std::unique_ptr<GrFragmentProcessor> Make(GrResourceProvider* resourceProvider,
+                                                     const SkRect& circle, float sigma);
 }
 
 @setData(data) {
@@ -256,10 +256,8 @@
         return blurProfile;
     }
 
-    sk_sp<GrFragmentProcessor> GrCircleBlurFragmentProcessor::Make(
-                                                               GrResourceProvider* resourceProvider,
-                                                               const SkRect& circle,
-                                                               float sigma) {
+    std::unique_ptr<GrFragmentProcessor> GrCircleBlurFragmentProcessor::Make(
+            GrResourceProvider* resourceProvider, const SkRect& circle, float sigma) {
         float solidRadius;
         float textureRadius;
         sk_sp<GrTextureProxy> profile(create_profile_texture(resourceProvider, circle, sigma,
@@ -267,11 +265,8 @@
         if (!profile) {
             return nullptr;
         }
-        return sk_sp<GrFragmentProcessor>(new GrCircleBlurFragmentProcessor(circle,
-                                                                            textureRadius,
-                                                                            solidRadius,
-                                                                            std::move(profile),
-                                                                            resourceProvider));
+        return std::unique_ptr<GrFragmentProcessor>(new GrCircleBlurFragmentProcessor(
+                circle, textureRadius, solidRadius, std::move(profile), resourceProvider));
     }
 }
 
@@ -289,4 +284,4 @@
     SkScalar sigma = testData->fRandom->nextRangeF(1.f,10.f);
     SkRect circle = SkRect::MakeWH(wh, wh);
     return GrCircleBlurFragmentProcessor::Make(testData->resourceProvider(), circle, sigma);
-}
\ No newline at end of file
+}
diff --git a/src/effects/GrCircleBlurFragmentProcessor.h b/src/effects/GrCircleBlurFragmentProcessor.h
index 9ef204d..e98714b 100644
--- a/src/effects/GrCircleBlurFragmentProcessor.h
+++ b/src/effects/GrCircleBlurFragmentProcessor.h
@@ -21,10 +21,10 @@
     float textureRadius() const { return fTextureRadius; }
     float solidRadius() const { return fSolidRadius; }
 
-    static sk_sp<GrFragmentProcessor> Make(GrResourceProvider* resourceProvider,
-                                           const SkRect& circle, float sigma);
+    static std::unique_ptr<GrFragmentProcessor> Make(GrResourceProvider* resourceProvider,
+                                                     const SkRect& circle, float sigma);
     GrCircleBlurFragmentProcessor(const GrCircleBlurFragmentProcessor& src);
-    sk_sp<GrFragmentProcessor> clone() const override;
+    std::unique_ptr<GrFragmentProcessor> clone() const override;
     const char* name() const override { return "CircleBlurFragmentProcessor"; }
 
 private:
diff --git a/src/effects/SkAlphaThresholdFilter.cpp b/src/effects/SkAlphaThresholdFilter.cpp
index e46be12..634e6ae 100644
--- a/src/effects/SkAlphaThresholdFilter.cpp
+++ b/src/effects/SkAlphaThresholdFilter.cpp
@@ -173,13 +173,12 @@
         sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(input->getColorSpace(),
                                                                            outProps.colorSpace());
 
-        sk_sp<GrFragmentProcessor> fp(GrAlphaThresholdFragmentProcessor::Make(
-                                            std::move(inputProxy),
-                                            std::move(colorSpaceXform),
-                                            std::move(maskProxy),
-                                            fInnerThreshold,
-                                            fOuterThreshold,
-                                            bounds));
+        auto fp = GrAlphaThresholdFragmentProcessor::Make(std::move(inputProxy),
+                                                          std::move(colorSpaceXform),
+                                                          std::move(maskProxy),
+                                                          fInnerThreshold,
+                                                          fOuterThreshold,
+                                                          bounds);
         if (!fp) {
             return nullptr;
         }
diff --git a/src/effects/SkArithmeticImageFilter.cpp b/src/effects/SkArithmeticImageFilter.cpp
index 41bafb8..34df275 100644
--- a/src/effects/SkArithmeticImageFilter.cpp
+++ b/src/effects/SkArithmeticImageFilter.cpp
@@ -207,9 +207,10 @@
 namespace {
 class ArithmeticFP : public GrFragmentProcessor {
 public:
-    static sk_sp<GrFragmentProcessor> Make(float k1, float k2, float k3, float k4,
-                                           bool enforcePMColor, sk_sp<GrFragmentProcessor> dst) {
-        return sk_sp<GrFragmentProcessor>(
+    static std::unique_ptr<GrFragmentProcessor> Make(float k1, float k2, float k3, float k4,
+                                                     bool enforcePMColor,
+                                                     std::unique_ptr<GrFragmentProcessor> dst) {
+        return std::unique_ptr<GrFragmentProcessor>(
                 new ArithmeticFP(k1, k2, k3, k4, enforcePMColor, std::move(dst)));
     }
 
@@ -223,7 +224,7 @@
         return str;
     }
 
-    sk_sp<GrFragmentProcessor> clone() const override {
+    std::unique_ptr<GrFragmentProcessor> clone() const override {
         return Make(fK1, fK2, fK3, fK4, fEnforcePMColor, this->childProcessor(0).clone());
     }
 
@@ -291,7 +292,7 @@
 
     // This could implement the const input -> const output optimization but it's unlikely to help.
     ArithmeticFP(float k1, float k2, float k3, float k4, bool enforcePMColor,
-                 sk_sp<GrFragmentProcessor> dst)
+                 std::unique_ptr<GrFragmentProcessor> dst)
             : INHERITED(kNone_OptimizationFlags)
             , fK1(k1)
             , fK2(k2)
@@ -313,14 +314,14 @@
 }
 
 #if GR_TEST_UTILS
-sk_sp<GrFragmentProcessor> ArithmeticFP::TestCreate(GrProcessorTestData* d) {
+std::unique_ptr<GrFragmentProcessor> ArithmeticFP::TestCreate(GrProcessorTestData* d) {
     float k1 = d->fRandom->nextF();
     float k2 = d->fRandom->nextF();
     float k3 = d->fRandom->nextF();
     float k4 = d->fRandom->nextF();
     bool enforcePMColor = d->fRandom->nextBool();
 
-    sk_sp<GrFragmentProcessor> dst(GrProcessorUnitTest::MakeChildFP(d));
+    std::unique_ptr<GrFragmentProcessor> dst(GrProcessorUnitTest::MakeChildFP(d));
     return ArithmeticFP::Make(k1, k2, k3, k4, enforcePMColor, std::move(dst));
 }
 #endif
@@ -350,7 +351,7 @@
     }
 
     GrPaint paint;
-    sk_sp<GrFragmentProcessor> bgFP;
+    std::unique_ptr<GrFragmentProcessor> bgFP;
 
     if (backgroundProxy) {
         SkMatrix backgroundMatrix = SkMatrix::MakeTrans(-SkIntToScalar(backgroundOffset.fX),
@@ -371,14 +372,13 @@
                                                         -SkIntToScalar(foregroundOffset.fY));
         sk_sp<GrColorSpaceXform> fgXform =
                 GrColorSpaceXform::Make(foreground->getColorSpace(), outputProperties.colorSpace());
-        sk_sp<GrFragmentProcessor> foregroundFP(GrTextureDomainEffect::Make(
-                                std::move(foregroundProxy), std::move(fgXform),
-                                foregroundMatrix,
-                                GrTextureDomain::MakeTexelDomain(foreground->subset()),
-                                GrTextureDomain::kDecal_Mode, GrSamplerParams::kNone_FilterMode));
+        auto foregroundFP = GrTextureDomainEffect::Make(
+                std::move(foregroundProxy), std::move(fgXform), foregroundMatrix,
+                GrTextureDomain::MakeTexelDomain(foreground->subset()),
+                GrTextureDomain::kDecal_Mode, GrSamplerParams::kNone_FilterMode);
         paint.addColorFragmentProcessor(std::move(foregroundFP));
 
-        sk_sp<GrFragmentProcessor> xferFP =
+        std::unique_ptr<GrFragmentProcessor> xferFP =
                 ArithmeticFP::Make(fK[0], fK[1], fK[2], fK[3], fEnforcePMColor, std::move(bgFP));
 
         // A null 'xferFP' here means kSrc_Mode was used in which case we can just proceed
diff --git a/src/effects/SkBlurMaskFilter.cpp b/src/effects/SkBlurMaskFilter.cpp
index f927cc7..2fc10ed 100644
--- a/src/effects/SkBlurMaskFilter.cpp
+++ b/src/effects/SkBlurMaskFilter.cpp
@@ -769,8 +769,8 @@
 
     const char* name() const override { return "RectBlur"; }
 
-    static sk_sp<GrFragmentProcessor> Make(GrResourceProvider* resourceProvider,
-                                           const SkRect& rect, float sigma) {
+    static std::unique_ptr<GrFragmentProcessor> Make(GrResourceProvider* resourceProvider,
+                                                     const SkRect& rect, float sigma) {
         int doubleProfileSize = SkScalarCeilToInt(12*sigma);
 
         if (doubleProfileSize >= rect.width() || doubleProfileSize >= rect.height()) {
@@ -803,12 +803,12 @@
             precision = kDefault_GrSLPrecision;
         }
 
-        return sk_sp<GrFragmentProcessor>(new GrRectBlurEffect(rect, sigma,
-                                                               std::move(blurProfile), precision));
+        return std::unique_ptr<GrFragmentProcessor>(
+                new GrRectBlurEffect(rect, sigma, std::move(blurProfile), precision));
     }
 
-    sk_sp<GrFragmentProcessor> clone() const override {
-        return sk_sp<GrFragmentProcessor>(new GrRectBlurEffect(
+    std::unique_ptr<GrFragmentProcessor> clone() const override {
+        return std::unique_ptr<GrFragmentProcessor>(new GrRectBlurEffect(
                 fRect, fSigma, sk_ref_sp(fBlurProfileSampler.proxy()), fPrecision));
     }
 
@@ -1009,7 +1009,7 @@
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrRectBlurEffect);
 
 #if GR_TEST_UTILS
-sk_sp<GrFragmentProcessor> GrRectBlurEffect::TestCreate(GrProcessorTestData* d) {
+std::unique_ptr<GrFragmentProcessor> GrRectBlurEffect::TestCreate(GrProcessorTestData* d) {
     float sigma = d->fRandom->nextRangeF(3,8);
     float width = d->fRandom->nextRangeF(200,300);
     float height = d->fRandom->nextRangeF(200,300);
@@ -1039,7 +1039,7 @@
     SkScalar xformedSigma = this->computeXformedSigma(viewMatrix);
 
     GrResourceProvider* resourceProvider = context->resourceProvider();
-    sk_sp<GrFragmentProcessor> fp;
+    std::unique_ptr<GrFragmentProcessor> fp;
 
     SkRect rect;
     if (path.isRect(&rect)) {
@@ -1076,9 +1076,9 @@
 
 class GrRRectBlurEffect : public GrFragmentProcessor {
 public:
-    static sk_sp<GrFragmentProcessor> Make(GrContext*,
-                                           float sigma, float xformedSigma,
-                                           const SkRRect& srcRRect, const SkRRect& devRRect);
+    static std::unique_ptr<GrFragmentProcessor> Make(GrContext*, float sigma, float xformedSigma,
+                                                     const SkRRect& srcRRect,
+                                                     const SkRRect& devRRect);
 
     ~GrRRectBlurEffect() override {}
     const char* name() const override { return "GrRRectBlur"; }
@@ -1086,7 +1086,7 @@
     const SkRRect& getRRect() const { return fRRect; }
     float getSigma() const { return fSigma; }
 
-    sk_sp<GrFragmentProcessor> clone() const override;
+    std::unique_ptr<GrFragmentProcessor> clone() const override;
 
 private:
     GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
@@ -1171,9 +1171,10 @@
     return mask;
 }
 
-sk_sp<GrFragmentProcessor> GrRRectBlurEffect::Make(GrContext* context,
-                                                   float sigma, float xformedSigma,
-                                                   const SkRRect& srcRRect, const SkRRect& devRRect) {
+std::unique_ptr<GrFragmentProcessor> GrRRectBlurEffect::Make(GrContext* context, float sigma,
+                                                             float xformedSigma,
+                                                             const SkRRect& srcRRect,
+                                                             const SkRRect& devRRect) {
     SkASSERT(!devRRect.isCircle() && !devRRect.isRect()); // Should've been caught up-stream
 
     // TODO: loosen this up
@@ -1208,9 +1209,8 @@
         return nullptr;
     }
 
-    return sk_sp<GrFragmentProcessor>(new GrRRectBlurEffect(xformedSigma,
-                                                            devRRect,
-                                                            std::move(mask)));
+    return std::unique_ptr<GrFragmentProcessor>(
+            new GrRRectBlurEffect(xformedSigma, devRRect, std::move(mask)));
 }
 
 GrRRectBlurEffect::GrRRectBlurEffect(float sigma, const SkRRect& rrect,
@@ -1223,8 +1223,8 @@
     this->addTextureSampler(&fNinePatchSampler);
 }
 
-sk_sp<GrFragmentProcessor> GrRRectBlurEffect::clone() const {
-    return sk_sp<GrFragmentProcessor>(
+std::unique_ptr<GrFragmentProcessor> GrRRectBlurEffect::clone() const {
+    return std::unique_ptr<GrFragmentProcessor>(
             new GrRRectBlurEffect(fSigma, fRRect, sk_ref_sp(fNinePatchSampler.proxy())));
 }
 
@@ -1240,7 +1240,7 @@
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrRRectBlurEffect);
 
 #if GR_TEST_UTILS
-sk_sp<GrFragmentProcessor> GrRRectBlurEffect::TestCreate(GrProcessorTestData* d) {
+std::unique_ptr<GrFragmentProcessor> GrRRectBlurEffect::TestCreate(GrProcessorTestData* d) {
     SkScalar w = d->fRandom->nextRangeScalar(100.f, 1000.f);
     SkScalar h = d->fRandom->nextRangeScalar(100.f, 1000.f);
     SkScalar r = d->fRandom->nextRangeF(1.f, 9.f);
@@ -1372,7 +1372,7 @@
     SkScalar xformedSigma = this->computeXformedSigma(viewMatrix);
 
     if (devRRect.isRect() || devRRect.isCircle()) {
-        sk_sp<GrFragmentProcessor> fp;
+        std::unique_ptr<GrFragmentProcessor> fp;
         if (devRRect.isRect()) {
             SkScalar pad = 3.0f * xformedSigma;
             const SkRect dstCoverageRect = devRRect.rect().makeOutset(pad, pad);
@@ -1404,8 +1404,7 @@
         return true;
     }
 
-    sk_sp<GrFragmentProcessor> fp(GrRRectBlurEffect::Make(context, fSigma, xformedSigma,
-                                                          srcRRect, devRRect));
+    auto fp = GrRRectBlurEffect::Make(context, fSigma, xformedSigma, srcRRect, devRRect);
     if (!fp) {
         return false;
     }
diff --git a/src/effects/SkColorMatrixFilter.cpp b/src/effects/SkColorMatrixFilter.cpp
index 0bd6c2c..43a3941 100644
--- a/src/effects/SkColorMatrixFilter.cpp
+++ b/src/effects/SkColorMatrixFilter.cpp
@@ -66,8 +66,8 @@
     Factory getFactory() const override             { return fMatrixFilter->getFactory(); }
 
 #if SK_SUPPORT_GPU
-    sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext* ctx,
-                                                   SkColorSpace* cs) const override {
+    std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrContext* ctx,
+                                                             SkColorSpace* cs) const override {
         return fMatrixFilter->asFragmentProcessor(ctx, cs);
     }
 #endif
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index 626ff9f..ff17af1 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -164,17 +164,15 @@
 #if SK_SUPPORT_GPU
 class GrDisplacementMapEffect : public GrFragmentProcessor {
 public:
-    static sk_sp<GrFragmentProcessor> Make(
-                SkDisplacementMapEffect::ChannelSelectorType xChannelSelector,
-                SkDisplacementMapEffect::ChannelSelectorType yChannelSelector, SkVector scale,
-                sk_sp<GrTextureProxy> displacement, const SkMatrix& offsetMatrix,
-                sk_sp<GrTextureProxy> color,
-                sk_sp<GrColorSpaceXform> colorSpaceXform, const SkISize& colorDimensions) {
-        return sk_sp<GrFragmentProcessor>(
-            new GrDisplacementMapEffect(xChannelSelector, yChannelSelector, scale,
-                                        std::move(displacement),
-                                        offsetMatrix, std::move(color), std::move(colorSpaceXform),
-                                        colorDimensions));
+    static std::unique_ptr<GrFragmentProcessor> Make(
+            SkDisplacementMapEffect::ChannelSelectorType xChannelSelector,
+            SkDisplacementMapEffect::ChannelSelectorType yChannelSelector, SkVector scale,
+            sk_sp<GrTextureProxy> displacement, const SkMatrix& offsetMatrix,
+            sk_sp<GrTextureProxy> color, sk_sp<GrColorSpaceXform> colorSpaceXform,
+            const SkISize& colorDimensions) {
+        return std::unique_ptr<GrFragmentProcessor>(new GrDisplacementMapEffect(
+                xChannelSelector, yChannelSelector, scale, std::move(displacement), offsetMatrix,
+                std::move(color), std::move(colorSpaceXform), colorDimensions));
     }
 
     ~GrDisplacementMapEffect() override;
@@ -191,7 +189,7 @@
     const GrTextureDomain& domain() const { return fDomain; }
     GrColorSpaceXform* colorSpaceXform() const { return fColorSpaceXform.get(); }
 
-    sk_sp<GrFragmentProcessor> clone() const override;
+    std::unique_ptr<GrFragmentProcessor> clone() const override;
 
 private:
     static OptimizationFlags OptimizationFlags(GrPixelConfig colorConfig);
@@ -504,8 +502,8 @@
 
 GrDisplacementMapEffect::~GrDisplacementMapEffect() {}
 
-sk_sp<GrFragmentProcessor> GrDisplacementMapEffect::clone() const {
-    return sk_sp<GrFragmentProcessor>(new GrDisplacementMapEffect(*this));
+std::unique_ptr<GrFragmentProcessor> GrDisplacementMapEffect::clone() const {
+    return std::unique_ptr<GrFragmentProcessor>(new GrDisplacementMapEffect(*this));
 }
 
 bool GrDisplacementMapEffect::onIsEqual(const GrFragmentProcessor& sBase) const {
@@ -520,7 +518,7 @@
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrDisplacementMapEffect);
 
 #if GR_TEST_UTILS
-sk_sp<GrFragmentProcessor> GrDisplacementMapEffect::TestCreate(GrProcessorTestData* d) {
+std::unique_ptr<GrFragmentProcessor> GrDisplacementMapEffect::TestCreate(GrProcessorTestData* d) {
     int texIdxDispl = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx :
                                                GrProcessorUnitTest::kAlphaTextureIdx;
     int texIdxColor = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx :
diff --git a/src/effects/SkHighContrastFilter.cpp b/src/effects/SkHighContrastFilter.cpp
index 6d9853e..3de7603 100644
--- a/src/effects/SkHighContrastFilter.cpp
+++ b/src/effects/SkHighContrastFilter.cpp
@@ -35,7 +35,8 @@
     ~SkHighContrast_Filter() override {}
 
 #if SK_SUPPORT_GPU
-    sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override;
+    std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrContext*,
+                                                             SkColorSpace*) const override;
  #endif
 
     void onAppendStages(SkRasterPipeline* p,
@@ -166,15 +167,15 @@
 #if SK_SUPPORT_GPU
 class HighContrastFilterEffect : public GrFragmentProcessor {
 public:
-    static sk_sp<GrFragmentProcessor> Make(const SkHighContrastConfig& config) {
-        return sk_sp<GrFragmentProcessor>(new HighContrastFilterEffect(config));
+    static std::unique_ptr<GrFragmentProcessor> Make(const SkHighContrastConfig& config) {
+        return std::unique_ptr<GrFragmentProcessor>(new HighContrastFilterEffect(config));
     }
 
     const char* name() const override { return "HighContrastFilter"; }
 
     const SkHighContrastConfig& config() const { return fConfig; }
 
-    sk_sp<GrFragmentProcessor> clone() const override { return Make(fConfig); }
+    std::unique_ptr<GrFragmentProcessor> clone() const override { return Make(fConfig); }
 
 private:
     HighContrastFilterEffect(const SkHighContrastConfig& config)
@@ -353,7 +354,8 @@
     fragBuilder->codeAppendf("%s = color;", args.fOutputColor);
 }
 
-sk_sp<GrFragmentProcessor> SkHighContrast_Filter::asFragmentProcessor(GrContext*, SkColorSpace*) const {
+std::unique_ptr<GrFragmentProcessor> SkHighContrast_Filter::asFragmentProcessor(
+        GrContext*, SkColorSpace*) const {
     return HighContrastFilterEffect::Make(fConfig);
 }
 #endif
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
index 817f96f..fa02104 100644
--- a/src/effects/SkLightingImageFilter.cpp
+++ b/src/effects/SkLightingImageFilter.cpp
@@ -411,10 +411,11 @@
                                          const SkIRect& bounds,
                                          const SkMatrix& matrix,
                                          const OutputProperties& outputProperties) const;
-    virtual sk_sp<GrFragmentProcessor> makeFragmentProcessor(sk_sp<GrTextureProxy>,
-                                                             const SkMatrix&,
-                                                             const SkIRect* srcBounds,
-                                                             BoundaryMode boundaryMode) const = 0;
+    virtual std::unique_ptr<GrFragmentProcessor> makeFragmentProcessor(
+            sk_sp<GrTextureProxy>,
+            const SkMatrix&,
+            const SkIRect* srcBounds,
+            BoundaryMode boundaryMode) const = 0;
 #endif
 private:
 #if SK_SUPPORT_GPU
@@ -442,9 +443,7 @@
     SkRect srcRect = dstRect.makeOffset(SkIntToScalar(bounds.x()), SkIntToScalar(bounds.y()));
     GrPaint paint;
     paint.setGammaCorrect(renderTargetContext->isGammaCorrect());
-    sk_sp<GrFragmentProcessor> fp(this->makeFragmentProcessor(std::move(srcProxy),
-                                                              matrix, srcBounds,
-                                                              boundaryMode));
+    auto fp = this->makeFragmentProcessor(std::move(srcProxy), matrix, srcBounds, boundaryMode);
     paint.addColorFragmentProcessor(std::move(fp));
     paint.setPorterDuffXPFactory(SkBlendMode::kSrc);
     renderTargetContext->fillRectToRect(clip, std::move(paint), GrAA::kNo, SkMatrix::I(), dstRect,
@@ -541,9 +540,10 @@
     sk_sp<SkImageFilter> onMakeColorSpace(SkColorSpaceXformer*) const override;
 
 #if SK_SUPPORT_GPU
-    sk_sp<GrFragmentProcessor> makeFragmentProcessor(sk_sp<GrTextureProxy>,
-                                                     const SkMatrix&, const SkIRect* bounds,
-                                                     BoundaryMode) const override;
+    std::unique_ptr<GrFragmentProcessor> makeFragmentProcessor(sk_sp<GrTextureProxy>,
+                                                               const SkMatrix&,
+                                                               const SkIRect* bounds,
+                                                               BoundaryMode) const override;
 #endif
 
 private:
@@ -578,9 +578,10 @@
     sk_sp<SkImageFilter> onMakeColorSpace(SkColorSpaceXformer*) const override;
 
 #if SK_SUPPORT_GPU
-    sk_sp<GrFragmentProcessor> makeFragmentProcessor(sk_sp<GrTextureProxy>,
-                                                     const SkMatrix&, const SkIRect* bounds,
-                                                     BoundaryMode) const override;
+    std::unique_ptr<GrFragmentProcessor> makeFragmentProcessor(sk_sp<GrTextureProxy>,
+                                                               const SkMatrix&,
+                                                               const SkIRect* bounds,
+                                                               BoundaryMode) const override;
 #endif
 
 private:
@@ -623,22 +624,22 @@
 
 class GrDiffuseLightingEffect : public GrLightingEffect {
 public:
-    static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy,
-                                           sk_sp<const SkImageFilterLight> light,
-                                           SkScalar surfaceScale,
-                                           const SkMatrix& matrix,
-                                           SkScalar kd,
-                                           BoundaryMode boundaryMode,
-                                           const SkIRect* srcBounds) {
-        return sk_sp<GrFragmentProcessor>(
+    static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy,
+                                                     sk_sp<const SkImageFilterLight> light,
+                                                     SkScalar surfaceScale,
+                                                     const SkMatrix& matrix,
+                                                     SkScalar kd,
+                                                     BoundaryMode boundaryMode,
+                                                     const SkIRect* srcBounds) {
+        return std::unique_ptr<GrFragmentProcessor>(
                 new GrDiffuseLightingEffect(std::move(proxy), std::move(light), surfaceScale,
                                             matrix, kd, boundaryMode, srcBounds));
     }
 
     const char* name() const override { return "DiffuseLighting"; }
 
-    sk_sp<GrFragmentProcessor> clone() const override {
-        return sk_sp<GrFragmentProcessor>(new GrDiffuseLightingEffect(*this));
+    std::unique_ptr<GrFragmentProcessor> clone() const override {
+        return std::unique_ptr<GrFragmentProcessor>(new GrDiffuseLightingEffect(*this));
     }
 
     SkScalar kd() const { return fKD; }
@@ -668,23 +669,23 @@
 
 class GrSpecularLightingEffect : public GrLightingEffect {
 public:
-    static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy,
-                                           sk_sp<const SkImageFilterLight> light,
-                                           SkScalar surfaceScale,
-                                           const SkMatrix& matrix,
-                                           SkScalar ks,
-                                           SkScalar shininess,
-                                           BoundaryMode boundaryMode,
-                                           const SkIRect* srcBounds) {
-        return sk_sp<GrFragmentProcessor>(
+    static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy,
+                                                     sk_sp<const SkImageFilterLight> light,
+                                                     SkScalar surfaceScale,
+                                                     const SkMatrix& matrix,
+                                                     SkScalar ks,
+                                                     SkScalar shininess,
+                                                     BoundaryMode boundaryMode,
+                                                     const SkIRect* srcBounds) {
+        return std::unique_ptr<GrFragmentProcessor>(
                 new GrSpecularLightingEffect(std::move(proxy), std::move(light), surfaceScale,
                                              matrix, ks, shininess, boundaryMode, srcBounds));
     }
 
     const char* name() const override { return "SpecularLighting"; }
 
-    sk_sp<GrFragmentProcessor> clone() const override {
-        return sk_sp<GrSpecularLightingEffect>(new GrSpecularLightingEffect(*this));
+    std::unique_ptr<GrFragmentProcessor> clone() const override {
+        return std::unique_ptr<GrFragmentProcessor>(new GrSpecularLightingEffect(*this));
     }
 
     GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
@@ -1373,11 +1374,11 @@
 #endif
 
 #if SK_SUPPORT_GPU
-sk_sp<GrFragmentProcessor> SkDiffuseLightingImageFilter::makeFragmentProcessor(
-                                                   sk_sp<GrTextureProxy> proxy,
-                                                   const SkMatrix& matrix,
-                                                   const SkIRect* srcBounds,
-                                                   BoundaryMode boundaryMode) const {
+std::unique_ptr<GrFragmentProcessor> SkDiffuseLightingImageFilter::makeFragmentProcessor(
+        sk_sp<GrTextureProxy> proxy,
+        const SkMatrix& matrix,
+        const SkIRect* srcBounds,
+        BoundaryMode boundaryMode) const {
     SkScalar scale = this->surfaceScale() * 255;
     return GrDiffuseLightingEffect::Make(std::move(proxy), this->refLight(), scale, matrix,
                                          this->kd(), boundaryMode, srcBounds);
@@ -1529,11 +1530,11 @@
 #endif
 
 #if SK_SUPPORT_GPU
-sk_sp<GrFragmentProcessor> SkSpecularLightingImageFilter::makeFragmentProcessor(
-                                                    sk_sp<GrTextureProxy> proxy,
-                                                    const SkMatrix& matrix,
-                                                    const SkIRect* srcBounds,
-                                                    BoundaryMode boundaryMode) const {
+std::unique_ptr<GrFragmentProcessor> SkSpecularLightingImageFilter::makeFragmentProcessor(
+        sk_sp<GrTextureProxy> proxy,
+        const SkMatrix& matrix,
+        const SkIRect* srcBounds,
+        BoundaryMode boundaryMode) const {
     SkScalar scale = this->surfaceScale() * 255;
     return GrSpecularLightingEffect::Make(std::move(proxy), this->refLight(), scale, matrix,
                                           this->ks(), this->shininess(), boundaryMode, srcBounds);
@@ -1794,7 +1795,7 @@
     }
 }
 
-sk_sp<GrFragmentProcessor> GrDiffuseLightingEffect::TestCreate(GrProcessorTestData* d) {
+std::unique_ptr<GrFragmentProcessor> GrDiffuseLightingEffect::TestCreate(GrProcessorTestData* d) {
     int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
                                         : GrProcessorUnitTest::kAlphaTextureIdx;
     sk_sp<GrTextureProxy> proxy = d->textureProxy(texIdx);
@@ -2020,7 +2021,7 @@
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSpecularLightingEffect);
 
 #if GR_TEST_UTILS
-sk_sp<GrFragmentProcessor> GrSpecularLightingEffect::TestCreate(GrProcessorTestData* d) {
+std::unique_ptr<GrFragmentProcessor> GrSpecularLightingEffect::TestCreate(GrProcessorTestData* d) {
     int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
                                         : GrProcessorUnitTest::kAlphaTextureIdx;
     sk_sp<GrTextureProxy> proxy = d->textureProxy(texIdx);
diff --git a/src/effects/SkLumaColorFilter.cpp b/src/effects/SkLumaColorFilter.cpp
index 2a065b3..4422733 100644
--- a/src/effects/SkLumaColorFilter.cpp
+++ b/src/effects/SkLumaColorFilter.cpp
@@ -45,13 +45,13 @@
 #if SK_SUPPORT_GPU
 class LumaColorFilterEffect : public GrFragmentProcessor {
 public:
-    static sk_sp<GrFragmentProcessor> Make() {
-        return sk_sp<GrFragmentProcessor>(new LumaColorFilterEffect);
+    static std::unique_ptr<GrFragmentProcessor> Make() {
+        return std::unique_ptr<GrFragmentProcessor>(new LumaColorFilterEffect);
     }
 
     const char* name() const override { return "Luminance-to-Alpha"; }
 
-    sk_sp<GrFragmentProcessor> clone() const override { return Make(); }
+    std::unique_ptr<GrFragmentProcessor> clone() const override { return Make(); }
 
 private:
     class GLSLProcessor : public GrGLSLFragmentProcessor {
@@ -103,7 +103,8 @@
     typedef GrFragmentProcessor INHERITED;
 };
 
-sk_sp<GrFragmentProcessor> SkLumaColorFilter::asFragmentProcessor(GrContext*, SkColorSpace*) const {
+std::unique_ptr<GrFragmentProcessor> SkLumaColorFilter::asFragmentProcessor(GrContext*,
+                                                                            SkColorSpace*) const {
     return LumaColorFilterEffect::Make();
 }
 #endif
diff --git a/src/effects/SkMagnifierImageFilter.cpp b/src/effects/SkMagnifierImageFilter.cpp
index 7b03307..ba01969 100644
--- a/src/effects/SkMagnifierImageFilter.cpp
+++ b/src/effects/SkMagnifierImageFilter.cpp
@@ -49,27 +49,25 @@
 #if SK_SUPPORT_GPU
 class GrMagnifierEffect : public GrFragmentProcessor {
 public:
-    static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy,
-                                           sk_sp<GrColorSpaceXform> colorSpaceXform,
-                                           const SkIRect& bounds,
-                                           const SkRect& srcRect,
-                                           float xInvZoom,
-                                           float yInvZoom,
-                                           float xInvInset,
-                                           float yInvInset) {
-        return sk_sp<GrFragmentProcessor>(new GrMagnifierEffect(std::move(proxy),
-                                                                std::move(colorSpaceXform),
-                                                                bounds, srcRect,
-                                                                xInvZoom, yInvZoom,
-                                                                xInvInset, yInvInset));
+    static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy,
+                                                     sk_sp<GrColorSpaceXform> colorSpaceXform,
+                                                     const SkIRect& bounds,
+                                                     const SkRect& srcRect,
+                                                     float xInvZoom,
+                                                     float yInvZoom,
+                                                     float xInvInset,
+                                                     float yInvInset) {
+        return std::unique_ptr<GrFragmentProcessor>(
+                new GrMagnifierEffect(std::move(proxy), std::move(colorSpaceXform), bounds, srcRect,
+                                      xInvZoom, yInvZoom, xInvInset, yInvInset));
     }
 
     ~GrMagnifierEffect() override {}
 
     const char* name() const override { return "Magnifier"; }
 
-    sk_sp<GrFragmentProcessor> clone() const override {
-        return sk_sp<GrFragmentProcessor>(new GrMagnifierEffect(*this));
+    std::unique_ptr<GrFragmentProcessor> clone() const override {
+        return std::unique_ptr<GrFragmentProcessor>(new GrMagnifierEffect(*this));
     }
 
     SkString dumpInfo() const override {
@@ -285,7 +283,7 @@
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMagnifierEffect);
 
 #if GR_TEST_UTILS
-sk_sp<GrFragmentProcessor> GrMagnifierEffect::TestCreate(GrProcessorTestData* d) {
+std::unique_ptr<GrFragmentProcessor> GrMagnifierEffect::TestCreate(GrProcessorTestData* d) {
     sk_sp<GrTextureProxy> proxy = d->textureProxy(0);
     const int kMaxWidth = 200;
     const int kMaxHeight = 200;
@@ -298,15 +296,14 @@
     SkIRect bounds = SkIRect::MakeWH(SkIntToScalar(kMaxWidth), SkIntToScalar(kMaxHeight));
     SkRect srcRect = SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(height));
 
-    sk_sp<GrFragmentProcessor> effect(GrMagnifierEffect::Make(
-        std::move(proxy),
-        std::move(colorSpaceXform),
-        bounds,
-        srcRect,
-        srcRect.width() / bounds.width(),
-        srcRect.height() / bounds.height(),
-        bounds.width() / inset,
-        bounds.height() / inset));
+    auto effect = GrMagnifierEffect::Make(std::move(proxy),
+                                          std::move(colorSpaceXform),
+                                          bounds,
+                                          srcRect,
+                                          srcRect.width() / bounds.width(),
+                                          srcRect.height() / bounds.height(),
+                                          bounds.width() / inset,
+                                          bounds.height() / inset);
     SkASSERT(effect);
     return effect;
 }
@@ -388,15 +385,14 @@
         SkColorSpace* dstColorSpace = ctx.outputProperties().colorSpace();
         sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(input->getColorSpace(),
                                                                            dstColorSpace);
-        sk_sp<GrFragmentProcessor> fp(GrMagnifierEffect::Make(
-                                                        std::move(inputProxy),
-                                                        std::move(colorSpaceXform),
-                                                        bounds,
-                                                        fSrcRect,
-                                                        invXZoom,
-                                                        invYZoom,
-                                                        bounds.width() * invInset,
-                                                        bounds.height() * invInset));
+        auto fp = GrMagnifierEffect::Make(std::move(inputProxy),
+                                          std::move(colorSpaceXform),
+                                          bounds,
+                                          fSrcRect,
+                                          invXZoom,
+                                          invYZoom,
+                                          bounds.width() * invInset,
+                                          bounds.height() * invInset);
         if (!fp) {
             return nullptr;
         }
diff --git a/src/effects/SkMatrixConvolutionImageFilter.cpp b/src/effects/SkMatrixConvolutionImageFilter.cpp
index b94ece5..ce84f3e 100644
--- a/src/effects/SkMatrixConvolutionImageFilter.cpp
+++ b/src/effects/SkMatrixConvolutionImageFilter.cpp
@@ -316,15 +316,15 @@
         offset->fY = bounds.top();
         bounds.offset(-inputOffset);
 
-        sk_sp<GrFragmentProcessor> fp(GrMatrixConvolutionEffect::Make(std::move(inputProxy),
-                                                                      bounds,
-                                                                      fKernelSize,
-                                                                      fKernel,
-                                                                      fGain,
-                                                                      fBias,
-                                                                      fKernelOffset,
-                                                                      convert_tilemodes(fTileMode),
-                                                                      fConvolveAlpha));
+        auto fp = GrMatrixConvolutionEffect::Make(std::move(inputProxy),
+                                                  bounds,
+                                                  fKernelSize,
+                                                  fKernel,
+                                                  fGain,
+                                                  fBias,
+                                                  fKernelOffset,
+                                                  convert_tilemodes(fTileMode),
+                                                  fConvolveAlpha);
         if (!fp) {
             return nullptr;
         }
diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
index a29bca3..1585c9d 100644
--- a/src/effects/SkMorphologyImageFilter.cpp
+++ b/src/effects/SkMorphologyImageFilter.cpp
@@ -142,16 +142,16 @@
     enum class Direction { kX, kY };
     enum class Type { kErode, kDilate };
 
-    static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, Direction dir, int radius,
-                                           Type type) {
-        return sk_sp<GrFragmentProcessor>(
+    static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, Direction dir,
+                                                     int radius, Type type) {
+        return std::unique_ptr<GrFragmentProcessor>(
                 new GrMorphologyEffect(std::move(proxy), dir, radius, type, nullptr));
     }
 
-    static sk_sp<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, Direction dir, int radius,
-                                           Type type, const float bounds[2]) {
-        return sk_sp<GrFragmentProcessor>(new GrMorphologyEffect(std::move(proxy),
-                                                                 dir, radius, type, bounds));
+    static std::unique_ptr<GrFragmentProcessor> Make(sk_sp<GrTextureProxy> proxy, Direction dir,
+                                                     int radius, Type type, const float bounds[2]) {
+        return std::unique_ptr<GrFragmentProcessor>(
+                new GrMorphologyEffect(std::move(proxy), dir, radius, type, bounds));
     }
 
     Type type() const { return fType; }
@@ -163,8 +163,8 @@
 
     const char* name() const override { return "Morphology"; }
 
-    sk_sp<GrFragmentProcessor> clone() const override {
-        return sk_sp<GrFragmentProcessor>(new GrMorphologyEffect(*this));
+    std::unique_ptr<GrFragmentProcessor> clone() const override {
+        return std::unique_ptr<GrFragmentProcessor>(new GrMorphologyEffect(*this));
     }
 
 private:
@@ -382,7 +382,7 @@
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMorphologyEffect);
 
 #if GR_TEST_UTILS
-sk_sp<GrFragmentProcessor> GrMorphologyEffect::TestCreate(GrProcessorTestData* d) {
+std::unique_ptr<GrFragmentProcessor> GrMorphologyEffect::TestCreate(GrProcessorTestData* d) {
     int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
                                         : GrProcessorUnitTest::kAlphaTextureIdx;
     sk_sp<GrTextureProxy> proxy = d->textureProxy(texIdx);
diff --git a/src/effects/SkOverdrawColorFilter.cpp b/src/effects/SkOverdrawColorFilter.cpp
index 4eb9bfc..8ca699e 100644
--- a/src/effects/SkOverdrawColorFilter.cpp
+++ b/src/effects/SkOverdrawColorFilter.cpp
@@ -73,12 +73,12 @@
 
 class OverdrawFragmentProcessor : public GrFragmentProcessor {
 public:
-    static sk_sp<GrFragmentProcessor> Make(const SkPMColor* colors);
+    static std::unique_ptr<GrFragmentProcessor> Make(const SkPMColor* colors);
 
     const char* name() const override { return "Overdraw"; }
 
-    sk_sp<GrFragmentProcessor> clone() const override {
-        return sk_sp<GrFragmentProcessor>(new OverdrawFragmentProcessor(fColors));
+    std::unique_ptr<GrFragmentProcessor> clone() const override {
+        return std::unique_ptr<GrFragmentProcessor>(new OverdrawFragmentProcessor(fColors));
     }
 
 private:
@@ -108,12 +108,12 @@
     typedef GrGLSLFragmentProcessor INHERITED;
 };
 
-sk_sp<GrFragmentProcessor> SkOverdrawColorFilter::asFragmentProcessor(GrContext*,
-                                                                      SkColorSpace*) const {
+std::unique_ptr<GrFragmentProcessor> SkOverdrawColorFilter::asFragmentProcessor(
+        GrContext*, SkColorSpace*) const {
     return OverdrawFragmentProcessor::Make(fColors);
 }
 
-sk_sp<GrFragmentProcessor> OverdrawFragmentProcessor::Make(const SkPMColor* colors) {
+std::unique_ptr<GrFragmentProcessor> OverdrawFragmentProcessor::Make(const SkPMColor* colors) {
     GrColor4f grColors[SkOverdrawColorFilter::kNumColors];
     for (int i = 0; i < SkOverdrawColorFilter::kNumColors; i++) {
         grColors[i] = GrColor4f::FromGrColor(GrColorPackRGBA(SkGetPackedR32(colors[i]),
@@ -122,7 +122,7 @@
                                                              SkGetPackedA32(colors[i])));
     }
 
-    return sk_sp<GrFragmentProcessor>(new OverdrawFragmentProcessor(grColors));
+    return std::unique_ptr<GrFragmentProcessor>(new OverdrawFragmentProcessor(grColors));
 }
 
 // This could implement the constant input -> constant output optimization, but we don't really
diff --git a/src/effects/SkOverdrawColorFilter.h b/src/effects/SkOverdrawColorFilter.h
index 2840a09..0948f70 100644
--- a/src/effects/SkOverdrawColorFilter.h
+++ b/src/effects/SkOverdrawColorFilter.h
@@ -28,7 +28,8 @@
     }
 
 #if SK_SUPPORT_GPU
-    sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override;
+    std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrContext*,
+                                                             SkColorSpace*) const override;
 #endif
 
     void toString(SkString* str) const override;
diff --git a/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp b/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp
index 8b1856a..2f045f1 100644
--- a/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp
+++ b/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp
@@ -204,15 +204,16 @@
         kSimpleCircular_Mode,
     };
 
-    static sk_sp<GrFragmentProcessor> Make(const SkRRect& first, const SkRRect& second,
-                                           SkScalar radius) {
-        return sk_sp<GrFragmentProcessor>(new RRectsGaussianEdgeFP(first, second, radius));
+    static std::unique_ptr<GrFragmentProcessor> Make(const SkRRect& first, const SkRRect& second,
+                                                     SkScalar radius) {
+        return std::unique_ptr<GrFragmentProcessor>(
+                new RRectsGaussianEdgeFP(first, second, radius));
     }
 
     const char* name() const override { return "RRectsGaussianEdgeFP"; }
 
-    sk_sp<GrFragmentProcessor> clone() const override {
-        return sk_sp<GrFragmentProcessor>(new RRectsGaussianEdgeFP(*this));
+    std::unique_ptr<GrFragmentProcessor> clone() const override {
+        return std::unique_ptr<GrFragmentProcessor>(new RRectsGaussianEdgeFP(*this));
     }
 
     const SkRRect& first() const { return fFirst; }
diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp
index 0fb9109..2101bd6 100644
--- a/src/effects/SkTableColorFilter.cpp
+++ b/src/effects/SkTableColorFilter.cpp
@@ -86,7 +86,8 @@
     sk_sp<SkColorFilter> makeComposed(sk_sp<SkColorFilter> inner) const override;
 
 #if SK_SUPPORT_GPU
-    sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override;
+    std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrContext*,
+                                                             SkColorSpace*) const override;
 #endif
 
     SK_TO_STRING_OVERRIDE()
@@ -330,7 +331,7 @@
 
 class ColorTableEffect : public GrFragmentProcessor {
 public:
-    static sk_sp<GrFragmentProcessor> Make(GrContext* context, const SkBitmap& bitmap);
+    static std::unique_ptr<GrFragmentProcessor> Make(GrContext* context, const SkBitmap& bitmap);
 
     ~ColorTableEffect() override;
 
@@ -339,7 +340,7 @@
     const GrTextureStripAtlas* atlas() const { return fAtlas; }
     int atlasRow() const { return fRow; }
 
-    sk_sp<GrFragmentProcessor> clone() const override;
+    std::unique_ptr<GrFragmentProcessor> clone() const override;
 
 private:
     GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
@@ -443,7 +444,8 @@
 }
 
 ///////////////////////////////////////////////////////////////////////////////
-sk_sp<GrFragmentProcessor> ColorTableEffect::Make(GrContext* context, const SkBitmap& bitmap) {
+std::unique_ptr<GrFragmentProcessor> ColorTableEffect::Make(GrContext* context,
+                                                            const SkBitmap& bitmap) {
     GrTextureStripAtlas::Desc desc;
     desc.fWidth  = bitmap.width();
     desc.fHeight = 128;
@@ -467,7 +469,7 @@
         return nullptr;
     }
 
-    return sk_sp<GrFragmentProcessor>(new ColorTableEffect(std::move(proxy), atlas, row));
+    return std::unique_ptr<GrFragmentProcessor>(new ColorTableEffect(std::move(proxy), atlas, row));
 }
 
 ColorTableEffect::ColorTableEffect(sk_sp<GrTextureProxy> proxy, GrTextureStripAtlas* atlas, int row)
@@ -485,9 +487,9 @@
     }
 }
 
-sk_sp<GrFragmentProcessor> ColorTableEffect::clone() const {
+std::unique_ptr<GrFragmentProcessor> ColorTableEffect::clone() const {
     fAtlas->lockRow(fRow);
-    return sk_sp<GrFragmentProcessor>(
+    return std::unique_ptr<GrFragmentProcessor>(
             new ColorTableEffect(sk_ref_sp(fTextureSampler.proxy()), fAtlas, fRow));
 }
 
@@ -515,7 +517,7 @@
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(ColorTableEffect);
 
 #if GR_TEST_UTILS
-sk_sp<GrFragmentProcessor> ColorTableEffect::TestCreate(GrProcessorTestData* d) {
+std::unique_ptr<GrFragmentProcessor> ColorTableEffect::TestCreate(GrProcessorTestData* d) {
     int flags = 0;
     uint8_t luts[256][4];
     do {
@@ -537,14 +539,14 @@
         (flags & (1 << 3)) ? luts[3] : nullptr
     ));
     sk_sp<SkColorSpace> colorSpace = GrTest::TestColorSpace(d->fRandom);
-    sk_sp<GrFragmentProcessor> fp = filter->asFragmentProcessor(d->context(), colorSpace.get());
+    auto fp = filter->asFragmentProcessor(d->context(), colorSpace.get());
     SkASSERT(fp);
     return fp;
 }
 #endif
 
-sk_sp<GrFragmentProcessor> SkTable_ColorFilter::asFragmentProcessor(GrContext* context,
-                                                                    SkColorSpace*) const {
+std::unique_ptr<GrFragmentProcessor> SkTable_ColorFilter::asFragmentProcessor(GrContext* context,
+                                                                              SkColorSpace*) const {
     SkBitmap bitmap;
     this->asComponentTable(&bitmap);
 
diff --git a/src/effects/SkToSRGBColorFilter.cpp b/src/effects/SkToSRGBColorFilter.cpp
index f2ffc08..150877f 100644
--- a/src/effects/SkToSRGBColorFilter.cpp
+++ b/src/effects/SkToSRGBColorFilter.cpp
@@ -86,8 +86,8 @@
 #endif
 
 #if SK_SUPPORT_GPU
-sk_sp<GrFragmentProcessor> SkToSRGBColorFilter::asFragmentProcessor(GrContext*,
-                                                                    SkColorSpace*) const {
+std::unique_ptr<GrFragmentProcessor> SkToSRGBColorFilter::asFragmentProcessor(GrContext*,
+                                                                              SkColorSpace*) const {
     return GrNonlinearColorSpaceXformEffect::Make(fSrcColorSpace.get(),
                                                   SkColorSpace::MakeSRGB().get());
 }
diff --git a/src/effects/SkXfermodeImageFilter.cpp b/src/effects/SkXfermodeImageFilter.cpp
index f0c70a2..e1033cf 100644
--- a/src/effects/SkXfermodeImageFilter.cpp
+++ b/src/effects/SkXfermodeImageFilter.cpp
@@ -54,7 +54,8 @@
 
     void drawForeground(SkCanvas* canvas, SkSpecialImage*, const SkIRect&) const;
 #if SK_SUPPORT_GPU
-    sk_sp<GrFragmentProcessor> makeFGFrag(sk_sp<GrFragmentProcessor> bgFP) const;
+    std::unique_ptr<GrFragmentProcessor> makeFGFrag(
+            std::unique_ptr<GrFragmentProcessor> bgFP) const;
 #endif
 
 private:
@@ -243,7 +244,7 @@
     }
 
     GrPaint paint;
-    sk_sp<GrFragmentProcessor> bgFP;
+    std::unique_ptr<GrFragmentProcessor> bgFP;
 
     if (backgroundProxy) {
         SkMatrix bgMatrix = SkMatrix::MakeTrans(-SkIntToScalar(backgroundOffset.fX),
@@ -266,15 +267,13 @@
                                                 -SkIntToScalar(foregroundOffset.fY));
         sk_sp<GrColorSpaceXform> fgXform = GrColorSpaceXform::Make(foreground->getColorSpace(),
                                                                    outputProperties.colorSpace());
-        sk_sp<GrFragmentProcessor> foregroundFP(GrTextureDomainEffect::Make(
-                                        std::move(foregroundProxy),
-                                        std::move(fgXform), fgMatrix,
-                                        GrTextureDomain::MakeTexelDomain(foreground->subset()),
-                                        GrTextureDomain::kDecal_Mode,
-                                        GrSamplerParams::kNone_FilterMode));
+        auto foregroundFP = GrTextureDomainEffect::Make(
+                std::move(foregroundProxy), std::move(fgXform), fgMatrix,
+                GrTextureDomain::MakeTexelDomain(foreground->subset()),
+                GrTextureDomain::kDecal_Mode, GrSamplerParams::kNone_FilterMode);
         paint.addColorFragmentProcessor(std::move(foregroundFP));
 
-        sk_sp<GrFragmentProcessor> xferFP = this->makeFGFrag(std::move(bgFP));
+        std::unique_ptr<GrFragmentProcessor> xferFP = this->makeFGFrag(std::move(bgFP));
 
         // A null 'xferFP' here means kSrc_Mode was used in which case we can just proceed
         if (xferFP) {
@@ -307,8 +306,8 @@
                                                renderTargetContext->refColorSpace());
 }
 
-sk_sp<GrFragmentProcessor>
-SkXfermodeImageFilter_Base::makeFGFrag(sk_sp<GrFragmentProcessor> bgFP) const {
+std::unique_ptr<GrFragmentProcessor> SkXfermodeImageFilter_Base::makeFGFrag(
+        std::unique_ptr<GrFragmentProcessor> bgFP) const {
     return GrXfermodeFragmentProcessor::MakeFromDstProcessor(std::move(bgFP), fMode);
 }