diff options
Diffstat (limited to 'src/pipe/SkPipeCanvas.cpp')
-rw-r--r-- | src/pipe/SkPipeCanvas.cpp | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/pipe/SkPipeCanvas.cpp b/src/pipe/SkPipeCanvas.cpp index 3b636a23c0..3e05989c30 100644 --- a/src/pipe/SkPipeCanvas.cpp +++ b/src/pipe/SkPipeCanvas.cpp @@ -862,6 +862,15 @@ protected: } }; +static sk_sp<SkData> default_image_serializer(SkImage* image) { + A8Serializer serial; + sk_sp<SkData> data(image->encode(&serial)); + if (!data) { + data.reset(image->encode()); + } + return data; +} + static bool show_deduper_traffic = false; int SkPipeDeduper::findOrDefineImage(SkImage* image) { @@ -874,11 +883,8 @@ int SkPipeDeduper::findOrDefineImage(SkImage* image) { return index; } - A8Serializer serial; - sk_sp<SkData> data(image->encode(&serial)); - if (!data) { - data.reset(image->encode()); - } + sk_sp<SkData> data = fIMSerializer ? fIMSerializer->serialize(image) + : default_image_serializer(image); if (data) { index = fImages.add(image->uniqueID()); SkASSERT(index > 0); @@ -1017,6 +1023,10 @@ void SkPipeSerializer::setTypefaceSerializer(SkTypefaceSerializer* tfs) { fImpl->fDeduper.setTypefaceSerializer(tfs); } +void SkPipeSerializer::setImageSerializer(SkImageSerializer* ims) { + fImpl->fDeduper.setImageSerializer(ims); +} + void SkPipeSerializer::resetCache() { fImpl->fDeduper.resetCaches(); } |