| Index: tests/CanvasTest.cpp
 | 
| diff --git a/tests/CanvasTest.cpp b/tests/CanvasTest.cpp
 | 
| index 0d5c86236075e6609f6f0a2705022566eb706f7f..5aa3d4662863efb96a4fd0d00d6e8e3b8b851ef5 100644
 | 
| --- a/tests/CanvasTest.cpp
 | 
| +++ b/tests/CanvasTest.cpp
 | 
| @@ -52,6 +52,7 @@
 | 
|  #include "SkMatrix.h"
 | 
|  #include "SkNWayCanvas.h"
 | 
|  #include "SkPaint.h"
 | 
| +#include "SkPaintFilterCanvas.h"
 | 
|  #include "SkPath.h"
 | 
|  #include "SkPicture.h"
 | 
|  #include "SkPictureRecord.h"
 | 
| @@ -782,3 +783,38 @@ DEF_TEST(Canvas_ClipEmptyPath, reporter) {
 | 
|      canvas.clipPath(path);  // should not assert here
 | 
|      canvas.restore();
 | 
|  }
 | 
| +
 | 
| +namespace {
 | 
| +
 | 
| +class MockFilterCanvas : public SkPaintFilterCanvas {
 | 
| +public:
 | 
| +    MockFilterCanvas(SkCanvas* canvas) : INHERITED(canvas) { }
 | 
| +
 | 
| +protected:
 | 
| +    void onFilterPaint(SkPaint *paint, Type type) const override { }
 | 
| +
 | 
| +private:
 | 
| +    typedef SkPaintFilterCanvas INHERITED;
 | 
| +};
 | 
| +
 | 
| +} // anonymous namespace
 | 
| +
 | 
| +// SkPaintFilterCanvas should inherit the initial target canvas state.
 | 
| +DEF_TEST(PaintFilterCanvas_ConsistentState, reporter) {
 | 
| +    SkCanvas canvas(100, 100);
 | 
| +    canvas.clipRect(SkRect::MakeXYWH(12.7f, 12.7f, 75, 75));
 | 
| +    canvas.scale(0.5f, 0.75f);
 | 
| +
 | 
| +    SkRect clip1, clip2;
 | 
| +
 | 
| +    MockFilterCanvas filterCanvas(&canvas);
 | 
| +    REPORTER_ASSERT(reporter, canvas.getTotalMatrix() == filterCanvas.getTotalMatrix());
 | 
| +    REPORTER_ASSERT(reporter, canvas.getClipBounds(&clip1) == filterCanvas.getClipBounds(&clip2));
 | 
| +    REPORTER_ASSERT(reporter, clip1 == clip2);
 | 
| +
 | 
| +    filterCanvas.clipRect(SkRect::MakeXYWH(30.5f, 30.7f, 100, 100));
 | 
| +    filterCanvas.scale(0.75f, 0.5f);
 | 
| +    REPORTER_ASSERT(reporter, canvas.getTotalMatrix() == filterCanvas.getTotalMatrix());
 | 
| +    REPORTER_ASSERT(reporter, canvas.getClipBounds(&clip1) == filterCanvas.getClipBounds(&clip2));
 | 
| +    REPORTER_ASSERT(reporter, clip1 == clip2);
 | 
| +}
 | 
| 
 |