| Index: src/gpu/GrDistanceFieldTextContext.cpp | 
| diff --git a/src/gpu/GrDistanceFieldTextContext.cpp b/src/gpu/GrDistanceFieldTextContext.cpp | 
| index df07204fcb352630293eb2585dce12c605bbb109..3b5bd304d3036035840563e7c7f7b08b9a782d79 100755 | 
| --- a/src/gpu/GrDistanceFieldTextContext.cpp | 
| +++ b/src/gpu/GrDistanceFieldTextContext.cpp | 
| @@ -124,12 +124,13 @@ void GrDistanceFieldTextContext::setupCoverageEffect(const SkColor& filteredColo | 
| GrTextureParams gammaParams(SkShader::kClamp_TileMode, GrTextureParams::kNone_FilterMode); | 
|  | 
| uint32_t textureUniqueID = fCurrTexture->getUniqueID(); | 
| +    const SkMatrix& ctm = fContext->getMatrix(); | 
|  | 
| // set up any flags | 
| uint32_t flags = 0; | 
| -    flags |= fTextMatrix.isSimilarity() ? kSimilarity_DistanceFieldEffectFlag : 0; | 
| +    flags |= ctm.isSimilarity() ? kSimilarity_DistanceFieldEffectFlag : 0; | 
| flags |= fUseLCDText ? kUseLCD_DistanceFieldEffectFlag : 0; | 
| -    flags |= fUseLCDText && fTextMatrix.rectStaysRect() ? | 
| +    flags |= fUseLCDText && ctm.rectStaysRect() ? | 
| kRectToRect_DistanceFieldEffectFlag : 0; | 
| bool useBGR = SkPixelGeometryIsBGR(fDeviceProperties.fPixelGeometry); | 
| flags |= fUseLCDText && useBGR ? kBGR_DistanceFieldEffectFlag : 0; | 
| @@ -176,7 +177,7 @@ void GrDistanceFieldTextContext::flushGlyphs() { | 
| GrDrawState* drawState = fDrawTarget->drawState(); | 
| GrDrawState::AutoRestoreEffects are(drawState); | 
|  | 
| -    drawState->setFromPaint(fPaint, fTextMatrix, fContext->getRenderTarget()); | 
| +    drawState->setFromPaint(fPaint, fContext->getMatrix(), fContext->getRenderTarget()); | 
|  | 
| if (fCurrVertex > 0) { | 
| // setup our sampler state for our text texture/atlas | 
| @@ -445,28 +446,28 @@ inline void GrDistanceFieldTextContext::init(const GrPaint& paint, const SkPaint | 
|  | 
| fStrike = NULL; | 
|  | 
| -    fTextMatrix = fContext->getMatrix(); | 
| +    const SkMatrix& ctm = fContext->getMatrix(); | 
|  | 
| // getMaxScale doesn't support perspective, so neither do we at the moment | 
| -    SkASSERT(!fTextMatrix.hasPerspective()); | 
| -    SkScalar maxScale = fTextMatrix.getMaxScale(); | 
| +    SkASSERT(!ctm.hasPerspective()); | 
| +    SkScalar maxScale = ctm.getMaxScale(); | 
| SkScalar textSize = fSkPaint.getTextSize(); | 
| -    // if we have non-unity scale, we need to adjust our text size accordingly | 
| -    // to avoid aliasing, and prescale the matrix by the inverse to end up with the same size | 
| +    SkScalar scaledTextSize = textSize; | 
| +    // if we have non-unity scale, we need to choose our base text size | 
| +    // based on the SkPaint's text size multiplied by the max scale factor | 
| // TODO: do we need to do this if we're scaling down (i.e. maxScale < 1)? | 
| if (maxScale > 0 && !SkScalarNearlyEqual(maxScale, SK_Scalar1)) { | 
| -        textSize *= maxScale; | 
| -        fTextMatrix.preScale(SK_Scalar1 / maxScale, SK_Scalar1 / maxScale); | 
| +        scaledTextSize *= maxScale; | 
| } | 
|  | 
| fCurrVertex = 0; | 
|  | 
| fVertices = NULL; | 
|  | 
| -    if (textSize <= kSmallDFFontLimit) { | 
| +    if (scaledTextSize <= kSmallDFFontLimit) { | 
| fTextRatio = textSize / kSmallDFFontSize; | 
| fSkPaint.setTextSize(SkIntToScalar(kSmallDFFontSize)); | 
| -    } else if (textSize <= kMediumDFFontLimit) { | 
| +    } else if (scaledTextSize <= kMediumDFFontLimit) { | 
| fTextRatio = textSize / kMediumDFFontSize; | 
| fSkPaint.setTextSize(SkIntToScalar(kMediumDFFontSize)); | 
| } else { | 
|  |