diff --git a/gm/aaxfermodes.cpp b/gm/aaxfermodes.cpp
index 1db4c1c..cbf8db4 100644
--- a/gm/aaxfermodes.cpp
+++ b/gm/aaxfermodes.cpp
@@ -68,10 +68,9 @@
     }
 
     void onOnceBeforeDraw() override {
-        fLabelPaint.setAntiAlias(true);
-        sk_tool_utils::set_portable_typeface(&fLabelPaint);
-        fLabelPaint.setTextSize(5 * kShapeSize/8);
-        fLabelPaint.setSubpixelText(true);
+        fLabelFont.setTypeface(sk_tool_utils::create_portable_typeface());
+        fLabelFont.setSize(5 * kShapeSize/8);
+        fLabelFont.setSubpixel(true);
 
         constexpr SkScalar radius = -1.4f * kShapeSize/2;
         SkPoint pts[4] = {
@@ -109,12 +108,12 @@
             if (kShape_Pass == drawingPass) {
                 SkTextUtils::DrawString(canvas, "Src Unknown",
                         kLabelSpacing + kShapeTypeSpacing * 1.5f + kShapeSpacing / 2,
-                        kSubtitleSpacing / 2 + fLabelPaint.getTextSize() / 3, fLabelPaint,
+                        kSubtitleSpacing / 2 + fLabelFont.getSize() / 3, fLabelFont, SkPaint(),
                                         SkTextUtils::kCenter_Align);
                 SkTextUtils::DrawString(canvas, "Src Opaque",
                         kLabelSpacing + kShapeTypeSpacing * 1.5f + kShapeSpacing / 2 +
-                        kPaintSpacing, kSubtitleSpacing / 2 + fLabelPaint.getTextSize() / 3,
-                        fLabelPaint, SkTextUtils::kCenter_Align);
+                        kPaintSpacing, kSubtitleSpacing / 2 + fLabelFont.getSize() / 3,
+                                        fLabelFont, SkPaint(), SkTextUtils::kCenter_Align);
             }
 
             canvas->translate(0, kSubtitleSpacing + kShapeSpacing/2);
@@ -177,16 +176,16 @@
         canvas->translate(kMargin, kMargin);
         draw_pass(canvas, kBackground_Pass);
 
-        SkPaint titlePaint(fLabelPaint);
-        titlePaint.setTextSize(9 * titlePaint.getTextSize() / 8);
-        titlePaint.setFakeBoldText(true);
+        SkFont titleFont(fLabelFont);
+        titleFont.setSize(9 * titleFont.getSize() / 8);
+        titleFont.setEmbolden(true);
         SkTextUtils::DrawString(canvas, "Porter Duff",
                                 kLabelSpacing + 4 * kShapeTypeSpacing,
-                                kTitleSpacing / 2 + titlePaint.getTextSize() / 3, titlePaint,
+                                kTitleSpacing / 2 + titleFont.getSize() / 3, titleFont, SkPaint(),
                                 SkTextUtils::kCenter_Align);
         SkTextUtils::DrawString(canvas, "Advanced",
                                 kXfermodeTypeSpacing + kLabelSpacing + 4 * kShapeTypeSpacing,
-                                kTitleSpacing / 2 + titlePaint.getTextSize() / 3, titlePaint,
+                                kTitleSpacing / 2 + titleFont.getSize() / 3, titleFont, SkPaint(),
                                 SkTextUtils::kCenter_Align);
 
         draw_pass(canvas, kShape_Pass);
@@ -196,7 +195,7 @@
     void drawModeName(SkCanvas* canvas, SkBlendMode mode) {
         const char* modeName = SkBlendMode_Name(mode);
         SkTextUtils::DrawString(canvas, modeName, kLabelSpacing - kShapeSize / 4,
-                                fLabelPaint.getTextSize() / 4, fLabelPaint,
+                                fLabelFont.getSize() / 4, fLabelFont, SkPaint(),
                                 SkTextUtils::kRight_Align);
     }
 
@@ -266,7 +265,7 @@
     }
 
 private:
-    SkPaint   fLabelPaint;
+    SkFont    fLabelFont;
     SkPath    fOval;
     SkPath    fConcave;
 
diff --git a/gm/coloremoji_blendmodes.cpp b/gm/coloremoji_blendmodes.cpp
index 91b17dc..a28389e 100644
--- a/gm/coloremoji_blendmodes.cpp
+++ b/gm/coloremoji_blendmodes.cpp
@@ -114,14 +114,11 @@
         auto s = SkShader::MakeBitmapShader(fBG, SkShader::kRepeat_TileMode,
                                             SkShader::kRepeat_TileMode, &m);
 
-        SkPaint labelP;
-        labelP.setAntiAlias(true);
-        sk_tool_utils::set_portable_typeface(&labelP);
+        SkFont labelFont(sk_tool_utils::create_portable_typeface());
 
         SkPaint textP;
         textP.setAntiAlias(true);
-        textP.setTypeface(fColorType);
-        textP.setTextSize(SkIntToScalar(70));
+        SkFont textFont(fColorType, 70);
 
         const int W = 5;
 
@@ -146,15 +143,15 @@
                 SkAutoCanvasRestore arc(canvas, true);
                 canvas->clipRect(r);
                 textP.setBlendMode(gModes[i]);
-                textP.setTextEncoding(kUTF32_SkTextEncoding);
                 const char* text = sk_tool_utils::emoji_sample_text();
                 SkUnichar unichar = SkUTF::NextUTF8(&text, text + strlen(text));
                 SkASSERT(unichar >= 0);
-                canvas->drawText(&unichar, 4, x+ w/10.f, y + 7.f*h/8.f, textP);
+                canvas->drawSimpleText(&unichar, 4, kUTF32_SkTextEncoding, x+ w/10.f, y + 7.f*h/8.f,
+                                       textFont, textP);
             }
 #if 1
             const char* label = SkBlendMode_Name(gModes[i]);
-            SkTextUtils::DrawString(canvas, label, x + w/2, y - labelP.getTextSize()/2, labelP,
+            SkTextUtils::DrawString(canvas, label, x + w/2, y - labelFont.getSize()/2, labelFont, SkPaint(),
                                     SkTextUtils::kCenter_Align);
 #endif
             x += w + SkIntToScalar(10);
diff --git a/gm/dropshadowimagefilter.cpp b/gm/dropshadowimagefilter.cpp
index f1dfb6d..1710dbd 100644
--- a/gm/dropshadowimagefilter.cpp
+++ b/gm/dropshadowimagefilter.cpp
@@ -40,12 +40,11 @@
     paint.setImageFilter(std::move(imf));
     paint.setColor(SK_ColorGREEN);
     paint.setAntiAlias(true);
-    sk_tool_utils::set_portable_typeface(&paint);
-    paint.setTextSize(r.height()/2);
+
+    SkFont font(sk_tool_utils::create_portable_typeface(), r.height()/2);
     canvas->save();
     canvas->clipRect(r);
-    SkTextUtils::DrawString(canvas, "Text", r.centerX(), r.centerY(), paint,
-                            SkTextUtils::kCenter_Align);
+    SkTextUtils::DrawString(canvas, "Text", r.centerX(), r.centerY(), font, paint, SkTextUtils::kCenter_Align);
     canvas->restore();
 }
 
diff --git a/gm/imagefilterscropped.cpp b/gm/imagefilterscropped.cpp
index 225e881..179fdc3 100644
--- a/gm/imagefilterscropped.cpp
+++ b/gm/imagefilterscropped.cpp
@@ -43,11 +43,9 @@
     SkPaint paint;
     paint.setImageFilter(std::move(imf));
     paint.setColor(SK_ColorGREEN);
-    paint.setAntiAlias(true);
-    sk_tool_utils::set_portable_typeface(&paint);
-    paint.setTextSize(r.height()/2);
-    SkTextUtils::DrawString(canvas, "Text", r.centerX(), r.centerY(), paint,
-                            SkTextUtils::kCenter_Align);
+
+    SkFont font(sk_tool_utils::create_portable_typeface(), r.height()/2);
+    SkTextUtils::DrawString(canvas, "Text", r.centerX(), r.centerY(), font, paint, SkTextUtils::kCenter_Align);
 }
 
 static void draw_bitmap(SkCanvas* canvas, const SkRect& r, sk_sp<SkImageFilter> imf) {
diff --git a/gm/surface.cpp b/gm/surface.cpp
index 4d302ac..f8424ba 100644
--- a/gm/surface.cpp
+++ b/gm/surface.cpp
@@ -36,7 +36,6 @@
     SkPaint paint;
 
     paint.setAntiAlias(true);
-    paint.setLCDRenderText(true);
     paint.setDither(true);
 
     paint.setShader(make_shader());
@@ -44,9 +43,10 @@
     paint.setShader(nullptr);
 
     paint.setColor(SK_ColorWHITE);
-    paint.setTextSize(32);
-    sk_tool_utils::set_portable_typeface(&paint);
-    SkTextUtils::DrawString(canvas, label, W / 2, H * 3 / 4, paint, SkTextUtils::kCenter_Align);
+    SkFont font(sk_tool_utils::create_portable_typeface(), 32);
+    font.setEdging(SkFont::Edging::kSubpixelAntiAlias);
+    SkTextUtils::DrawString(canvas, label, W / 2, H * 3 / 4, font, paint,
+                            SkTextUtils::kCenter_Align);
 }
 
 class SurfacePropsGM : public skiagm::GM {
diff --git a/gm/tilemodes_scaled.cpp b/gm/tilemodes_scaled.cpp
index 093cb348..78c7641 100644
--- a/gm/tilemodes_scaled.cpp
+++ b/gm/tilemodes_scaled.cpp
@@ -99,15 +99,13 @@
         SkScalar y = SkIntToScalar(24);
         SkScalar x = SkIntToScalar(10)/scale;
 
+        SkFont font(sk_tool_utils::create_portable_typeface());
         for (size_t kx = 0; kx < SK_ARRAY_COUNT(gModes); kx++) {
             for (size_t ky = 0; ky < SK_ARRAY_COUNT(gModes); ky++) {
-                SkPaint p;
                 SkString str;
-                p.setAntiAlias(true);
-                sk_tool_utils::set_portable_typeface(&p);
                 str.printf("[%s,%s]", gModeNames[kx], gModeNames[ky]);
 
-                SkTextUtils::DrawString(canvas, str, scale*(x + r.width()/2), y, p,
+                SkTextUtils::DrawString(canvas, str.c_str(), scale*(x + r.width()/2), y, font, SkPaint(),
                                         SkTextUtils::kCenter_Align);
 
                 x += r.width() * 4 / 3;
@@ -222,13 +220,12 @@
         SkScalar y = SkIntToScalar(24);
         SkScalar x = SkIntToScalar(66);
 
-        SkPaint p;
-        p.setAntiAlias(true);
-        sk_tool_utils::set_portable_typeface(&p);
+        SkFont font(sk_tool_utils::create_portable_typeface());
 
         for (size_t kx = 0; kx < SK_ARRAY_COUNT(gModes); kx++) {
             SkString str(gModeNames[kx]);
-            SkTextUtils::DrawString(canvas, str, x + r.width()/2, y, p, SkTextUtils::kCenter_Align);
+            SkTextUtils::DrawString(canvas, str.c_str(), x + r.width()/2, y, font, SkPaint(),
+                                    SkTextUtils::kCenter_Align);
             x += r.width() * 4 / 3;
         }
 
@@ -238,7 +235,7 @@
             x = SkIntToScalar(16) + w;
 
             SkString str(gModeNames[ky]);
-            SkTextUtils::DrawString(canvas, str, x, y + h/2, p, SkTextUtils::kRight_Align);
+            SkTextUtils::DrawString(canvas, str.c_str(), x, y + h/2, font, SkPaint(), SkTextUtils::kRight_Align);
 
             x += SkIntToScalar(50);
             for (size_t kx = 0; kx < SK_ARRAY_COUNT(gModes); kx++) {
diff --git a/gm/xfermodes.cpp b/gm/xfermodes.cpp
index c8b1824..3af85d2 100644
--- a/gm/xfermodes.cpp
+++ b/gm/xfermodes.cpp
@@ -227,7 +227,8 @@
 
         SkPaint labelP;
         labelP.setAntiAlias(true);
-        sk_tool_utils::set_portable_typeface(&labelP);
+
+        SkFont font(sk_tool_utils::create_portable_typeface());
 
         const int W = 5;
 
@@ -258,8 +259,8 @@
 
 #if 1
                 const char* label = SkBlendMode_Name(gModes[i].fMode);
-                SkTextUtils::DrawString(canvas, label, x + w/2, y - labelP.getTextSize()/2,
-                                        labelP, SkTextUtils::kCenter_Align);
+                SkTextUtils::DrawString(canvas, label, x + w/2, y - font.getSize()/2,
+                                        font, labelP, SkTextUtils::kCenter_Align);
 #endif
                 x += w + SkIntToScalar(10);
                 if ((i % W) == W - 1) {
diff --git a/gm/xfermodes2.cpp b/gm/xfermodes2.cpp
index 21e6f2e..27f3dbc 100644
--- a/gm/xfermodes2.cpp
+++ b/gm/xfermodes2.cpp
@@ -33,9 +33,7 @@
         const SkScalar w = SkIntToScalar(kSize);
         const SkScalar h = SkIntToScalar(kSize);
 
-        SkPaint labelP;
-        labelP.setAntiAlias(true);
-        sk_tool_utils::set_portable_typeface(&labelP);
+        SkFont font(sk_tool_utils::create_portable_typeface());
 
         const int W = 6;
 
@@ -72,8 +70,7 @@
             canvas->restore();
 
 #if 1
-            SkTextUtils::DrawString(canvas, SkBlendMode_Name(mode),
-                                    x + w/2, y - labelP.getTextSize()/2, labelP,
+            SkTextUtils::DrawString(canvas, SkBlendMode_Name(mode), x + w/2, y - font.getSize()/2, font, SkPaint(),
                                     SkTextUtils::kCenter_Align);
 #endif
             x += w + SkIntToScalar(10);
