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/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index f0b1010..258e94e 100644
--- a/dm/DMSrcSink.cpp
+++ b/dm/DMSrcSink.cpp
@@ -15,6 +15,7 @@
#include "SkColorSpaceXform.h"
#include "SkCommonFlags.h"
#include "SkData.h"
+#include "SkDeferredCanvas.h"
#include "SkDocument.h"
#include "SkError.h"
#include "SkImageGenerator.h"
@@ -1439,6 +1440,16 @@
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+Error ViaDefer::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) const {
+ auto size = src.size();
+ return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas) -> Error {
+ SkDeferredCanvas deferred(canvas);
+ return src.draw(&deferred);
+ });
+}
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
// Draw the Src into two pictures, then draw the second picture into the wrapped Sink.
// This tests that any shortcuts we may take while recording that second picture are legal.
Error ViaSecondPicture::draw(