| Index: src/core/SkSpecialSurface.cpp | 
| diff --git a/src/core/SkSpecialSurface.cpp b/src/core/SkSpecialSurface.cpp | 
| index 429baddadd942ae7d6afd6ae29f4d34d937095a5..c1b06dd769367b8dad037115777e8b8dc9a7fbbf 100644 | 
| --- a/src/core/SkSpecialSurface.cpp | 
| +++ b/src/core/SkSpecialSurface.cpp | 
| @@ -27,7 +27,7 @@ public: | 
| // This can return nullptr if reset has already been called or something when wrong in the ctor | 
| SkCanvas* onGetCanvas() { return fCanvas; } | 
|  | 
| -    virtual SkSpecialImage* onNewImageSnapshot() = 0; | 
| +    virtual sk_sp<SkSpecialImage> onMakeImageSnapshot() = 0; | 
|  | 
| protected: | 
| SkAutoTUnref<SkCanvas> fCanvas;   // initialized by derived classes in ctors | 
| @@ -55,8 +55,8 @@ SkCanvas* SkSpecialSurface::getCanvas() { | 
| return as_SB(this)->onGetCanvas(); | 
| } | 
|  | 
| -SkSpecialImage* SkSpecialSurface::newImageSnapshot() { | 
| -    SkSpecialImage* image = as_SB(this)->onNewImageSnapshot(); | 
| +sk_sp<SkSpecialImage> SkSpecialSurface::makeImageSnapshot() { | 
| +    sk_sp<SkSpecialImage> image(as_SB(this)->onMakeImageSnapshot()); | 
| as_SB(this)->reset(); | 
| return image;   // the caller gets the creation ref | 
| } | 
| @@ -81,8 +81,8 @@ public: | 
|  | 
| ~SkSpecialSurface_Raster() override { } | 
|  | 
| -    SkSpecialImage* onNewImageSnapshot() override { | 
| -        return SkSpecialImage::NewFromRaster(this->proxy(), this->subset(), fBitmap); | 
| +    sk_sp<SkSpecialImage> onMakeImageSnapshot() override { | 
| +        return SkSpecialImage::MakeFromRaster(this->proxy(), this->subset(), fBitmap); | 
| } | 
|  | 
| private: | 
| @@ -91,15 +91,15 @@ private: | 
| typedef SkSpecialSurface_Base INHERITED; | 
| }; | 
|  | 
| -SkSpecialSurface* SkSpecialSurface::NewFromBitmap(SkImageFilter::Proxy* proxy, | 
| -                                                  const SkIRect& subset, SkBitmap& bm, | 
| -                                                  const SkSurfaceProps* props) { | 
| -    return new SkSpecialSurface_Raster(proxy, bm.pixelRef(), subset, props); | 
| +sk_sp<SkSpecialSurface> SkSpecialSurface::MakeFromBitmap(SkImageFilter::Proxy* proxy, | 
| +                                                         const SkIRect& subset, SkBitmap& bm, | 
| +                                                         const SkSurfaceProps* props) { | 
| +    return sk_make_sp<SkSpecialSurface_Raster>(proxy, bm.pixelRef(), subset, props); | 
| } | 
|  | 
| -SkSpecialSurface* SkSpecialSurface::NewRaster(SkImageFilter::Proxy* proxy, | 
| -                                              const SkImageInfo& info, | 
| -                                              const SkSurfaceProps* props) { | 
| +sk_sp<SkSpecialSurface> SkSpecialSurface::MakeRaster(SkImageFilter::Proxy* proxy, | 
| +                                                     const SkImageInfo& info, | 
| +                                                     const SkSurfaceProps* props) { | 
| SkAutoTUnref<SkPixelRef> pr(SkMallocPixelRef::NewZeroed(info, 0, nullptr)); | 
| if (nullptr == pr.get()) { | 
| return nullptr; | 
| @@ -107,7 +107,7 @@ SkSpecialSurface* SkSpecialSurface::NewRaster(SkImageFilter::Proxy* proxy, | 
|  | 
| const SkIRect subset = SkIRect::MakeWH(pr->info().width(), pr->info().height()); | 
|  | 
| -    return new SkSpecialSurface_Raster(proxy, pr, subset, props); | 
| +    return sk_make_sp<SkSpecialSurface_Raster>(proxy, pr, subset, props); | 
| } | 
|  | 
| #if SK_SUPPORT_GPU | 
| @@ -137,9 +137,9 @@ public: | 
|  | 
| ~SkSpecialSurface_Gpu() override { } | 
|  | 
| -    SkSpecialImage* onNewImageSnapshot() override { | 
| -        return SkSpecialImage::NewFromGpu(this->proxy(), this->subset(), | 
| -                                          kNeedNewImageUniqueID_SpecialImage, fTexture); | 
| +    sk_sp<SkSpecialImage> onMakeImageSnapshot() override { | 
| +        return SkSpecialImage::MakeFromGpu(this->proxy(), this->subset(), | 
| +                                           kNeedNewImageUniqueID_SpecialImage, fTexture); | 
| } | 
|  | 
| private: | 
| @@ -148,21 +148,21 @@ private: | 
| typedef SkSpecialSurface_Base INHERITED; | 
| }; | 
|  | 
| -SkSpecialSurface* SkSpecialSurface::NewFromTexture(SkImageFilter::Proxy* proxy, | 
| -                                                   const SkIRect& subset, | 
| -                                                   GrTexture* texture, | 
| -                                                   const SkSurfaceProps* props) { | 
| +sk_sp<SkSpecialSurface> SkSpecialSurface::MakeFromTexture(SkImageFilter::Proxy* proxy, | 
| +                                                          const SkIRect& subset, | 
| +                                                          GrTexture* texture, | 
| +                                                          const SkSurfaceProps* props) { | 
| if (!texture->asRenderTarget()) { | 
| return nullptr; | 
| } | 
|  | 
| -    return new SkSpecialSurface_Gpu(proxy, texture, subset, props); | 
| +    return sk_make_sp<SkSpecialSurface_Gpu>(proxy, texture, subset, props); | 
| } | 
|  | 
| -SkSpecialSurface* SkSpecialSurface::NewRenderTarget(SkImageFilter::Proxy* proxy, | 
| -                                                    GrContext* context, | 
| -                                                    const GrSurfaceDesc& desc, | 
| -                                                    const SkSurfaceProps* props) { | 
| +sk_sp<SkSpecialSurface> SkSpecialSurface::MakeRenderTarget(SkImageFilter::Proxy* proxy, | 
| +                                                           GrContext* context, | 
| +                                                           const GrSurfaceDesc& desc, | 
| +                                                           const SkSurfaceProps* props) { | 
| if (!context || !SkToBool(desc.fFlags & kRenderTarget_GrSurfaceFlag)) { | 
| return nullptr; | 
| } | 
| @@ -174,22 +174,22 @@ SkSpecialSurface* SkSpecialSurface::NewRenderTarget(SkImageFilter::Proxy* proxy, | 
|  | 
| const SkIRect subset = SkIRect::MakeWH(desc.fWidth, desc.fHeight); | 
|  | 
| -    return new SkSpecialSurface_Gpu(proxy, temp, subset, props); | 
| +    return sk_make_sp<SkSpecialSurface_Gpu>(proxy, temp, subset, props); | 
| } | 
|  | 
| #else | 
|  | 
| -SkSpecialSurface* SkSpecialSurface::NewFromTexture(SkImageFilter::Proxy* proxy, | 
| -                                                   const SkIRect& subset, | 
| -                                                   GrTexture*, | 
| -                                                   const SkSurfaceProps*) { | 
| +sk_sp<SkSpecialSurface> SkSpecialSurface::MakeFromTexture(SkImageFilter::Proxy* proxy, | 
| +                                                          const SkIRect& subset, | 
| +                                                          GrTexture*, | 
| +                                                          const SkSurfaceProps*) { | 
| return nullptr; | 
| } | 
|  | 
| -SkSpecialSurface* SkSpecialSurface::NewRenderTarget(SkImageFilter::Proxy* proxy, | 
| -                                                    GrContext* context, | 
| -                                                    const GrSurfaceDesc& desc, | 
| -                                                    const SkSurfaceProps* props) { | 
| +sk_sp<SkSpecialSurface> SkSpecialSurface::MakeRenderTarget(SkImageFilter::Proxy* proxy, | 
| +                                                           GrContext* context, | 
| +                                                           const GrSurfaceDesc& desc, | 
| +                                                           const SkSurfaceProps* props) { | 
| return nullptr; | 
| } | 
|  | 
|  |