| Index: src/core/SkCanvas.cpp | 
| diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp | 
| index d60e0e921158aba69704084530de0802ceea0a88..3acb9136e25814bacb4a725d402820986f56fdf6 100644 | 
| --- a/src/core/SkCanvas.cpp | 
| +++ b/src/core/SkCanvas.cpp | 
| @@ -1407,12 +1407,13 @@ void SkCanvas::internalDrawDevice(SkBaseDevice* srcDev, int x, int y, | 
| SkAutoTUnref<SkImageFilter::Cache> cache(dstDev->getImageFilterCache()); | 
| SkImageFilter::Context ctx(matrix, clipBounds, cache.get()); | 
|  | 
| -            SkAutoTUnref<SkSpecialImage> srcImg(SkSpecialImage::internal_fromBM(&proxy, srcBM)); | 
| +            sk_sp<SkSpecialImage> srcImg(SkSpecialImage::internal_fromBM(&proxy, srcBM)); | 
| if (!srcImg) { | 
| continue; // something disastrous happened | 
| } | 
|  | 
| -            SkAutoTUnref<SkSpecialImage> resultImg(filter->filterImage(srcImg, ctx, &offset)); | 
| +            SkAutoTUnref<SkSpecialImage> resultImg(filter->filterImage(srcImg.get(), ctx, | 
| +                                                                       &offset)); | 
| if (resultImg) { | 
| SkPaint tmpUnfiltered(*paint); | 
| tmpUnfiltered.setImageFilter(nullptr); | 
|  |