Index: dm/DMSrcSink.cpp |
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp |
index 2503dc35cec207602df6e50d9f66a518d108f2d1..a3f1cf6cba963430253aa3549dc6b99342e21a55 100644 |
--- a/dm/DMSrcSink.cpp |
+++ b/dm/DMSrcSink.cpp |
@@ -992,19 +992,21 @@ Error RasterSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString*) con |
// passing the Sink draw() arguments, a size, and a function draws into an SkCanvas. |
// Several examples below. |
-static Error draw_to_canvas(Sink* sink, SkBitmap* bitmap, SkWStream* stream, SkString* log, |
+static Error draw_to_canvas(Name name, Sink* sink, SkBitmap* bitmap, SkWStream* stream, SkString* log, |
SkISize size, std::function<Error(SkCanvas*)> draw) { |
class ProxySrc : public Src { |
public: |
- ProxySrc(SkISize size, std::function<Error(SkCanvas*)> draw) : fSize(size), fDraw(draw) {} |
+ ProxySrc(SkISize size, Name name, std::function<Error(SkCanvas*)> draw) |
+ : fSize(size), fName(name), fDraw(draw) {} |
Error draw(SkCanvas* canvas) const override { return fDraw(canvas); } |
- Name name() const override { sk_throw(); return ""; } // Won't be called. |
+ Name name() const override { return fName; } |
SkISize size() const override { return fSize; } |
private: |
SkISize fSize; |
+ Name fName; |
std::function<Error(SkCanvas*)> fDraw; |
}; |
- return sink->draw(ProxySrc(size, draw), bitmap, stream, log); |
+ return sink->draw(ProxySrc(size, name, draw), bitmap, stream, log); |
} |
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ |
@@ -1021,7 +1023,8 @@ ViaMatrix::ViaMatrix(SkMatrix matrix, Sink* sink) : Via(sink), fMatrix(matrix) { |
Error ViaMatrix::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) const { |
SkMatrix matrix = fMatrix; |
SkISize size = auto_compute_translate(&matrix, src.size().width(), src.size().height()); |
- return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas) { |
+ Name name = SkStringPrintf("%s [via matrix]", src.name().c_str()); |
mtklein
2015/12/10 19:27:57
Some ideas:
- thread the names from DM.cpp so w
hal.canary
2015/12/10 20:08:47
done
|
+ return draw_to_canvas(name, fSink, bitmap, stream, log, size, [&](SkCanvas* canvas) { |
canvas->concat(matrix); |
return src.draw(canvas); |
}); |
@@ -1066,7 +1069,8 @@ Error ViaUpright::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkSt |
Error ViaPipe::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) const { |
auto size = src.size(); |
- return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas) { |
+ Name name = SkStringPrintf("%s [via pipe]", src.name().c_str()); |
+ return draw_to_canvas(name, fSink, bitmap, stream, log, size, [&](SkCanvas* canvas) { |
PipeController controller(canvas, &SkImageDecoder::DecodeMemory); |
SkGPipeWriter pipe; |
const uint32_t kFlags = 0; |
@@ -1075,7 +1079,8 @@ Error ViaPipe::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStrin |
} |
Error ViaRemote::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) const { |
- return draw_to_canvas(fSink, bitmap, stream, log, src.size(), [&](SkCanvas* target) { |
+ Name name = SkStringPrintf("%s [via remote]", src.name().c_str()); |
+ return draw_to_canvas(name, fSink, bitmap, stream, log, src.size(), [&](SkCanvas* target) { |
SkAutoTDelete<SkRemote::Encoder> decoder(SkRemote::NewDecoder(target)); |
SkAutoTDelete<SkRemote::Encoder> cache(fCache ? SkRemote::NewCachingEncoder(decoder) |
: nullptr); |
@@ -1103,8 +1108,9 @@ Error ViaSerialization::draw( |
pic->serialize(&wStream); |
SkAutoTDelete<SkStream> rStream(wStream.detachAsStream()); |
SkAutoTUnref<SkPicture> deserialized(SkPicture::CreateFromStream(rStream, &lazy_decode_bitmap)); |
+ Name name = SkStringPrintf("%s [via serialization]", src.name().c_str()); |
- return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas) { |
+ return draw_to_canvas(name, fSink, bitmap, stream, log, size, [&](SkCanvas* canvas) { |
canvas->drawPicture(deserialized); |
return ""; |
}); |
@@ -1128,8 +1134,9 @@ Error ViaTiles::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri |
return err; |
} |
SkAutoTUnref<SkPicture> pic(recorder.endRecordingAsPicture()); |
+ Name name = SkStringPrintf("%s [via tiles]", src.name().c_str()); |
- return draw_to_canvas(fSink, bitmap, stream, log, src.size(), [&](SkCanvas* canvas) { |
+ return draw_to_canvas(name, fSink, bitmap, stream, log, src.size(), [&](SkCanvas* canvas) { |
const int xTiles = (size.width() + fW - 1) / fW, |
yTiles = (size.height() + fH - 1) / fH; |
SkMultiPictureDraw mpd(xTiles*yTiles); |
@@ -1171,7 +1178,8 @@ Error ViaTiles::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri |
Error ViaSecondPicture::draw( |
const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) const { |
auto size = src.size(); |
- return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas) -> Error { |
+ Name name = SkStringPrintf("%s [via second picture]", src.name().c_str()); |
+ return draw_to_canvas(name, fSink, bitmap, stream, log, size, [&](SkCanvas* canvas) -> Error { |
SkPictureRecorder recorder; |
SkAutoTUnref<SkPicture> pic; |
for (int i = 0; i < 2; i++) { |
@@ -1191,7 +1199,8 @@ Error ViaSecondPicture::draw( |
// Draw the Src twice. This can help exercise caching. |
Error ViaTwice::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) const { |
- return draw_to_canvas(fSink, bitmap, stream, log, src.size(), [&](SkCanvas* canvas) -> Error { |
+ Name name = SkStringPrintf("%s [via twice]", src.name().c_str()); |
+ return draw_to_canvas(name, fSink, bitmap, stream, log, src.size(), [&](SkCanvas* canvas) -> Error { |
for (int i = 0; i < 2; i++) { |
SkAutoCanvasRestore acr(canvas, true/*save now*/); |
canvas->clear(SK_ColorTRANSPARENT); |
@@ -1243,7 +1252,8 @@ struct DrawsAsSingletonPictures { |
Error ViaSingletonPictures::draw( |
const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) const { |
auto size = src.size(); |
- return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas) -> Error { |
+ Name name = SkStringPrintf("%s [via singleton_pictures]", src.name().c_str()); |
+ return draw_to_canvas(name, fSink, bitmap, stream, log, size, [&](SkCanvas* canvas) -> Error { |
// Use low-level (Skia-private) recording APIs so we can read the SkRecord. |
SkRecord skr; |
SkRecorder recorder(&skr, size.width(), size.height()); |