| Index: gm/variedtext.cpp
 | 
| diff --git a/gm/variedtext.cpp b/gm/variedtext.cpp
 | 
| index 83fe7201fd57148409515186e7f354f499ec1177..e295cbc99802a2e2d793c1eb1efa0f925fc1e5bb 100644
 | 
| --- a/gm/variedtext.cpp
 | 
| +++ b/gm/variedtext.cpp
 | 
| @@ -21,13 +21,6 @@ public:
 | 
|      VariedTextGM(bool effectiveClip, bool lcd)
 | 
|          : fEffectiveClip(effectiveClip)
 | 
|          , fLCD(lcd) {
 | 
| -        memset(fTypefacesToUnref, 0, sizeof(fTypefacesToUnref));
 | 
| -    }
 | 
| -
 | 
| -    ~VariedTextGM() {
 | 
| -        for (size_t i = 0; i < SK_ARRAY_COUNT(fTypefacesToUnref); ++i) {
 | 
| -            SkSafeUnref(fTypefacesToUnref[i]);
 | 
| -        }
 | 
|      }
 | 
|  
 | 
|  protected:
 | 
| @@ -58,11 +51,11 @@ protected:
 | 
|          SkScalar w = SkIntToScalar(size.fWidth);
 | 
|          SkScalar h = SkIntToScalar(size.fHeight);
 | 
|  
 | 
| -        static_assert(4 == SK_ARRAY_COUNT(fTypefacesToUnref), "typeface_cnt");
 | 
| -        fTypefacesToUnref[0] = sk_tool_utils::create_portable_typeface("sans-serif", SkTypeface::kNormal);
 | 
| -        fTypefacesToUnref[1] = sk_tool_utils::create_portable_typeface("sans-serif", SkTypeface::kBold);
 | 
| -        fTypefacesToUnref[2] = sk_tool_utils::create_portable_typeface("serif", SkTypeface::kNormal);
 | 
| -        fTypefacesToUnref[3] = sk_tool_utils::create_portable_typeface("serif", SkTypeface::kBold);
 | 
| +        static_assert(4 == SK_ARRAY_COUNT(fTypefaces), "typeface_cnt");
 | 
| +        fTypefaces[0] = sk_tool_utils::create_portable_typeface("sans-serif", SkTypeface::kNormal);
 | 
| +        fTypefaces[1] = sk_tool_utils::create_portable_typeface("sans-serif", SkTypeface::kBold);
 | 
| +        fTypefaces[2] = sk_tool_utils::create_portable_typeface("serif", SkTypeface::kNormal);
 | 
| +        fTypefaces[3] = sk_tool_utils::create_portable_typeface("serif", SkTypeface::kBold);
 | 
|  
 | 
|          SkRandom random;
 | 
|          for (int i = 0; i < kCnt; ++i) {
 | 
| @@ -82,12 +75,11 @@ protected:
 | 
|  
 | 
|              fPtSizes[i] = random.nextRangeScalar(kMinPtSize, kMaxPtSize);
 | 
|  
 | 
| -            fTypefaces[i] = fTypefacesToUnref[
 | 
| -                random.nextULessThan(SK_ARRAY_COUNT(fTypefacesToUnref))];
 | 
| +            fTypefaceIndices[i] = random.nextULessThan(SK_ARRAY_COUNT(fTypefaces));
 | 
|  
 | 
|              SkRect r;
 | 
|              fPaint.setColor(fColors[i]);
 | 
| -            fPaint.setTypeface(fTypefaces[i]);
 | 
| +            fPaint.setTypeface(fTypefaces[fTypefaceIndices[i]]);
 | 
|              fPaint.setTextSize(fPtSizes[i]);
 | 
|  
 | 
|              fPaint.measureText(fStrings[i].c_str(), fStrings[i].size(), &r);
 | 
| @@ -116,7 +108,7 @@ protected:
 | 
|          for (int i = 0; i < kCnt; ++i) {
 | 
|              fPaint.setColor(fColors[i]);
 | 
|              fPaint.setTextSize(fPtSizes[i]);
 | 
| -            fPaint.setTypeface(fTypefaces[i]);
 | 
| +            fPaint.setTypeface(fTypefaces[fTypefaceIndices[i]]);
 | 
|  
 | 
|              canvas->save();
 | 
|                  canvas->clipRect(fClipRects[i]);
 | 
| @@ -146,14 +138,14 @@ private:
 | 
|  
 | 
|      bool        fEffectiveClip;
 | 
|      bool        fLCD;
 | 
| -    SkTypeface* fTypefacesToUnref[4];
 | 
| +    sk_sp<SkTypeface> fTypefaces[4];
 | 
|      SkPaint     fPaint;
 | 
|  
 | 
|      // precomputed for each text draw
 | 
|      SkString        fStrings[kCnt];
 | 
|      SkColor         fColors[kCnt];
 | 
|      SkScalar        fPtSizes[kCnt];
 | 
| -    SkTypeface*     fTypefaces[kCnt];
 | 
| +    int             fTypefaceIndices[kCnt];
 | 
|      SkPoint         fPositions[kCnt];
 | 
|      SkRect          fClipRects[kCnt];
 | 
|  
 | 
| 
 |