DM: JSON Debug Sink
Currently, the following GMs crash the debug canvas:
~dont_clip_to_layer
~imageblur
~imagefilterscropped
~pictureimagefilter
~savelayer_lcdtext
~textfilter_image
// TODO(halcanary): fix this.
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3742
Change-Id: Ieed3502119cd639fe345f3a41d436d5e39f3bdf1
Reviewed-on: https://skia-review.googlesource.com/3742
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Hal Canary <halcanary@google.com>
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index 274f7db..30185a2 100644
--- a/dm/DMSrcSink.cpp
+++ b/dm/DMSrcSink.cpp
@@ -15,6 +15,7 @@
#include "SkColorSpaceXform.h"
#include "SkCommonFlags.h"
#include "SkData.h"
+#include "SkDebugCanvas.h"
#include "SkDeferredCanvas.h"
#include "SkDocument.h"
#include "SkImageGenerator.h"
@@ -1397,6 +1398,22 @@
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+Error DebugSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const {
+ SkDebugCanvas debugCanvas(src.size().width(), src.size().height());
+ Error err = src.draw(&debugCanvas);
+ if (!err.isEmpty()) {
+ return err;
+ }
+ sk_sp<SkCanvas> nullCanvas(SkCreateNullCanvas());
+ UrlDataManager dataManager(SkString("data"));
+ Json::Value json = debugCanvas.toJSON(
+ dataManager, debugCanvas.getSize(), nullCanvas.get());
+ std::string value = Json::StyledWriter().write(json);
+ return dst->write(value.c_str(), value.size()) ? "" : "SkWStream Error";
+}
+
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
SVGSink::SVGSink() {}
Error SVGSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const {