aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Hal Canary <halcanary@google.com>2016-10-25 10:33:27 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-10-25 14:58:17 +0000
commit85c7fe8d6d87850aed83599864b63dca37af5fcf (patch)
treee315358d1c647001015bfce2c0429b254ed4f23d
parent7614794c9ad14d76abed6cf00890ad1a09c2cb8b (diff)
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>
-rw-r--r--dm/DM.cpp1
-rw-r--r--dm/DMSrcSink.cpp17
-rw-r--r--dm/DMSrcSink.h7
3 files changed, 25 insertions, 0 deletions
diff --git a/dm/DM.cpp b/dm/DM.cpp
index 36808ad168..42922c2c0b 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -883,6 +883,7 @@ static Sink* create_sink(const SkCommandLineConfig* config) {
SINK("null", NullSink);
SINK("xps", XPSSink);
SINK("pdfa", PDFSink, true);
+ SINK("jsdebug", DebugSink);
}
#undef SINK
return nullptr;
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index 274f7dbe6d..30185a2ab1 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 SKPSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+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 {
diff --git a/dm/DMSrcSink.h b/dm/DMSrcSink.h
index 4be9878afa..cad15c7e86 100644
--- a/dm/DMSrcSink.h
+++ b/dm/DMSrcSink.h
@@ -374,6 +374,13 @@ public:
SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, SinkFlags::kDirect }; }
};
+class DebugSink : public Sink {
+public:
+ Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override;
+ const char* fileExtension() const override { return "json"; }
+ SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, SinkFlags::kDirect }; }
+};
+
class SVGSink : public Sink {
public:
SVGSink();