Index: dm/DMSrcSink.cpp |
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp |
index 6f6664f27ce2266bd12156f1ae973cada399ec25..2c32cdd925cec3b6bc07ed94881a401356d097e3 100644 |
--- a/dm/DMSrcSink.cpp |
+++ b/dm/DMSrcSink.cpp |
@@ -2,8 +2,10 @@ |
#include "SamplePipeControllers.h" |
#include "SkCommonFlags.h" |
#include "SkCodec.h" |
+#include "SkData.h" |
#include "SkDocument.h" |
#include "SkError.h" |
+#include "SkImageGenerator.h" |
#include "SkMultiPictureDraw.h" |
#include "SkNullCanvas.h" |
#include "SkOSFile.h" |
@@ -16,6 +18,11 @@ |
DEFINE_bool(codec, false, "Use SkCodec instead of SkImageDecoder"); |
+static bool lazy_decode_bitmap(const void* src, size_t size, SkBitmap* dst) { |
+ SkAutoTUnref<SkData> encoded(SkData::NewWithCopy(src, size)); |
+ return encoded && SkInstallDiscardablePixelRef(encoded, dst); |
+} |
+ |
namespace DM { |
GMSrc::GMSrc(skiagm::GMRegistry::Factory factory) : fFactory(factory) {} |
@@ -179,7 +186,7 @@ Error SKPSrc::draw(SkCanvas* canvas) const { |
if (!stream) { |
return SkStringPrintf("Couldn't read %s.", fPath.c_str()); |
} |
- SkAutoTUnref<SkPicture> pic(SkPicture::CreateFromStream(stream)); |
+ SkAutoTUnref<SkPicture> pic(SkPicture::CreateFromStream(stream, &lazy_decode_bitmap)); |
if (!pic) { |
return SkStringPrintf("Couldn't decode %s as a picture.", fPath.c_str()); |
} |
@@ -479,7 +486,7 @@ Error ViaSerialization::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream |
SkDynamicMemoryWStream wStream; |
pic->serialize(&wStream); |
SkAutoTDelete<SkStream> rStream(wStream.detachAsStream()); |
- SkAutoTUnref<SkPicture> deserialized(SkPicture::CreateFromStream(rStream)); |
+ SkAutoTUnref<SkPicture> deserialized(SkPicture::CreateFromStream(rStream, &lazy_decode_bitmap)); |
// Turn that deserialized picture into a Src, draw it into our Sink to fill bitmap or stream. |
struct ProxySrc : public Src { |