| Index: src/effects/SkPerlinNoiseShader.cpp | 
| diff --git a/src/effects/SkPerlinNoiseShader.cpp b/src/effects/SkPerlinNoiseShader.cpp | 
| index d2d460648f4f6f239c78fd5f9f56ae1fa27f1585..1400905bfe61d42c26839599bb8af4faa8d3939f 100644 | 
| --- a/src/effects/SkPerlinNoiseShader.cpp | 
| +++ b/src/effects/SkPerlinNoiseShader.cpp | 
| @@ -495,13 +495,14 @@ private: | 
|  | 
| class GrPerlinNoiseEffect : public GrFragmentProcessor { | 
| public: | 
| -    static GrFragmentProcessor* Create(SkPerlinNoiseShader::Type type, | 
| -                                       int numOctaves, bool stitchTiles, | 
| -                                       SkPerlinNoiseShader::PaintingData* paintingData, | 
| -                                       GrTexture* permutationsTexture, GrTexture* noiseTexture, | 
| -                                       const SkMatrix& matrix) { | 
| -        return new GrPerlinNoiseEffect(type, numOctaves, stitchTiles, paintingData, | 
| -                                       permutationsTexture, noiseTexture, matrix); | 
| +    static sk_sp<GrFragmentProcessor> Make(SkPerlinNoiseShader::Type type, | 
| +                                           int numOctaves, bool stitchTiles, | 
| +                                           SkPerlinNoiseShader::PaintingData* paintingData, | 
| +                                           GrTexture* permutationsTexture, GrTexture* noiseTexture, | 
| +                                           const SkMatrix& matrix) { | 
| +        return sk_sp<GrFragmentProcessor>( | 
| +            new GrPerlinNoiseEffect(type, numOctaves, stitchTiles, paintingData, | 
| +                                    permutationsTexture, noiseTexture, matrix)); | 
| } | 
|  | 
| virtual ~GrPerlinNoiseEffect() { delete fPaintingData; } | 
| @@ -574,7 +575,7 @@ private: | 
| ///////////////////////////////////////////////////////////////////// | 
| GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrPerlinNoiseEffect); | 
|  | 
| -const GrFragmentProcessor* GrPerlinNoiseEffect::TestCreate(GrProcessorTestData* d) { | 
| +sk_sp<GrFragmentProcessor> GrPerlinNoiseEffect::TestCreate(GrProcessorTestData* d) { | 
| int      numOctaves = d->fRandom->nextRangeU(2, 10); | 
| bool     stitchTiles = d->fRandom->nextBool(); | 
| SkScalar seed = SkIntToScalar(d->fRandom->nextU()); | 
| @@ -892,7 +893,7 @@ void GrGLPerlinNoise::onSetData(const GrGLSLProgramDataManager& pdman, | 
| } | 
|  | 
| ///////////////////////////////////////////////////////////////////// | 
| -const GrFragmentProcessor* SkPerlinNoiseShader::asFragmentProcessor( | 
| +sk_sp<GrFragmentProcessor> SkPerlinNoiseShader::asFragmentProcessor( | 
| GrContext* context, | 
| const SkMatrix& viewM, | 
| const SkMatrix* externalLocalMatrix, | 
| @@ -911,13 +912,13 @@ const GrFragmentProcessor* SkPerlinNoiseShader::asFragmentProcessor( | 
| if (0 == fNumOctaves) { | 
| if (kFractalNoise_Type == fType) { | 
| // Extract the incoming alpha and emit rgba = (a/4, a/4, a/4, a/2) | 
| -            SkAutoTUnref<const GrFragmentProcessor> inner( | 
| -                GrConstColorProcessor::Create(0x80404040, | 
| -                                              GrConstColorProcessor::kModulateRGBA_InputMode)); | 
| -            return GrFragmentProcessor::MulOutputByInputAlpha(inner); | 
| +            sk_sp<GrFragmentProcessor> inner( | 
| +                GrConstColorProcessor::Make(0x80404040, | 
| +                                            GrConstColorProcessor::kModulateRGBA_InputMode)); | 
| +            return GrFragmentProcessor::MulOutputByInputAlpha(std::move(inner)); | 
| } | 
| // Emit zero. | 
| -        return GrConstColorProcessor::Create(0x0, GrConstColorProcessor::kIgnore_InputMode); | 
| +        return GrConstColorProcessor::Make(0x0, GrConstColorProcessor::kIgnore_InputMode); | 
| } | 
|  | 
| // Either we don't stitch tiles, either we have a valid tile size | 
| @@ -936,14 +937,14 @@ const GrFragmentProcessor* SkPerlinNoiseShader::asFragmentProcessor( | 
| m.setTranslateX(-localMatrix.getTranslateX() + SK_Scalar1); | 
| m.setTranslateY(-localMatrix.getTranslateY() + SK_Scalar1); | 
| if ((permutationsTexture) && (noiseTexture)) { | 
| -        SkAutoTUnref<GrFragmentProcessor> inner( | 
| -            GrPerlinNoiseEffect::Create(fType, | 
| -                                        fNumOctaves, | 
| -                                        fStitchTiles, | 
| -                                        paintingData, | 
| -                                        permutationsTexture, noiseTexture, | 
| -                                        m)); | 
| -        return GrFragmentProcessor::MulOutputByInputAlpha(inner); | 
| +        sk_sp<GrFragmentProcessor> inner( | 
| +            GrPerlinNoiseEffect::Make(fType, | 
| +                                      fNumOctaves, | 
| +                                      fStitchTiles, | 
| +                                      paintingData, | 
| +                                      permutationsTexture, noiseTexture, | 
| +                                      m)); | 
| +        return GrFragmentProcessor::MulOutputByInputAlpha(std::move(inner)); | 
| } | 
| delete paintingData; | 
| return nullptr; | 
|  |