Move appending of large glyphs into GrAtlasTextBlob

BUG=skia:

Review URL: https://codereview.chromium.org/1517563002
diff --git a/src/gpu/GrAtlasTextBlob.cpp b/src/gpu/GrAtlasTextBlob.cpp
index 1cd25e7..aa50cbf 100644
--- a/src/gpu/GrAtlasTextBlob.cpp
+++ b/src/gpu/GrAtlasTextBlob.cpp
@@ -11,7 +11,16 @@
                                   const SkRect& positions,
                                   GrColor color,
                                   GrBatchTextStrike* strike,
-                                  GrGlyph* glyph) {
+                                  GrGlyph* glyph,
+                                  GrFontScaler* scaler, const SkGlyph& skGlyph,
+                                  SkScalar x, SkScalar y, SkScalar scale, bool applyVM) {
+
+    // If the glyph is too large we fall back to paths
+    if (glyph->fTooLargeForAtlas) {
+        this->appendLargeGlyph(glyph, scaler, skGlyph, x, y, scale, applyVM);
+        return;
+    }
+
     Run& run = fRuns[runIndex];
     GrMaskFormat format = glyph->fMaskFormat;
 
@@ -86,6 +95,19 @@
     subRun->glyphAppended();
 }
 
+void GrAtlasTextBlob::appendLargeGlyph(GrGlyph* glyph, GrFontScaler* scaler, const SkGlyph& skGlyph,
+                                       SkScalar x, SkScalar y, SkScalar scale, bool applyVM) {
+    if (nullptr == glyph->fPath) {
+        const SkPath* glyphPath = scaler->getGlyphPath(skGlyph);
+        if (!glyphPath) {
+            return;
+        }
+
+        glyph->fPath = new SkPath(*glyphPath);
+    }
+    fBigGlyphs.push_back(GrAtlasTextBlob::BigGlyph(*glyph->fPath, x, y, scale, applyVM));
+}
+
 bool GrAtlasTextBlob::mustRegenerate(SkScalar* outTransX, SkScalar* outTransY,
                                      const SkPaint& paint,
                                      GrColor color, const SkMaskFilter::BlurRec& blurRec,