| Index: src/core/SkShader.cpp | 
| diff --git a/src/core/SkShader.cpp b/src/core/SkShader.cpp | 
| index ebe1a74cc2e6a7e11c9ec50de104348c79b5e3de..8dbe6d7029618796d10346ac87fded59b6943603 100644 | 
| --- a/src/core/SkShader.cpp | 
| +++ b/src/core/SkShader.cpp | 
| @@ -60,7 +60,7 @@ SkShader::~SkShader() { | 
|  | 
| void SkShader::flatten(SkWriteBuffer& buffer) const { | 
| this->INHERITED::flatten(buffer); | 
| -    bool hasLocalM = this->hasLocalMatrix(); | 
| +    bool hasLocalM = !fLocalMatrix.isIdentity(); | 
| buffer.writeBool(hasLocalM); | 
| if (hasLocalM) { | 
| buffer.writeMatrix(fLocalMatrix); | 
| @@ -68,13 +68,10 @@ void SkShader::flatten(SkWriteBuffer& buffer) const { | 
| } | 
|  | 
| bool SkShader::computeTotalInverse(const ContextRec& rec, SkMatrix* totalInverse) const { | 
| -    const SkMatrix* m = rec.fMatrix; | 
| -    SkMatrix        total; | 
| +    SkMatrix total; | 
| +    total.setConcat(*rec.fMatrix, fLocalMatrix); | 
|  | 
| -    if (this->hasLocalMatrix()) { | 
| -        total.setConcat(*m, this->getLocalMatrix()); | 
| -        m = &total; | 
| -    } | 
| +    const SkMatrix* m = &total; | 
| if (rec.fLocalMatrix) { | 
| total.setConcat(*m, *rec.fLocalMatrix); | 
| m = &total; | 
| @@ -235,9 +232,9 @@ SkShader* SkShader::CreatePictureShader(SkPicture* src, TileMode tmx, TileMode t | 
|  | 
| #ifndef SK_IGNORE_TO_STRING | 
| void SkShader::toString(SkString* str) const { | 
| -    if (this->hasLocalMatrix()) { | 
| +    if (!fLocalMatrix.isIdentity()) { | 
| str->append(" "); | 
| -        this->getLocalMatrix().toString(str); | 
| +        fLocalMatrix.toString(str); | 
| } | 
| } | 
| #endif | 
|  |