deferred canvas

tries to eliminate unneeded clipRects and concats (and their associated save/restores).

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2120333002

Review-Url: https://codereview.chromium.org/2120333002
diff --git a/tests/CanvasTest.cpp b/tests/CanvasTest.cpp
index 70c2c04..82e065f 100644
--- a/tests/CanvasTest.cpp
+++ b/tests/CanvasTest.cpp
@@ -813,3 +813,25 @@
     REPORTER_ASSERT(reporter, canvas.getClipBounds(&clip1) == filterCanvas.getClipBounds(&clip2));
     REPORTER_ASSERT(reporter, clip1 == clip2);
 }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include "SkDeferredCanvas.h"
+#include "SkDumpCanvas.h"
+
+DEF_TEST(DeferredCanvas, r) {
+    SkDebugfDumper dumper;
+    SkDumpCanvas dumpC(&dumper);
+
+    SkDeferredCanvas canvas(&dumpC);
+
+    SkPaint paint;
+//    paint.setShader(SkShader::MakeColorShader(SK_ColorRED));
+
+    canvas.save();
+    canvas.clipRect(SkRect::MakeWH(55, 55));
+    canvas.translate(10, 20);
+    canvas.drawRect(SkRect::MakeWH(50, 50), paint);
+    canvas.restore();
+}
+