diff --git a/gm/arithmode.cpp b/gm/arithmode.cpp
index a765223..7a25c2e 100644
--- a/gm/arithmode.cpp
+++ b/gm/arithmode.cpp
@@ -149,12 +149,9 @@
                 canvas->translate(gap, 0);
 
                 // Label
-                SkPaint paint;
-                paint.setTextSize(SkIntToScalar(24));
-                paint.setAntiAlias(true);
-                sk_tool_utils::set_portable_typeface(&paint);
+                SkFont font(sk_tool_utils::create_portable_typeface(), 24);
                 SkString str(enforcePMColor ? "enforcePM" : "no enforcePM");
-                canvas->drawString(str, 0, paint.getTextSize(), paint);
+                canvas->drawString(str, 0, font.getSize(), font, SkPaint());
             }
             canvas->translate(0, HH + 12);
         }
diff --git a/gm/bitmapfilters.cpp b/gm/bitmapfilters.cpp
index 0551c02..98038ca 100644
--- a/gm/bitmapfilters.cpp
+++ b/gm/bitmapfilters.cpp
@@ -44,14 +44,15 @@
     SkAutoCanvasRestore acr(canvas, true);
 
     SkPaint paint;
+    paint.setAntiAlias(true);
+
     SkScalar x = 0;
     const int scale = 32;
 
-    paint.setAntiAlias(true);
-    sk_tool_utils::set_portable_typeface(&paint);
+    SkFont font(sk_tool_utils::create_portable_typeface());
     const char* name = sk_tool_utils::colortype_name(bm.colorType());
     canvas->drawString(name, x, SkIntToScalar(bm.height())*scale*5/8,
-                     paint);
+                       font, paint);
     canvas->translate(SkIntToScalar(48), 0);
 
     canvas->scale(SkIntToScalar(scale), SkIntToScalar(scale));
diff --git a/gm/blurimagevmask.cpp b/gm/blurimagevmask.cpp
index 9440959..c2dd516 100644
--- a/gm/blurimagevmask.cpp
+++ b/gm/blurimagevmask.cpp
@@ -16,15 +16,12 @@
     paint.setAntiAlias(true);
     paint.setColor(SK_ColorBLACK);
 
-    SkPaint textPaint;
-    textPaint.setAntiAlias(true);
-    sk_tool_utils::set_portable_typeface(&textPaint);
-    textPaint.setTextSize(SkIntToScalar(25));
+    SkFont font(sk_tool_utils::create_portable_typeface(), 25);
 
     const double sigmas[] = {3.0, 8.0, 16.0, 24.0, 32.0};
 
-    canvas->drawString("mask blur",  285, 50, textPaint);
-    canvas->drawString("image blur", 285 + 250, 50, textPaint);
+    canvas->drawString("mask blur",  285, 50, font, paint);
+    canvas->drawString("image blur", 285 + 250, 50, font, paint);
 
 
     SkRect r = {35, 100, 135, 200};
@@ -34,7 +31,7 @@
 
         char out[100];
         sprintf(out, "Sigma: %g", sigma);
-        canvas->drawString(out, r.left(), r.bottom() + 35, textPaint);
+        canvas->drawString(out, r.left(), r.bottom() + 35, font, paint);
 
         r.offset(250, 0);
 
diff --git a/gm/blurs.cpp b/gm/blurs.cpp
index bd666bb..6892ad3 100644
--- a/gm/blurs.cpp
+++ b/gm/blurs.cpp
@@ -14,53 +14,53 @@
 #include "SkPath.h"
 
 DEF_SIMPLE_GM_BG(blurs, canvas, 700, 500, 0xFFDDDDDD) {
-        SkBlurStyle NONE = SkBlurStyle(-999);
-        const struct {
-            SkBlurStyle fStyle;
-            int         fCx, fCy;
-        } gRecs[] = {
-            { NONE,                 0,  0 },
-            { kInner_SkBlurStyle,  -1,  0 },
-            { kNormal_SkBlurStyle,  0,  1 },
-            { kSolid_SkBlurStyle,   0, -1 },
-            { kOuter_SkBlurStyle,   1,  0 },
-        };
+    SkBlurStyle NONE = SkBlurStyle(-999);
+    const struct {
+        SkBlurStyle fStyle;
+        int         fCx, fCy;
+    } gRecs[] = {
+        { NONE,                 0,  0 },
+        { kInner_SkBlurStyle,  -1,  0 },
+        { kNormal_SkBlurStyle,  0,  1 },
+        { kSolid_SkBlurStyle,   0, -1 },
+        { kOuter_SkBlurStyle,   1,  0 },
+    };
 
-        SkPaint paint;
-        paint.setAntiAlias(true);
-        sk_tool_utils::set_portable_typeface(&paint);
-        paint.setTextSize(SkIntToScalar(25));
-        canvas->translate(SkIntToScalar(-40), SkIntToScalar(0));
+    SkPaint paint;
+    paint.setAntiAlias(true);
+    paint.setColor(SK_ColorBLUE);
 
-        paint.setColor(SK_ColorBLUE);
-        for (size_t i = 0; i < SK_ARRAY_COUNT(gRecs); i++) {
-            if (gRecs[i].fStyle != NONE) {
-                paint.setMaskFilter(SkMaskFilter::MakeBlur(gRecs[i].fStyle,
-                                       SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(20))));
-            } else {
-                paint.setMaskFilter(nullptr);
-            }
-            canvas->drawCircle(SkIntToScalar(200 + gRecs[i].fCx*100),
-                               SkIntToScalar(200 + gRecs[i].fCy*100),
-                               SkIntToScalar(50),
-                               paint);
-        }
-        // draw text
-        {
-            paint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle,
-                                       SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(4))));
-            SkScalar x = SkIntToScalar(70);
-            SkScalar y = SkIntToScalar(400);
-            paint.setColor(SK_ColorBLACK);
-            canvas->drawString("Hamburgefons Style", x, y, paint);
-            canvas->drawString("Hamburgefons Style",
-                             x, y + SkIntToScalar(50), paint);
+    canvas->translate(SkIntToScalar(-40), SkIntToScalar(0));
+
+    for (size_t i = 0; i < SK_ARRAY_COUNT(gRecs); i++) {
+        if (gRecs[i].fStyle != NONE) {
+            paint.setMaskFilter(SkMaskFilter::MakeBlur(gRecs[i].fStyle,
+                                   SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(20))));
+        } else {
             paint.setMaskFilter(nullptr);
-            paint.setColor(SK_ColorWHITE);
-            x -= SkIntToScalar(2);
-            y -= SkIntToScalar(2);
-            canvas->drawString("Hamburgefons Style", x, y, paint);
         }
+        canvas->drawCircle(SkIntToScalar(200 + gRecs[i].fCx*100),
+                           SkIntToScalar(200 + gRecs[i].fCy*100),
+                           SkIntToScalar(50),
+                           paint);
+    }
+    // draw text
+    {
+        SkFont font(sk_tool_utils::create_portable_typeface(), 25);
+        paint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle,
+                                   SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(4))));
+        SkScalar x = SkIntToScalar(70);
+        SkScalar y = SkIntToScalar(400);
+        paint.setColor(SK_ColorBLACK);
+        canvas->drawString("Hamburgefons Style", x, y, font, paint);
+        canvas->drawString("Hamburgefons Style",
+                         x, y + SkIntToScalar(50), font, paint);
+        paint.setMaskFilter(nullptr);
+        paint.setColor(SK_ColorWHITE);
+        x -= SkIntToScalar(2);
+        y -= SkIntToScalar(2);
+        canvas->drawString("Hamburgefons Style", x, y, font, paint);
+    }
 }
 
 //////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/gm/bmpfilterqualityrepeat.cpp b/gm/bmpfilterqualityrepeat.cpp
index 313fd93..ba41c3a 100644
--- a/gm/bmpfilterqualityrepeat.cpp
+++ b/gm/bmpfilterqualityrepeat.cpp
@@ -64,11 +64,12 @@
         lm.setTranslateY(330);
 
         SkPaint textPaint;
-        sk_tool_utils::set_portable_typeface(&textPaint);
         textPaint.setAntiAlias(true);
 
         SkPaint bmpPaint(textPaint);
 
+        SkFont font(sk_tool_utils::create_portable_typeface());
+
         SkAutoCanvasRestore acr(canvas, true);
 
         for (size_t q = 0; q < SK_ARRAY_COUNT(kQualities); ++q) {
@@ -76,7 +77,7 @@
             bmpPaint.setShader(SkShader::MakeBitmapShader(fBmp, kTM, kTM, &lm));
             bmpPaint.setFilterQuality(kQualities[q].fQuality);
             canvas->drawRect(rect, bmpPaint);
-            canvas->drawString(kQualities[q].fName, 20, 40, textPaint);
+            canvas->drawString(kQualities[q].fName, 20, 40, font, textPaint);
             canvas->translate(250, 0);
         }
 
diff --git a/gm/colorwheel.cpp b/gm/colorwheel.cpp
index e970af5..230b85c 100644
--- a/gm/colorwheel.cpp
+++ b/gm/colorwheel.cpp
@@ -40,22 +40,22 @@
 
 DEF_SIMPLE_GM(colorwheelnative, canvas, 128, 28) {
     SkPaint paint;
-    sk_tool_utils::set_portable_typeface(&paint, "sans-serif", SkFontStyle::Bold());
-    paint.setTextSize(18.0f);
+    SkFont font(sk_tool_utils::create_portable_typeface("sans-serif", SkFontStyle::Bold()), 18);
+    font.setEdging(SkFont::Edging::kAlias);
 
     canvas->clear(SK_ColorLTGRAY);
     paint.setColor(SK_ColorRED);
-    canvas->drawString("R", 8.0f, 20.0f, paint);
+    canvas->drawString("R", 8.0f, 20.0f, font, paint);
     paint.setColor(SK_ColorGREEN);
-    canvas->drawString("G", 24.0f, 20.0f, paint);
+    canvas->drawString("G", 24.0f, 20.0f, font, paint);
     paint.setColor(SK_ColorBLUE);
-    canvas->drawString("B", 40.0f, 20.0f, paint);
+    canvas->drawString("B", 40.0f, 20.0f, font, paint);
     paint.setColor(SK_ColorCYAN);
-    canvas->drawString("C", 56.0f, 20.0f, paint);
+    canvas->drawString("C", 56.0f, 20.0f, font, paint);
     paint.setColor(SK_ColorMAGENTA);
-    canvas->drawString("M", 72.0f, 20.0f, paint);
+    canvas->drawString("M", 72.0f, 20.0f, font, paint);
     paint.setColor(SK_ColorYELLOW);
-    canvas->drawString("Y", 88.0f, 20.0f, paint);
+    canvas->drawString("Y", 88.0f, 20.0f, font, paint);
     paint.setColor(SK_ColorBLACK);
-    canvas->drawString("K", 104.0f, 20.0f, paint);
+    canvas->drawString("K", 104.0f, 20.0f, font, paint);
 }
diff --git a/gm/complexclip3.cpp b/gm/complexclip3.cpp
index 421b3d8..afb5a5a 100644
--- a/gm/complexclip3.cpp
+++ b/gm/complexclip3.cpp
@@ -52,8 +52,8 @@
 
         SkPaint paint;
         paint.setAntiAlias(true);
-        sk_tool_utils::set_portable_typeface(&paint);
-        paint.setTextSize(SkIntToScalar(20));
+
+        SkFont font(sk_tool_utils::create_portable_typeface(), 20);
 
         constexpr struct {
             SkClipOp    fOp;
@@ -106,7 +106,7 @@
                                                    doAAB ? "A" : "B",
                                                    doInvB ? "I" : "N");
 
-                        canvas->drawString(str.c_str(), txtX, SkIntToScalar(130), paint);
+                        canvas->drawString(str.c_str(), txtX, SkIntToScalar(130), font, paint);
                         if (doInvB) {
                             canvas->translate(SkIntToScalar(150),0);
                         } else {
diff --git a/gm/convexpolyclip.cpp b/gm/convexpolyclip.cpp
index af073c6..2ab41ca 100644
--- a/gm/convexpolyclip.cpp
+++ b/gm/convexpolyclip.cpp
@@ -57,18 +57,19 @@
         mat.postScale(SK_Scalar1 / 3, SK_Scalar1 / 3);
     }
 
-    paint.setAntiAlias(true);
-    sk_tool_utils::set_portable_typeface(&paint);
-    paint.setTextSize(wScalar / 2.2f);
+    SkFont font(sk_tool_utils::create_portable_typeface(), wScalar / 2.2f);
+
     paint.setShader(nullptr);
     paint.setColor(SK_ColorLTGRAY);
     constexpr char kTxt[] = "Skia";
-    SkPoint texPos = { wScalar / 17, hScalar / 2 + paint.getTextSize() / 2.5f };
-    canvas.drawText(kTxt, SK_ARRAY_COUNT(kTxt)-1, texPos.fX, texPos.fY, paint);
+    SkPoint texPos = { wScalar / 17, hScalar / 2 + font.getSize() / 2.5f };
+    canvas.drawSimpleText(kTxt, SK_ARRAY_COUNT(kTxt)-1, kUTF8_SkTextEncoding,
+                          texPos.fX, texPos.fY, font, paint);
     paint.setColor(SK_ColorBLACK);
     paint.setStyle(SkPaint::kStroke_Style);
     paint.setStrokeWidth(SK_Scalar1);
-    canvas.drawText(kTxt, SK_ARRAY_COUNT(kTxt)-1, texPos.fX, texPos.fY, paint);
+    canvas.drawSimpleText(kTxt, SK_ARRAY_COUNT(kTxt)-1, kUTF8_SkTextEncoding,
+                          texPos.fX, texPos.fY, font, paint);
     return bmp;
 }
 
diff --git a/gm/dashing.cpp b/gm/dashing.cpp
index 9a52689..cacdc00 100644
--- a/gm/dashing.cpp
+++ b/gm/dashing.cpp
@@ -560,12 +560,13 @@
     p.setStrokeWidth(10);
     p.setStrokeCap(SkPaint::kRound_Cap);
     p.setStrokeJoin(SkPaint::kRound_Join);
-    p.setTextSize(100);
     p.setARGB(0xff, 0xbb, 0x00, 0x00);
-    sk_tool_utils::set_portable_typeface(&p);
+
+    SkFont font(sk_tool_utils::create_portable_typeface(), 100);
+
     const SkScalar intervals[] = { 12, 12 };
     p.setPathEffect(SkDashPathEffect::Make(intervals, SK_ARRAY_COUNT(intervals), 0));
-    canvas->drawString("Sausages", 10, 90, p);
+    canvas->drawString("Sausages", 10, 90, font, p);
     canvas->drawLine(8, 120, 456, 120, p);
 }
 
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h
index 7b54a2b..49aff57 100644
--- a/include/core/SkCanvas.h
+++ b/include/core/SkCanvas.h
@@ -27,6 +27,10 @@
 #include "SkSurfaceProps.h"
 #include "SkVertices.h"
 
+#ifndef SK_SUPPORT_LEGACY_DRAWSTRING
+#define SK_SUPPORT_LEGACY_DRAWSTRING
+#endif
+
 class GrContext;
 class GrRenderTargetContext;
 class SkAndroidFrameworkUtils;
@@ -1870,6 +1874,7 @@
     void drawSimpleText(const void* text, size_t byteLength, SkTextEncoding encoding,
                         SkScalar x, SkScalar y, const SkFont& font, const SkPaint& paint);
 
+#ifdef SK_SUPPORT_LEGACY_DRAWSTRING
     /** Draws null terminated string, with origin at (x, y), using clip, SkMatrix, and
         SkPaint paint.
 
@@ -1920,6 +1925,18 @@
         @param paint   text size, blend, color, and so on, used to draw
     */
     void drawString(const SkString& string, SkScalar x, SkScalar y, const SkPaint& paint);
+#endif
+
+    // Experimental
+    void drawString(const char str[], SkScalar x, SkScalar y, const SkFont& font,
+                    const SkPaint& paint) {
+        this->drawSimpleText(str, strlen(str), kUTF8_SkTextEncoding, x, y, font, paint);
+    }
+    // Experimental
+    void drawString(const SkString& str, SkScalar x, SkScalar y, const SkFont& font,
+                    const SkPaint& paint) {
+        this->drawSimpleText(str.c_str(), str.size(), kUTF8_SkTextEncoding, x, y, font, paint);
+    }
 
     /** Draws SkTextBlob blob at (x, y), using clip, SkMatrix, and SkPaint paint.
 
