SkImage now has makeShader to return sk_sp

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

Review URL: https://codereview.chromium.org/1785473002
diff --git a/bench/SkLinearBitmapPipelineBench.cpp b/bench/SkLinearBitmapPipelineBench.cpp
index 660245e..0c60eed 100644
--- a/bench/SkLinearBitmapPipelineBench.cpp
+++ b/bench/SkLinearBitmapPipelineBench.cpp
@@ -176,13 +176,12 @@
         SkImage* image = SkImage::NewRasterCopy(
             fInfo, fBitmap.get(), sizeof(SkPMColor) * fSrcSize.fWidth);
         fImage.reset(image);
-        SkShader* shader = fImage->newShader(fXTile, fYTile);
+        fPaint.setShader(fImage->makeShader(fXTile, fYTile));
         if (fUseBilerp) {
             fPaint.setFilterQuality(SkFilterQuality::kLow_SkFilterQuality);
         } else {
             fPaint.setFilterQuality(SkFilterQuality::kNone_SkFilterQuality);
         }
-        fPaint.setShader(shader)->unref();
     }
 
     void onPostDraw(SkCanvas*) override {
diff --git a/gm/SkLinearBitmapPipelineGM.cpp b/gm/SkLinearBitmapPipelineGM.cpp
index d3a143c..e93d2ac 100644
--- a/gm/SkLinearBitmapPipelineGM.cpp
+++ b/gm/SkLinearBitmapPipelineGM.cpp
@@ -61,13 +61,12 @@
         info, pmsrc.addr32(), pmsrc.rowBytes())};
     SkPaint paint;
     int32_t storage[300];
-    SkShader* shader = image->newShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);
+    paint.setShader(image->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode));
     if (useBilerp) {
         paint.setFilterQuality(SkFilterQuality::kLow_SkFilterQuality);
     } else {
         paint.setFilterQuality(SkFilterQuality::kNone_SkFilterQuality);
     }
-    paint.setShader(shader)->unref();
     const SkShader::ContextRec rec(paint, *mat, nullptr,
                                    SkBlitter::PreferredShaderDest(pmsrc.info()));
     SkASSERT(paint.getShader()->contextSize(rec) <= sizeof(storage));
diff --git a/gm/colorfilterimagefilter.cpp b/gm/colorfilterimagefilter.cpp
index 4ab91f1..b0f67bf 100644
--- a/gm/colorfilterimagefilter.cpp
+++ b/gm/colorfilterimagefilter.cpp
@@ -70,8 +70,7 @@
     if (!image) {
         return nullptr;
     }
-    return sk_sp<SkShader>(image->newShader(SkShader::kRepeat_TileMode,
-                                            SkShader::kRepeat_TileMode));
+    return image->makeShader(SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);
 }
 
 static void sk_gm_get_shaders(SkTDArray<SkShader*>* array) {
diff --git a/gm/image_shader.cpp b/gm/image_shader.cpp
index 084bb95..7ea0202 100644
--- a/gm/image_shader.cpp
+++ b/gm/image_shader.cpp
@@ -101,10 +101,9 @@
 
         const SkShader::TileMode tile = SkShader::kRepeat_TileMode;
         const SkMatrix localM = SkMatrix::MakeTrans(-50, -50);
-        SkAutoTUnref<SkShader> shader(image->newShader(tile, tile, &localM));
         SkPaint paint;
+        paint.setShader(image->makeShader(tile, tile, &localM));
         paint.setAntiAlias(true);
-        paint.setShader(shader);
         canvas->drawCircle(50, 50, 50, paint);
     }
 
diff --git a/gm/rectangletexture.cpp b/gm/rectangletexture.cpp
index 0889063..20f2ead 100644
--- a/gm/rectangletexture.cpp
+++ b/gm/rectangletexture.cpp
@@ -164,15 +164,15 @@
 
                     SkPaint clampPaint;
                     clampPaint.setFilterQuality(q);
-                    clampPaint.setShader(rectImg->newShader(SkShader::kClamp_TileMode,
-                                                            SkShader::kClamp_TileMode))->unref();
+                    clampPaint.setShader(rectImg->makeShader(SkShader::kClamp_TileMode,
+                                                             SkShader::kClamp_TileMode));
                     canvas->drawRect(SkRect::MakeWH(1.5f * kWidth, 1.5f * kHeight), clampPaint);
                     canvas->translate(kWidth * 1.5f + kPad, 0);
 
                     SkPaint repeatPaint;
                     repeatPaint.setFilterQuality(q);
-                    repeatPaint.setShader(rectImg->newShader(SkShader::kRepeat_TileMode,
-                                                             SkShader::kMirror_TileMode))->unref();
+                    repeatPaint.setShader(rectImg->makeShader(SkShader::kRepeat_TileMode,
+                                                              SkShader::kMirror_TileMode));
                     canvas->drawRect(SkRect::MakeWH(1.5f * kWidth, 1.5f * kHeight), repeatPaint);
                     canvas->translate(1.5f * kWidth + kPad, 0);
             }
diff --git a/include/core/SkImage.h b/include/core/SkImage.h
index c920c54..832ff9d 100644
--- a/include/core/SkImage.h
+++ b/include/core/SkImage.h
@@ -163,9 +163,13 @@
     bool readYUV8Planes(const SkISize[3], void* const planes[3], const size_t rowBytes[3],
                         SkYUVColorSpace) const;
 
-    virtual SkShader* newShader(SkShader::TileMode,
-                                SkShader::TileMode,
-                                const SkMatrix* localMatrix = NULL) const;
+#ifdef SK_SUPPORT_LEGACY_CREATESHADER_PTR
+    SkShader* newShader(SkShader::TileMode, SkShader::TileMode,
+                        const SkMatrix* localMatrix = nullptr) const;
+#endif
+
+    sk_sp<SkShader> makeShader(SkShader::TileMode, SkShader::TileMode,
+                               const SkMatrix* localMatrix = nullptr) const;
 
     /**
      *  If the image has direct access to its pixels (i.e. they are in local RAM)
diff --git a/samplecode/SampleFilterQuality.cpp b/samplecode/SampleFilterQuality.cpp
index c37fcae..27c092f 100644
--- a/samplecode/SampleFilterQuality.cpp
+++ b/samplecode/SampleFilterQuality.cpp
@@ -27,7 +27,7 @@
     return surface;
 }
 
-static SkShader* make_shader(const SkRect& bounds) {
+static sk_sp<SkShader> make_shader(const SkRect& bounds) {
 #if 0
     const SkPoint pts[] = {
         { bounds.left(), bounds.top() },
@@ -45,7 +45,7 @@
     if (nullptr == image) {
         return nullptr;
     }
-    return image->newShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);
+    return image->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);
 #endif
 }
 
@@ -67,7 +67,7 @@
     path.moveTo(0, 0); path.lineTo(N, 0); path.lineTo(0, N); path.close();
 
     SkPaint paint;
-    SkSafeUnref(paint.setShader(make_shader(SkRect::MakeWH(N, N))));
+    paint.setShader(make_shader(SkRect::MakeWH(N, N)));
     
     canvas->drawPath(path, paint);
     return surface->newImageSnapshot();
diff --git a/src/core/SkDevice.cpp b/src/core/SkDevice.cpp
index fa4a4b8..aff1551 100644
--- a/src/core/SkDevice.cpp
+++ b/src/core/SkDevice.cpp
@@ -198,13 +198,13 @@
         localM.preTranslate(-tex[i].left(), -tex[i].top());
 
         SkPaint pnt(paint);
-        SkAutoTUnref<SkShader> shader(atlas->newShader(SkShader::kClamp_TileMode,
-                                                       SkShader::kClamp_TileMode,
-                                                       &localM));
+        sk_sp<SkShader> shader = atlas->makeShader(SkShader::kClamp_TileMode,
+                                                   SkShader::kClamp_TileMode,
+                                                   &localM);
         if (!shader) {
             break;
         }
-        pnt.setShader(shader);
+        pnt.setShader(std::move(shader));
 
         if (colors) {
             SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateModeFilter(colors[i], mode));
diff --git a/src/core/SkPictureShader.cpp b/src/core/SkPictureShader.cpp
index a6644aa..c2a0b74 100644
--- a/src/core/SkPictureShader.cpp
+++ b/src/core/SkPictureShader.cpp
@@ -231,7 +231,7 @@
 
         SkMatrix shaderMatrix = this->getLocalMatrix();
         shaderMatrix.preScale(1 / tileScale.width(), 1 / tileScale.height());
-        tileShader.reset(tileImage->newShader(fTmx, fTmy, &shaderMatrix));
+        tileShader = tileImage->makeShader(fTmx, fTmy, &shaderMatrix);
 
         const SkImageInfo tileInfo = SkImageInfo::MakeN32Premul(tileSize);
         SkResourceCache::Add(new BitmapShaderRec(key, tileShader.get(),
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index a7bf82e..7a6d967 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -1678,7 +1678,7 @@
     GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawText", fContext);
 
     SkPaint p(paint);
-    p.setShader(atlas->newShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode))->unref();
+    p.setShader(atlas->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode));
 
     GrPaint grPaint;
     if (colors) {
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index 5e7cb07..a41ac83 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -103,12 +103,18 @@
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-SkShader* SkImage::newShader(SkShader::TileMode tileX,
-                             SkShader::TileMode tileY,
-                             const SkMatrix* localMatrix) const {
-    return SkImageShader::Create(this, tileX, tileY, localMatrix);
+sk_sp<SkShader> SkImage::makeShader(SkShader::TileMode tileX, SkShader::TileMode tileY,
+                                    const SkMatrix* localMatrix) const {
+    return SkImageShader::Make(this, tileX, tileY, localMatrix);
 }
 
+#ifdef SK_SUPPORT_LEGACY_CREATESHADER_PTR
+SkShader* SkImage::newShader(SkShader::TileMode tileX, SkShader::TileMode tileY,
+                             const SkMatrix* localMatrix) const {
+    return this->makeShader(tileX, tileY, localMatrix).release();
+}
+#endif
+
 SkData* SkImage::encode(SkImageEncoder::Type type, int quality) const {
     SkBitmap bm;
     if (as_IB(this)->getROPixels(&bm)) {
diff --git a/src/image/SkImageShader.cpp b/src/image/SkImageShader.cpp
index b1bb3ab..00c038a 100644
--- a/src/image/SkImageShader.cpp
+++ b/src/image/SkImageShader.cpp
@@ -28,7 +28,7 @@
     if (!img) {
         return nullptr;
     }
-    return new SkImageShader(img, tx, ty, &matrix);
+    return SkImageShader::Make(img, tx, ty, &matrix).release();
 }
 
 void SkImageShader::flatten(SkWriteBuffer& buffer) const {
@@ -51,12 +51,12 @@
                                            SkBitmapProvider(fImage), rec, storage);
 }
 
-SkShader* SkImageShader::Create(const SkImage* image, TileMode tx, TileMode ty,
-                                const SkMatrix* localMatrix) {
+sk_sp<SkShader> SkImageShader::Make(const SkImage* image, TileMode tx, TileMode ty,
+                                    const SkMatrix* localMatrix) {
     if (!image) {
         return nullptr;
     }
-    return new SkImageShader(image, tx, ty, localMatrix);
+    return sk_sp<SkShader>(new SkImageShader(image, tx, ty, localMatrix));
 }
 
 #ifndef SK_IGNORE_TO_STRING
diff --git a/src/image/SkImageShader.h b/src/image/SkImageShader.h
index 07b938d..f466e61 100644
--- a/src/image/SkImageShader.h
+++ b/src/image/SkImageShader.h
@@ -13,7 +13,8 @@
 
 class SkImageShader : public SkShader {
 public:
-    static SkShader* Create(const SkImage*, TileMode tx, TileMode ty, const SkMatrix* localMatrix);
+    static sk_sp<SkShader> Make(const SkImage*, TileMode tx, TileMode ty,
+                                const SkMatrix* localMatrix);
 
     bool isOpaque() const override;
 
diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp
index b84ba0f..95ca5ad 100644
--- a/src/utils/SkLua.cpp
+++ b/src/utils/SkLua.cpp
@@ -1711,8 +1711,7 @@
 static int limage_newShader(lua_State* L) {
     SkShader::TileMode tmode = SkShader::kClamp_TileMode;
     const SkMatrix* localM = nullptr;
-    SkAutoTUnref<SkShader> shader(get_ref<SkImage>(L, 1)->newShader(tmode, tmode, localM));
-    push_ref(L, shader.get());
+    push_ref(L, get_ref<SkImage>(L, 1)->makeShader(tmode, tmode, localM));
     return 1;
 }
 
diff --git a/tests/FlattenableFactoryToName.cpp b/tests/FlattenableFactoryToName.cpp
index f8cb4fa..c8f4a62 100644
--- a/tests/FlattenableFactoryToName.cpp
+++ b/tests/FlattenableFactoryToName.cpp
@@ -36,7 +36,6 @@
     bm.allocN32Pixels(8, 8);
     bm.eraseColor(SK_ColorCYAN);
     SkAutoTUnref<SkImage> image(SkImage::NewFromBitmap(bm));
-    SkAutoTUnref<SkShader> shader(image->newShader(SkShader::kClamp_TileMode,
-                                                   SkShader::kClamp_TileMode));
-    test_flattenable(r, shader, "SkImage::newShader()");
+    auto shader = image->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);
+    test_flattenable(r, shader.get(), "SkImage::newShader()");
 }
diff --git a/tests/ImageNewShaderTest.cpp b/tests/ImageNewShaderTest.cpp
index 7b7d80e..0822dbd 100644
--- a/tests/ImageNewShaderTest.cpp
+++ b/tests/ImageNewShaderTest.cpp
@@ -45,9 +45,9 @@
     paintSource(sourceSurface);
 
     SkAutoTUnref<SkImage> sourceImage(sourceSurface->newImageSnapshot());
-    SkAutoTUnref<SkShader> sourceShader(sourceImage->newShader(
+    sk_sp<SkShader> sourceShader = sourceImage->makeShader(
             SkShader::kRepeat_TileMode,
-            SkShader::kRepeat_TileMode));
+            SkShader::kRepeat_TileMode);
 
     SkPaint paint;
     paint.setShader(sourceShader);
@@ -73,10 +73,10 @@
     SkMatrix matrix;
     matrix.setTranslate(SkIntToScalar(-1), SkIntToScalar(0));
 
-    SkAutoTUnref<SkShader> sourceShaderTranslated(sourceImage->newShader(
+    sk_sp<SkShader> sourceShaderTranslated = sourceImage->makeShader(
             SkShader::kRepeat_TileMode,
             SkShader::kRepeat_TileMode,
-            &matrix));
+            &matrix);
 
     destinationCanvas->clear(SK_ColorTRANSPARENT);
 
diff --git a/tests/SkColor4fTest.cpp b/tests/SkColor4fTest.cpp
index ec40000..62eed21 100644
--- a/tests/SkColor4fTest.cpp
+++ b/tests/SkColor4fTest.cpp
@@ -98,9 +98,9 @@
     return SkColorFilter::CreateComposeFilter(cf0, cf1);
 }
 
-static SkShader* make_color_sh() { return SkShader::CreateColorShader(0xFFBB8855); }
+static sk_sp<SkShader> make_color_sh() { return SkShader::MakeColorShader(0xFFBB8855); }
 
-static SkShader* make_image_sh() {
+static sk_sp<SkShader> make_image_sh() {
     const SkImageInfo info = SkImageInfo::MakeN32Premul(2, 2);
     const SkPMColor pixels[] {
         SkPackARGB32(0xFF, 0xBB, 0x88, 0x55),
@@ -109,10 +109,10 @@
         SkPackARGB32(0xFF, 0xBB, 0x88, 0x55),
     };
     SkAutoTUnref<SkImage> image(SkImage::NewRasterCopy(info, pixels, sizeof(SkPMColor) * 2));
-    return image->newShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);
+    return image->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);
 }
 
-static SkShader* make_grad_sh() {
+static sk_sp<SkShader> make_grad_sh() {
 #if 0
     const SkPoint pts[] {{ 0, 0 }, { 100, 100 }};
     const SkColor colors[] { SK_ColorRED, SK_ColorBLUE };
@@ -123,10 +123,10 @@
 #endif
 }
 
-static SkShader* make_cf_sh() {
+static sk_sp<SkShader> make_cf_sh() {
     SkAutoTUnref<SkColorFilter> filter(make_mx_cf());
-    SkAutoTUnref<SkShader> shader(make_color_sh());
-    return shader->newWithColorFilter(filter);
+    sk_sp<SkShader> shader(make_color_sh());
+    return sk_sp<SkShader>(shader->newWithColorFilter(filter));
 }
 
 static bool compare_spans(const SkPM4f span4f[], const SkPMColor span4b[], int count,
@@ -143,9 +143,9 @@
 
 DEF_TEST(Color4f_shader, reporter) {
     struct {
-        SkShader* (*fFact)();
-        bool      fSupports4f;
-        float     fTolerance;
+        sk_sp<SkShader> (*fFact)();
+        bool            fSupports4f;
+        float           fTolerance;
     } recs[] = {
         { make_color_sh, true,  1.0f/255   },
         // PMColor 4f gradients are interpolated in 255-multiplied values, so we need a
@@ -158,7 +158,7 @@
     SkPaint paint;
     for (const auto& rec : recs) {
         uint32_t storage[300];
-        paint.setShader(rec.fFact())->unref();
+        paint.setShader(rec.fFact());
         // Encourage 4f context selection. At some point we may need
         // to instantiate two separate contexts for optimal 4b/4f selection.
         const SkShader::ContextRec contextRec(paint, SkMatrix::I(), nullptr,