Move path fallback logic into drawer

Change-Id: I6960b775f92b1013e0a826ac6aa1f8464ebf99f8
Reviewed-on: https://skia-review.googlesource.com/145000
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
diff --git a/src/gpu/text/GrTextContext.cpp b/src/gpu/text/GrTextContext.cpp
index 45145f6..93bd182 100644
--- a/src/gpu/text/GrTextContext.cpp
+++ b/src/gpu/text/GrTextContext.cpp
@@ -238,31 +238,27 @@
             auto cache = cacheBlob->setupCache(
                     runIndex, props, scalerContextFlags, runPaint, &viewMatrix);
 
-            auto drawOneGlyph =
+            auto perGlyph =
                     [cacheBlob, runIndex, glyphCache, &currStrike, runPaint, cache{cache.get()}]
-                    (const SkMask& mask, const SkGlyph& glyph, SkPoint position) {
-                        SkScalar sx = SkScalarFloorToScalar(position.fX),
-                                 sy = SkScalarFloorToScalar(position.fY);
-
-                        if (glyph_too_big_for_atlas(glyph)) {
-                            SkRect glyphRect =
-                                    rect_to_draw(glyph, {sx, sy}, SK_Scalar1,
-                                                 GrGlyph::kCoverage_MaskStyle);
-                            if (!glyphRect.isEmpty()) {
-                                const SkPath* glyphPath = cache->findPath(glyph);
-                                if (glyphPath != nullptr) {
-                                    cacheBlob->appendPathGlyph(
-                                            runIndex, *glyphPath, sx, sy, SK_Scalar1, true);
-                                }
-                            }
-                        } else {
-                            AppendGlyph(cacheBlob, runIndex, glyphCache, &currStrike,
-                                        glyph, GrGlyph::kCoverage_MaskStyle, sx, sy,
-                                        runPaint.filteredPremulColor(), cache, SK_Scalar1, false);
-                        }
+                    (const SkGlyph& glyph, SkPoint mappedPt) {
+                        SkScalar sx = SkScalarFloorToScalar(mappedPt.fX),
+                                 sy = SkScalarFloorToScalar(mappedPt.fY);
+                        AppendGlyph(cacheBlob, runIndex, glyphCache, &currStrike,
+                                    glyph, GrGlyph::kCoverage_MaskStyle, sx, sy,
+                                    runPaint.filteredPremulColor(), cache, SK_Scalar1, false);
             };
 
-            glyphDrawer->drawUsingMasks(cache.get(), glyphRun, origin, viewMatrix, drawOneGlyph);
+            auto perPath =
+                    [cacheBlob, runIndex]
+                    (const SkPath* path, const SkGlyph& glyph, SkPoint position) {
+                        SkScalar sx = SkScalarFloorToScalar(position.fX),
+                                 sy = SkScalarFloorToScalar(position.fY);
+                        cacheBlob->appendPathGlyph(
+                                runIndex, *path, sx, sy, SK_Scalar1, true);
+            };
+
+            glyphDrawer->drawGlyphRunAsGlyphWithPathFallback(
+                    cache.get(), glyphRun, origin, viewMatrix, perGlyph, perPath);
         }
         runIndex += 1;
     }