Index: dm/DMSrcSink.cpp |
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp |
index 29886807a7117b412ddce12102d6433e7dc289cd..44bb3e09d0c510c8b6d67b373c7253dbf917e1cd 100644 |
--- a/dm/DMSrcSink.cpp |
+++ b/dm/DMSrcSink.cpp |
@@ -31,6 +31,10 @@ |
#include "SkSwizzler.h" |
#include <functional> |
+#ifdef SK_MOJO_EXPERIMENT |
+#include "SkMojo.mojom.h" |
mtklein
2016/01/29 18:09:40
Indent this #include a bit?
hal.canary
2016/01/29 18:44:50
done
|
+#endif |
+ |
DEFINE_bool(multiPage, false, "For document-type backends, render the source" |
" into multiple pages"); |
@@ -1233,6 +1237,40 @@ Error ViaTwice::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri |
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ |
+#ifdef SK_MOJO_EXPERIMENT |
+ |
+Error ViaMojo::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) const { |
mtklein
2016/01/29 18:09:40
Let's indent the bits inside the #ifdef / #else
hal.canary
2016/01/29 18:44:50
done
|
+ SkPictureRecorder recorder; |
+ SkRect size = SkRect::Make(SkIRect::MakeSize(src.size())); |
+ Error err = src.draw(recorder.beginRecording(size)); |
+ if (!err.isEmpty()) { |
+ return err; |
+ } |
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording()); |
+ |
+ SkASSERT(picture); |
+ SkDynamicMemoryWStream buffer; |
+ picture->serialize(&buffer); |
+ auto mojoPicture = SkMojo::FlattenedPicture::New(); |
mtklein
2016/01/29 18:09:40
While we're getting used to the types, let's write
hal.canary
2016/01/29 18:44:50
done
|
+ mojoPicture->data.resize(buffer.bytesWritten()); |
+ buffer.copyTo(mojoPicture->data.data()); |
+ SkASSERT(mojoPicture.get() && mojoPicture->data); |
mtklein
2016/01/29 18:09:40
// TODO: serialize + deserialize FlattenedPicture
hal.canary
2016/01/29 18:44:50
the todo is done.
|
+ SkMemoryStream tmpStream(mojoPicture->data.data(), mojoPicture->data.size()); |
+ picture.reset(SkPicture::CreateFromStream(&tmpStream)); |
+ auto fn = [&](SkCanvas* canvas) -> Error { |
+ canvas->drawPicture(picture.get()); |
+ return check_against_reference(bitmap, src, fSink); |
+ }; |
+ return draw_to_canvas(fSink, bitmap, stream, log, src.size(), fn); |
+} |
+#else // not SK_MOJO_EXPERIMENT |
+Error ViaMojo::draw(const Src&, SkBitmap*, SkWStream*, SkString*) const { |
+ return "Mojo is missing!"; |
+} |
+#endif |
+ |
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ |
+ |
// This is like SkRecords::Draw, in that it plays back SkRecords ops into a Canvas. |
// Unlike SkRecords::Draw, it builds a single-op sub-picture out of each Draw-type op. |
// This is an only-slightly-exaggerated simluation of Blink's Slimming Paint pictures. |