make runfont be a font
... this makes building faster.

Running TextBlobMakeBench (on mac)

Before:
curr/maxrss	loops	min	median	mean	max	stddev	samples   	config	bench
  16/16  MB	2	279µs	279µs	283µs	300µs	3%	██▁▁▁▁▁▁▁▁	nonrendering	TextBlobMakeBench

After:
curr/maxrss	loops	min	median	mean	max	stddev	samples   	config	bench
  16/16  MB	2	185µs	186µs	198µs	218µs	8%	▁▁▁▁▁▁████	nonrendering	TextBlobMakeBench

Bug: skia:
Change-Id: I9fc14b019bbaeb130f354ff9d4966a5190bff8bd
Reviewed-on: https://skia-review.googlesource.com/c/174841
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Herb Derby <herb@google.com>
diff --git a/src/core/SkTextBlobPriv.h b/src/core/SkTextBlobPriv.h
index 582c301..e620a3d 100644
--- a/src/core/SkTextBlobPriv.h
+++ b/src/core/SkTextBlobPriv.h
@@ -10,6 +10,7 @@
 
 #include "SkColorFilter.h"
 #include "SkDrawLooper.h"
+#include "SkFont.h"
 #include "SkImageFilter.h"
 #include "SkMaskFilter.h"
 #include "SkPaintPriv.h"
@@ -59,45 +60,18 @@
 };
 
 // TODO(fmalita): replace with SkFont.
-class SkRunFont : SkNoncopyable {
+class SkRunFont : public SkFont {
 public:
+    SkRunFont(const SkFont& font) : SkFont(font) {}
     SkRunFont(const SkPaint& paint);
 
     void applyToPaint(SkPaint* paint) const;
 
-    bool operator==(const SkRunFont& other) const;
+    bool operator==(const SkRunFont& other) const { return SkFont::operator==(other); }
 
     bool operator!=(const SkRunFont& other) const {
         return !(*this == other);
     }
-
-    uint32_t flags() const { return fFlags; }
-
-private:
-    friend SkPaint;
-    const static uint32_t kFlagsMask =
-            SkPaint::kAntiAlias_Flag          |
-            SkPaint::kFakeBoldText_Flag       |
-            SkPaint::kLinearText_Flag         |
-            SkPaint::kSubpixelText_Flag       |
-            SkPaint::kLCDRenderText_Flag      |
-            SkPaint::kEmbeddedBitmapText_Flag |
-            SkPaint::kAutoHinting_Flag        ;
-
-    SkScalar                 fSize;
-    SkScalar                 fScaleX;
-
-    // Keep this sk_sp off the first position, to avoid interfering with SkNoncopyable
-    // empty baseclass optimization (http://code.google.com/p/skia/issues/detail?id=3694).
-    sk_sp<SkTypeface>        fTypeface;
-    SkScalar                 fSkewX;
-
-    static_assert(static_cast<unsigned>(kFull_SkFontHinting) < 4, "insufficient_hinting_bits");
-    uint32_t                 fHinting : 2;
-    static_assert((kFlagsMask & 0xffff) == kFlagsMask, "insufficient_flags_bits");
-    uint32_t                 fFlags : 16;
-
-    typedef SkNoncopyable INHERITED;
 };
 
 //
@@ -124,7 +98,7 @@
 
 class SkTextBlob::RunRecord {
 public:
-    RunRecord(uint32_t count, uint32_t textSize,  const SkPoint& offset, const SkPaint& font, GlyphPositioning pos)
+    RunRecord(uint32_t count, uint32_t textSize,  const SkPoint& offset, const SkFont& font, GlyphPositioning pos)
             : fFont(font)
             , fCount(count)
             , fOffset(offset)
@@ -221,24 +195,9 @@
 };
 
 // (paint->getFlags() & ~kFlagsMask) | fFlags
-inline SkPaint::SkPaint(const SkPaint& basePaint, const SkRunFont& runFont)
-        : fTypeface{runFont.fTypeface}
-        , fPathEffect{basePaint.fPathEffect}
-        , fShader{basePaint.fShader}
-        , fMaskFilter{basePaint.fMaskFilter}
-        , fColorFilter{basePaint.fColorFilter}
-        , fDrawLooper{basePaint.fDrawLooper}
-        , fImageFilter{basePaint.fImageFilter}
-        , fTextSize{runFont.fSize}
-        , fTextScaleX{runFont.fScaleX}
-        , fTextSkewX{runFont.fSkewX}
-        , fColor4f{basePaint.fColor4f}
-        , fWidth{basePaint.fWidth}
-        , fMiterLimit{basePaint.fMiterLimit}
-        , fBlendMode{basePaint.fBlendMode}
-        , fBitfieldsUInt{(basePaint.fBitfieldsUInt & ~SkRunFont::kFlagsMask) | runFont.fFlags} {
+inline SkPaint::SkPaint(const SkPaint& basePaint, const SkRunFont& runFont) : SkPaint(basePaint) {
     fBitfields.fTextEncoding = (unsigned)kGlyphID_SkTextEncoding;
-    fBitfields.fHinting = runFont.fHinting;
+    runFont.applyToPaint(this);
 }
 
 /**