aboutsummaryrefslogtreecommitdiffhomepage
path: root/dm
diff options
context:
space:
mode:
authorGravatar Ben Wagner <bungeman@google.com>2018-04-04 17:40:46 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-04-05 16:15:33 +0000
commit1861e88cad51ec5727323e75fbd45d6c7186ccef (patch)
treed87cd026df0c02041402fcb35fbf4ac8ca6b8f28 /dm
parentc4ec816a89c0f39f1b2dfb507f7c8cf39b4e1eae (diff)
Via*::draw to finish before checking.
Currently Via*::draw checks against the reference immediately, before the sink is completely finished. This causes via-gl to fail, since GPUSink::onDraw does not even create the target pixmap until after drawing the Src into the canvas. This puts off the actual check against the reference until after the sink is finished, allowing via-gl to work as expected. Change-Id: If1a19cc73f184b836e3421a03966db0ee9918fbe Reviewed-on: https://skia-review.googlesource.com/118627 Reviewed-by: Mike Klein <mtklein@chromium.org> Commit-Queue: Ben Wagner <bungeman@google.com>
Diffstat (limited to 'dm')
-rw-r--r--dm/DMSrcSink.cpp36
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());
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/