diff options
Diffstat (limited to 'dm')
-rw-r--r-- | dm/DMSrcSink.cpp | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp index 8dc24318d2..6a14c6363c 100644 --- a/dm/DMSrcSink.cpp +++ b/dm/DMSrcSink.cpp @@ -1937,10 +1937,15 @@ Error ViaSerialization::draw( // Serialize it and then deserialize it. sk_sp<SkPicture> deserialized(SkPicture::MakeFromData(pic->serialize().get())); - return draw_to_canvas(fSink.get(), bitmap, stream, log, size, [&](SkCanvas* canvas) { + err = draw_to_canvas(fSink.get(), bitmap, stream, log, size, [&](SkCanvas* canvas) { canvas->drawPicture(deserialized); - return check_against_reference(bitmap, src, fSink.get()); + return ""; }); + if (!err.isEmpty()) { + return err; + } + + return check_against_reference(bitmap, src, fSink.get()); } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ @@ -2366,7 +2371,7 @@ Error ViaDDL::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString Error ViaPicture::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) const { auto size = src.size(); - return draw_to_canvas(fSink.get(), bitmap, stream, log, size, [&](SkCanvas* canvas) -> Error { + Error err = draw_to_canvas(fSink.get(), bitmap, stream, log, size, [&](SkCanvas* canvas) { SkPictureRecorder recorder; sk_sp<SkPicture> pic; Error err = src.draw(recorder.beginRecording(SkIntToScalar(size.width()), @@ -2376,15 +2381,20 @@ Error ViaPicture::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkSt } pic = recorder.finishRecordingAsPicture(); canvas->drawPicture(pic); - return check_against_reference(bitmap, src, fSink.get()); + return err; }); + if (!err.isEmpty()) { + return err; + } + + return check_against_reference(bitmap, src, fSink.get()); } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ Error ViaPipe::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) const { auto size = src.size(); - return draw_to_canvas(fSink.get(), bitmap, stream, log, size, [&](SkCanvas* canvas) -> Error { + Error err = draw_to_canvas(fSink.get(), bitmap, stream, log, size, [&](SkCanvas* canvas) { SkDynamicMemoryWStream tmpStream; Error err = src.draw(SkPipeSerializer().beginWrite(SkRect::Make(size), &tmpStream)); if (!err.isEmpty()) { @@ -2392,8 +2402,13 @@ Error ViaPipe::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStrin } sk_sp<SkData> data = tmpStream.detachAsData(); SkPipeDeserializer().playback(data->data(), data->size(), canvas); - return check_against_reference(bitmap, src, fSink.get()); + return err; }); + if (!err.isEmpty()) { + return err; + } + + return check_against_reference(bitmap, src, fSink.get()); } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ @@ -2428,7 +2443,7 @@ Error ViaSVG::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString Error ViaLite::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) const { auto size = src.size(); SkIRect bounds = {0,0, size.width(), size.height()}; - return draw_to_canvas(fSink.get(), bitmap, stream, log, size, [&](SkCanvas* canvas) -> Error { + Error err = draw_to_canvas(fSink.get(), bitmap, stream, log, size, [&](SkCanvas* canvas) { SkLiteDL dl; SkLiteRecorder rec; rec.reset(&dl, bounds); @@ -2438,8 +2453,13 @@ Error ViaLite::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStrin return err; } dl.draw(canvas); - return check_against_reference(bitmap, src, fSink.get()); + return err; }); + if (!err.isEmpty()) { + return err; + } + + return check_against_reference(bitmap, src, fSink.get()); } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ |