| Index: third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
|
| diff --git a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
|
| index e35505224bd6aa3f9e2be6d7ca1942ece41065b3..979f62dbbef87c8b32de46b54ea4ca1fb6c0cd69 100644
|
| --- a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
|
| +++ b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
|
| @@ -911,19 +911,25 @@ void BaseRenderingContext2D::drawImageInternal(SkCanvas* c, CanvasImageSource* i
|
| SkPaint imagePaint = *paint;
|
|
|
| if (paint->getImageFilter()) {
|
| + SkMatrix ctm = c->getTotalMatrix();
|
| SkMatrix invCtm;
|
| - if (!c->getTotalMatrix().invert(&invCtm)) {
|
| + if (!ctm.invert(&invCtm)) {
|
| // There is an earlier check for invertibility, but the arithmetic
|
| // in AffineTransform is not exactly identical, so it is possible
|
| // for SkMatrix to find the transform to be non-invertible at this stage.
|
| // crbug.com/504687
|
| return;
|
| }
|
| + c->save();
|
| + c->concat(invCtm);
|
| SkRect bounds = dstRect;
|
| + ctm.mapRect(&bounds);
|
| SkPaint layerPaint;
|
| layerPaint.setXfermode(sk_ref_sp(paint->getXfermode()));
|
| - layerPaint.setImageFilter(paint->getImageFilter()->makeWithLocalMatrix(invCtm));
|
| + layerPaint.setImageFilter(paint->getImageFilter());
|
| +
|
| c->saveLayer(&bounds, &layerPaint);
|
| + c->concat(ctm);
|
| imagePaint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
|
| imagePaint.setImageFilter(nullptr);
|
| }
|
|
|