refFoo variant for getters that naturally have a sk_sp

BUG=skia:

Change-Id: I13afa1b81e8a72d93e45fb4d37228be196b0f388
Reviewed-on: https://skia-review.googlesource.com/6923
Reviewed-by: Florin Malita <fmalita@chromium.org>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/bench/ColorCodecBench.cpp b/bench/ColorCodecBench.cpp
index 50727c7..06afdc6 100644
--- a/bench/ColorCodecBench.cpp
+++ b/bench/ColorCodecBench.cpp
@@ -95,7 +95,7 @@
 
     if (FLAGS_xform_only) {
         fSrc.reset(fSrcInfo.getSafeSize(fSrcInfo.minRowBytes()));
-        fSrcSpace = sk_ref_sp(codec->getInfo().colorSpace());
+        fSrcSpace = codec->getInfo().refColorSpace();
         codec->getPixels(fSrcInfo, fSrc.get(), fSrcInfo.minRowBytes());
     }
 }
diff --git a/gm/coloremoji.cpp b/gm/coloremoji.cpp
index 371768c..c1ebef6 100644
--- a/gm/coloremoji.cpp
+++ b/gm/coloremoji.cpp
@@ -95,7 +95,7 @@
             for (int makeBlur = 0; makeBlur < 2; makeBlur++) {
                 for (int makeGray = 0; makeGray < 2; makeGray++) {
                     SkPaint shaderPaint;
-                    shaderPaint.setTypeface(sk_ref_sp(paint.getTypeface()));
+                    shaderPaint.setTypeface(paint.refTypeface());
                     if (SkToBool(makeLinear)) {
                         shaderPaint.setShader(MakeLinear());
                     }
diff --git a/gm/dftext.cpp b/gm/dftext.cpp
index f1b9728..6f3be21 100644
--- a/gm/dftext.cpp
+++ b/gm/dftext.cpp
@@ -42,7 +42,7 @@
         GrContext* ctx = inputCanvas->getGrContext();
         SkISize size = onISize();
         SkImageInfo info = SkImageInfo::MakeN32(size.width(), size.height(), kPremul_SkAlphaType,
-                                                sk_ref_sp(inputCanvas->imageInfo().colorSpace()));
+                                                inputCanvas->imageInfo().refColorSpace());
         SkSurfaceProps props(SkSurfaceProps::kUseDeviceIndependentFonts_Flag,
                              SkSurfaceProps::kLegacyFontHost_InitType);
         auto surface(SkSurface::MakeRenderTarget(ctx, SkBudgeted::kNo, info, 0, &props));
diff --git a/gm/imagealphathreshold.cpp b/gm/imagealphathreshold.cpp
index 193423d..547e812 100644
--- a/gm/imagealphathreshold.cpp
+++ b/gm/imagealphathreshold.cpp
@@ -88,7 +88,7 @@
                                                     SkAlphaType alphaType) {
 
     SkColorType ct = canvas->imageInfo().colorType();
-    sk_sp<SkColorSpace> cs(sk_ref_sp(canvas->imageInfo().colorSpace()));
+    sk_sp<SkColorSpace> cs(canvas->imageInfo().refColorSpace());
 
     if (kUnknown_SkColorType == ct) {
         // For backends that aren't yet color-space aware we just fallback to N32.
diff --git a/gm/pictureimagegenerator.cpp b/gm/pictureimagegenerator.cpp
index accf072..3c59f10 100644
--- a/gm/pictureimagegenerator.cpp
+++ b/gm/pictureimagegenerator.cpp
@@ -158,8 +158,7 @@
                                                  p.getAlpha() != 255 ? &p : nullptr,
                                                  SkImage::BitDepth::kU8, srgbColorSpace));
 
-            SkImageInfo bmInfo = gen->getInfo().makeColorSpace(
-                sk_ref_sp(canvas->imageInfo().colorSpace()));
+            SkImageInfo bmInfo = gen->getInfo().makeColorSpace(canvas->imageInfo().refColorSpace());
 
             SkBitmap bm;
             SkAssertResult(gen->tryGenerateBitmap(&bm, bmInfo, nullptr));
diff --git a/gm/recordopts.cpp b/gm/recordopts.cpp
index b98d2cc..341b7ce 100644
--- a/gm/recordopts.cpp
+++ b/gm/recordopts.cpp
@@ -39,11 +39,8 @@
 
 // This detector detects that image filter phase of the pixel pipeline receives the correct value.
 static void install_detector_image_filter(SkPaint* drawPaint) {
-    sk_sp<SkColorFilter> colorFilter(make_detector_color_filter());
-    sk_sp<SkImageFilter> imageFilter(
-        SkColorFilterImageFilter::Make(std::move(colorFilter),
-                                       sk_ref_sp(drawPaint->getImageFilter())));
-    drawPaint->setImageFilter(std::move(imageFilter));
+    drawPaint->setImageFilter(SkColorFilterImageFilter::Make(make_detector_color_filter(),
+                                                             drawPaint->refImageFilter()));
 }
 
 static void no_detector_install(SkPaint*) {
diff --git a/gm/textblobmixedsizes.cpp b/gm/textblobmixedsizes.cpp
index 8c51cae..64cf723 100644
--- a/gm/textblobmixedsizes.cpp
+++ b/gm/textblobmixedsizes.cpp
@@ -103,7 +103,7 @@
             // Create a new Canvas to enable DFT
             GrContext* ctx = inputCanvas->getGrContext();
             SkISize size = onISize();
-            sk_sp<SkColorSpace> colorSpace = sk_ref_sp(inputCanvas->imageInfo().colorSpace());
+            sk_sp<SkColorSpace> colorSpace = inputCanvas->imageInfo().refColorSpace();
             SkImageInfo info = SkImageInfo::MakeN32(size.width(), size.height(),
                                                     kPremul_SkAlphaType, colorSpace);
             SkSurfaceProps props(SkSurfaceProps::kUseDeviceIndependentFonts_Flag,
diff --git a/gm/textblobrandomfont.cpp b/gm/textblobrandomfont.cpp
index 64e2c67..9185494 100644
--- a/gm/textblobrandomfont.cpp
+++ b/gm/textblobrandomfont.cpp
@@ -99,7 +99,7 @@
 
         SkImageInfo info = SkImageInfo::Make(kWidth, kHeight, canvas->imageInfo().colorType(),
                                              kPremul_SkAlphaType,
-                                             sk_ref_sp(canvas->imageInfo().colorSpace()));
+                                             canvas->imageInfo().refColorSpace());
         SkSurfaceProps props(0, kUnknown_SkPixelGeometry);
         auto surface(canvas->makeSurface(info, &props));
         if (surface) {
diff --git a/gm/xfermodes3.cpp b/gm/xfermodes3.cpp
index e6ee750..c2d4d93 100644
--- a/gm/xfermodes3.cpp
+++ b/gm/xfermodes3.cpp
@@ -126,7 +126,7 @@
         GrContext* context = baseCanvas->getGrContext();
         SkImageInfo baseInfo = baseCanvas->imageInfo();
         SkImageInfo info = SkImageInfo::Make(w, h, baseInfo.colorType(), baseInfo.alphaType(),
-                                             sk_ref_sp(baseInfo.colorSpace()));
+                                             baseInfo.refColorSpace());
         SkSurfaceProps canvasProps(SkSurfaceProps::kLegacyFontHost_InitType);
         baseCanvas->getProps(&canvasProps);
         return SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, info, 0, &canvasProps);
diff --git a/include/core/SkImageInfo.h b/include/core/SkImageInfo.h
index f8582d6..4a8c286 100644
--- a/include/core/SkImageInfo.h
+++ b/include/core/SkImageInfo.h
@@ -234,6 +234,7 @@
     SkColorType colorType() const { return fColorType; }
     SkAlphaType alphaType() const { return fAlphaType; }
     SkColorSpace* colorSpace() const { return fColorSpace.get(); }
+    sk_sp<SkColorSpace> refColorSpace() const { return fColorSpace; }
 
     bool isEmpty() const { return fWidth <= 0 || fHeight <= 0; }
 
diff --git a/include/core/SkPaint.h b/include/core/SkPaint.h
index de3b479..f19edf7 100644
--- a/include/core/SkPaint.h
+++ b/include/core/SkPaint.h
@@ -481,6 +481,7 @@
         @return the paint's shader (or NULL)
     */
     SkShader* getShader() const { return fShader.get(); }
+    sk_sp<SkShader> refShader() const;
 
     /** Set or clear the shader object.
      *  Shaders specify the source color(s) for what is being drawn. If a paint
@@ -509,6 +510,7 @@
         @return the paint's colorfilter (or NULL)
     */
     SkColorFilter* getColorFilter() const { return fColorFilter.get(); }
+    sk_sp<SkColorFilter> refColorFilter() const;
 
     /** Set or clear the paint's colorfilter.
         <p />
@@ -528,6 +530,7 @@
         @return the paint's patheffect (or NULL)
     */
     SkPathEffect* getPathEffect() const { return fPathEffect.get(); }
+    sk_sp<SkPathEffect> refPathEffect() const;
 
     /** Set or clear the patheffect object.
         <p />
@@ -547,6 +550,7 @@
         @return the paint's maskfilter (or NULL)
     */
     SkMaskFilter* getMaskFilter() const { return fMaskFilter.get(); }
+    sk_sp<SkMaskFilter> refMaskFilter() const;
 
     /** Set or clear the maskfilter object.
         <p />
@@ -569,6 +573,7 @@
         @return the paint's typeface (or NULL)
     */
     SkTypeface* getTypeface() const { return fTypeface.get(); }
+    sk_sp<SkTypeface> refTypeface() const;
 
     /** Set or clear the typeface object.
         <p />
@@ -588,6 +593,7 @@
         @return the paint's rasterizer (or NULL)
     */
     SkRasterizer* getRasterizer() const { return fRasterizer.get(); }
+    sk_sp<SkRasterizer> refRasterizer() const;
 
     /** Set or clear the rasterizer object.
         <p />
@@ -603,6 +609,7 @@
     void setRasterizer(sk_sp<SkRasterizer>);
 
     SkImageFilter* getImageFilter() const { return fImageFilter.get(); }
+    sk_sp<SkImageFilter> refImageFilter() const;
     void setImageFilter(sk_sp<SkImageFilter>);
 
     /**
@@ -610,6 +617,8 @@
      *  reference count.
      */
     SkDrawLooper* getDrawLooper() const { return fDrawLooper.get(); }
+    sk_sp<SkDrawLooper> refDrawLooper() const;
+
     SkDrawLooper* getLooper() const { return fDrawLooper.get(); }
     /**
      *  Set or clear the looper object.
diff --git a/src/animator/SkDrawPaint.cpp b/src/animator/SkDrawPaint.cpp
index 1026630..bbd0222 100644
--- a/src/animator/SkDrawPaint.cpp
+++ b/src/animator/SkDrawPaint.cpp
@@ -233,11 +233,11 @@
     if (pathEffect == nullptr)
         paint->setPathEffect(nullptr);
     else if (pathEffect != (SkDrawPathEffect*) -1)
-        paint->setPathEffect(sk_ref_sp(pathEffect->getPathEffect()));
+        paint->setPathEffect(pathEffect->refPathEffect());
     if (shader == nullptr)
         paint->setShader(nullptr);
     else if (shader != (SkDrawShader*) -1)
-        paint->setShader(sk_ref_sp(shader->getShader()));
+        paint->setShader(shader->refShader());
     if (strikeThru != -1)
         paint->setStrikeThruText(SkToBool(strikeThru));
     if (strokeCap != -1)
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 4716053..8bcc421 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -485,7 +485,7 @@
              *      draw onto the previous layer using the xfermode from the original paint.
              */
             SkPaint tmp;
-            tmp.setImageFilter(sk_ref_sp(fPaint->getImageFilter()));
+            tmp.setImageFilter(fPaint->refImageFilter());
             tmp.setBlendMode(fPaint->getBlendMode());
             SkRect storage;
             if (rawBounds) {
@@ -1180,7 +1180,7 @@
         return SkImageInfo::MakeN32(w, h, alphaType);
     } else {
         // keep the same characteristics as the prev
-        return SkImageInfo::Make(w, h, prev.colorType(), alphaType, sk_ref_sp(prev.colorSpace()));
+        return SkImageInfo::Make(w, h, prev.colorType(), alphaType, prev.refColorSpace());
     }
 }
 
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
index 2f3dd3e..f9f9a28 100644
--- a/src/core/SkDraw.cpp
+++ b/src/core/SkDraw.cpp
@@ -1648,7 +1648,7 @@
 
     // Now restore the original settings, so we "draw" with whatever style/stroking.
     paint.setStyle(origPaint.getStyle());
-    paint.setPathEffect(sk_ref_sp(origPaint.getPathEffect()));
+    paint.setPathEffect(origPaint.refPathEffect());
 
     while (text < stop) {
         const SkGlyph& glyph = glyphCacheProc(cache.get(), &text);
diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp
index fb89a67..ea33d5b 100644
--- a/src/core/SkPaint.cpp
+++ b/src/core/SkPaint.cpp
@@ -184,6 +184,17 @@
 #undef EQUAL
 }
 
+#define DEFINE_REF_FOO(type)    sk_sp<Sk##type> SkPaint::ref##type() const { return f##type; }
+DEFINE_REF_FOO(ColorFilter)
+DEFINE_REF_FOO(DrawLooper)
+DEFINE_REF_FOO(ImageFilter)
+DEFINE_REF_FOO(MaskFilter)
+DEFINE_REF_FOO(PathEffect)
+DEFINE_REF_FOO(Rasterizer)
+DEFINE_REF_FOO(Shader)
+DEFINE_REF_FOO(Typeface)
+#undef DEFINE_REF_FOO
+
 void SkPaint::reset() {
     SkPaint init;
     *this = init;
@@ -2244,12 +2255,12 @@
     sk_sp<SkPathEffect> pe;
 
     if (!applyStrokeAndPathEffects) {
-        style = paint.getStyle();   // restore
-        pe = sk_ref_sp(paint.getPathEffect());     // restore
+        style = paint.getStyle();       // restore
+        pe = paint.refPathEffect();     // restore
     }
     fPaint.setStyle(style);
     fPaint.setPathEffect(pe);
-    fPaint.setMaskFilter(sk_ref_sp(paint.getMaskFilter()));    // restore
+    fPaint.setMaskFilter(paint.refMaskFilter());    // restore
 
     // now compute fXOffset if needed
 
diff --git a/src/effects/SkLayerDrawLooper.cpp b/src/effects/SkLayerDrawLooper.cpp
index e72d137..737cdf6 100644
--- a/src/effects/SkLayerDrawLooper.cpp
+++ b/src/effects/SkLayerDrawLooper.cpp
@@ -92,16 +92,16 @@
     }
 
     if (bits & kPathEffect_Bit) {
-        dst->setPathEffect(sk_ref_sp(src.getPathEffect()));
+        dst->setPathEffect(src.refPathEffect());
     }
     if (bits & kMaskFilter_Bit) {
-        dst->setMaskFilter(sk_ref_sp(src.getMaskFilter()));
+        dst->setMaskFilter(src.refMaskFilter());
     }
     if (bits & kShader_Bit) {
-        dst->setShader(sk_ref_sp(src.getShader()));
+        dst->setShader(src.refShader());
     }
     if (bits & kColorFilter_Bit) {
-        dst->setColorFilter(sk_ref_sp(src.getColorFilter()));
+        dst->setColorFilter(src.refColorFilter());
     }
     if (bits & kXfermode_Bit) {
         dst->setBlendMode(src.getBlendMode());
diff --git a/src/gpu/text/GrTextUtils.cpp b/src/gpu/text/GrTextUtils.cpp
index 5793ade..548d4aa 100644
--- a/src/gpu/text/GrTextUtils.cpp
+++ b/src/gpu/text/GrTextUtils.cpp
@@ -524,7 +524,7 @@
 
     // Now restore the original settings, so we "draw" with whatever style/stroking.
     paint.setStyle(origPaint.getStyle());
-    paint.setPathEffect(sk_ref_sp(origPaint.getPathEffect()));
+    paint.setPathEffect(origPaint.refPathEffect());
 
     while (text < stop) {
         const SkGlyph& glyph = glyphCacheProc(cache, &text);
diff --git a/src/svg/SkSVGDevice.cpp b/src/svg/SkSVGDevice.cpp
index 09bd09b..06679da 100644
--- a/src/svg/SkSVGDevice.cpp
+++ b/src/svg/SkSVGDevice.cpp
@@ -535,8 +535,7 @@
 
     SkString familyName;
     SkTHashSet<SkString> familySet;
-    sk_sp<const SkTypeface> tface(paint.getTypeface() ?
-        sk_ref_sp(paint.getTypeface()) : SkTypeface::MakeDefault());
+    sk_sp<SkTypeface> tface(paint.getTypeface() ? paint.refTypeface() : SkTypeface::MakeDefault());
 
     SkASSERT(tface);
     SkTypeface::Style style = tface->style();
diff --git a/tests/FontHostStreamTest.cpp b/tests/FontHostStreamTest.cpp
index efb1453..7c4cb67 100644
--- a/tests/FontHostStreamTest.cpp
+++ b/tests/FontHostStreamTest.cpp
@@ -87,8 +87,8 @@
         drawBG(&origCanvas);
         origCanvas.drawText("A", 1, point.fX, point.fY, paint);
 
-        sk_sp<SkTypeface> typeface(SkToBool(paint.getTypeface()) ? sk_ref_sp(paint.getTypeface())
-                                                                 : SkTypeface::MakeDefault());
+        sk_sp<SkTypeface> typeface(paint.getTypeface() ? paint.refTypeface()
+                                                       : SkTypeface::MakeDefault());
         int ttcIndex;
         std::unique_ptr<SkStreamAsset> fontData(typeface->openStream(&ttcIndex));
         sk_sp<SkTypeface> streamTypeface(SkTypeface::MakeFromStream(fontData.release()));