| Index: src/gpu/GrAtlasTextContext.cpp | 
| diff --git a/src/gpu/GrAtlasTextContext.cpp b/src/gpu/GrAtlasTextContext.cpp | 
| index aa4c51d85aad0958ed6f02a155bc8fd6a09a538e..cbcfd654658566e5c1a4df91ab9ed5140a5f5aae 100644 | 
| --- a/src/gpu/GrAtlasTextContext.cpp | 
| +++ b/src/gpu/GrAtlasTextContext.cpp | 
| @@ -1341,7 +1341,7 @@ bool GrAtlasTextContext::dfAppendGlyph(GrAtlasTextBlob* blob, int runIndex, | 
| // TODO combine with the above | 
| // If the glyph is too large we fall back to paths | 
| if (glyph->fTooLargeForAtlas) { | 
| -        this->appendGlyphPath(blob, glyph, scaler, skGlyph, sx - dx, sy - dy); | 
| +        this->appendGlyphPath(blob, glyph, scaler, skGlyph, sx - dx, sy - dy, scale, true); | 
| return true; | 
| } | 
|  | 
| @@ -1363,7 +1363,8 @@ bool GrAtlasTextContext::dfAppendGlyph(GrAtlasTextBlob* blob, int runIndex, | 
|  | 
| inline void GrAtlasTextContext::appendGlyphPath(GrAtlasTextBlob* blob, GrGlyph* glyph, | 
| GrFontScaler* scaler, const SkGlyph& skGlyph, | 
| -                                                SkScalar x, SkScalar y) { | 
| +                                                SkScalar x, SkScalar y, SkScalar scale, | 
| +                                                bool applyVM) { | 
| if (NULL == glyph->fPath) { | 
| const SkPath* glyphPath = scaler->getGlyphPath(skGlyph); | 
| if (!glyphPath) { | 
| @@ -1372,7 +1373,7 @@ inline void GrAtlasTextContext::appendGlyphPath(GrAtlasTextBlob* blob, GrGlyph* | 
|  | 
| glyph->fPath = SkNEW_ARGS(SkPath, (*glyphPath)); | 
| } | 
| -    blob->fBigGlyphs.push_back(GrAtlasTextBlob::BigGlyph(*glyph->fPath, x, y)); | 
| +    blob->fBigGlyphs.push_back(GrAtlasTextBlob::BigGlyph(*glyph->fPath, x, y, scale, applyVM)); | 
| } | 
|  | 
| inline void GrAtlasTextContext::appendGlyphCommon(GrAtlasTextBlob* blob, Run* run, | 
| @@ -1931,6 +1932,7 @@ private: | 
|  | 
| // TODO see note above | 
| if (kLCDDistanceField_MaskType == fMaskType && this->color() != that->color()) { | 
| +                return false; | 
| } | 
| } | 
|  | 
| @@ -2158,21 +2160,19 @@ inline void GrAtlasTextContext::flushBigGlyphs(GrAtlasTextBlob* cacheBlob, GrRen | 
| return; | 
| } | 
|  | 
| -    SkMatrix pathMatrix; | 
| -    if (!cacheBlob->fViewMatrix.invert(&pathMatrix)) { | 
| -        SkDebugf("could not invert viewmatrix\n"); | 
| -        return; | 
| -    } | 
| - | 
| for (int i = 0; i < cacheBlob->fBigGlyphs.count(); i++) { | 
| GrAtlasTextBlob::BigGlyph& bigGlyph = cacheBlob->fBigGlyphs[i]; | 
| bigGlyph.fVx += transX; | 
| bigGlyph.fVy += transY; | 
| -        SkMatrix translate = cacheBlob->fViewMatrix; | 
| -        translate.postTranslate(bigGlyph.fVx, bigGlyph.fVy); | 
| +        SkMatrix ctm; | 
| +        ctm.setScale(bigGlyph.fScale, bigGlyph.fScale); | 
| +        ctm.postTranslate(bigGlyph.fVx, bigGlyph.fVy); | 
| +        if (bigGlyph.fApplyVM) { | 
| +            ctm.postConcat(cacheBlob->fViewMatrix); | 
| +        } | 
|  | 
| GrBlurUtils::drawPathWithMaskFilter(fContext, fDrawContext, rt, clip, bigGlyph.fPath, | 
| -                                            skPaint, translate, &pathMatrix, clipBounds, false); | 
| +                                            skPaint, ctm, nullptr, clipBounds, false); | 
| } | 
| } | 
|  | 
|  |