| Index: src/gpu/effects/GrDashingEffect.cpp | 
| diff --git a/src/gpu/effects/GrDashingEffect.cpp b/src/gpu/effects/GrDashingEffect.cpp | 
| index a284b272db239bea4d31ac991a2b81aca6615a7e..3f0df6737796a42a0ccbba098e23855843908d50 100644 | 
| --- a/src/gpu/effects/GrDashingEffect.cpp | 
| +++ b/src/gpu/effects/GrDashingEffect.cpp | 
| @@ -256,7 +256,6 @@ public: | 
| SkScalar fIntervals[2]; | 
| SkScalar fParallelScale; | 
| SkScalar fPerpendicularScale; | 
| -        SkDEBUGCODE(SkRect fDevBounds;) | 
| }; | 
|  | 
| static GrBatch* Create(const Geometry& geometry, SkPaint::Cap cap, DashAAMode aaMode, | 
| @@ -367,9 +366,6 @@ public: | 
|  | 
| SkScalar startAdj = 0; | 
|  | 
| -            SkMatrix& combinedMatrix = args.fSrcRotInv; | 
| -            combinedMatrix.postConcat(args.fViewMatrix); | 
| - | 
| bool lineDone = false; | 
|  | 
| // Too simplify the algorithm, we always push back rects for start and end rect. | 
| @@ -646,6 +642,17 @@ private: | 
| fBatch.fAAMode = aaMode; | 
| fBatch.fCap = cap; | 
| fBatch.fFullDash = fullDash; | 
| + | 
| +        // compute bounds | 
| +        SkScalar halfStrokeWidth = 0.5f * geometry.fSrcStrokeWidth; | 
| +        SkScalar xBloat = SkPaint::kButt_Cap == cap ? 0 : halfStrokeWidth; | 
| +        fBounds.set(geometry.fPtsRot[0], geometry.fPtsRot[1]); | 
| +        fBounds.outset(xBloat, halfStrokeWidth); | 
| + | 
| +        // Note, we actually create the combined matrix here, and save the work | 
| +        SkMatrix& combinedMatrix = fGeoData[0].fSrcRotInv; | 
| +        combinedMatrix.postConcat(geometry.fViewMatrix); | 
| +        combinedMatrix.mapRect(&fBounds); | 
| } | 
|  | 
| bool onCombineIfPossible(GrBatch* t) override { | 
| @@ -674,6 +681,7 @@ private: | 
| } | 
|  | 
| fGeoData.push_back_n(that->geoData()->count(), that->geoData()->begin()); | 
| +        this->joinBounds(that->bounds()); | 
| return true; | 
| } | 
|  | 
|  |