aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2017-12-08 10:31:52 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-08 15:58:00 +0000
commit64f73764b7553148f7660e06b57d623542c63d5b (patch)
treede3a650b929eea1f43c4295ae5c3f4318b4d069c /src
parent7f5d5d2baba439a78a5a2e4f5149a17236ed84fe (diff)
return data instead of bool
Bug: skia: Change-Id: Id7c3044a2fce087703544c624c75a7756b9c62b4 Reviewed-on: https://skia-review.googlesource.com/82602 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/SkPicture.cpp9
-rw-r--r--src/core/SkPictureCommon.h2
-rw-r--r--src/core/SkWriteBuffer.cpp38
3 files changed, 25 insertions, 24 deletions
diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp
index e87439aad9..5442738368 100644
--- a/src/core/SkPicture.cpp
+++ b/src/core/SkPicture.cpp
@@ -273,14 +273,9 @@ bool SkPicture::PictureIOSecurityPrecautionsEnabled() {
//////////////////////////////////////////////////////////////////////////////////////////////////
-bool PixelSerializer_SkSerialImageProc(SkImage* img, SkWStream* stream, void* ctx) {
+sk_sp<SkData> PixelSerializer_SkSerialImageProc(SkImage* img, void* ctx) {
SkASSERT(ctx);
- sk_sp<SkData> enc = img->encodeToData(static_cast<SkPixelSerializer*>(ctx));
- if (enc) {
- stream->write(enc->data(), enc->size());
- return true;
- }
- return false;
+ return img->encodeToData(static_cast<SkPixelSerializer*>(ctx));
}
sk_sp<SkImage> ImageDeserializer_SkDeserialImageProc(const void* data, size_t length, void* ctx) {
diff --git a/src/core/SkPictureCommon.h b/src/core/SkPictureCommon.h
index 74d693f56b..c282f01fec 100644
--- a/src/core/SkPictureCommon.h
+++ b/src/core/SkPictureCommon.h
@@ -142,7 +142,7 @@ struct SkPathCounter {
int fNumSlowPathsAndDashEffects;
};
-bool PixelSerializer_SkSerialImageProc(SkImage*, SkWStream*, void* sk_pixelserializer);
+sk_sp<SkData> PixelSerializer_SkSerialImageProc(SkImage*, void* pixelserializer);
sk_sp<SkImage> ImageDeserializer_SkDeserialImageProc(const void*, size_t, void* imagedeserializer);
#endif // SkPictureCommon_DEFINED
diff --git a/src/core/SkWriteBuffer.cpp b/src/core/SkWriteBuffer.cpp
index 49cccd6783..bd1d64b76a 100644
--- a/src/core/SkWriteBuffer.cpp
+++ b/src/core/SkWriteBuffer.cpp
@@ -140,17 +140,18 @@ void SkBinaryWriteBuffer::writeImage(const SkImage* image) {
this->writeInt(image->height());
auto write_data = [this](sk_sp<SkData> data, int sign) {
- if (data) {
- size_t size = data->size();
- if (size && sk_64_isS32(size)) {
- this->write32(SkToS32(size) * sign);
- this->writePad32(data->data(), size); // does nothing if size == 0
- this->write32(0); // origin-x
- this->write32(0); // origin-y
- return;
- }
+ size_t size = data ? data->size() : 0;
+ if (!sk_64_isS32(size)) {
+ size = 0; // too big to store
+ }
+ if (size) {
+ this->write32(SkToS32(size) * sign);
+ this->writePad32(data->data(), size); // does nothing if size == 0
+ this->write32(0); // origin-x
+ this->write32(0); // origin-y
+ } else {
+ this->write32(0); // signal no image
}
- this->write32(0); // no data or size too big
};
/*
@@ -159,14 +160,19 @@ void SkBinaryWriteBuffer::writeImage(const SkImage* image) {
* <0 : negative (int32_t) of a custom encoded blob using SerialProcs
* >0 : standard encoded blob size (use MakeFromEncoded)
*/
+ sk_sp<SkData> data;
+ int sign = 1; // +1 signals standard encoder
if (fProcs.fImageProc) {
- SkDynamicMemoryWStream stream;
- if (fProcs.fImageProc(const_cast<SkImage*>(image), &stream, fProcs.fImageCtx)) {
- write_data(stream.detachAsData(), -1); // -1 signals custom encoder
- return;
- }
+ data = fProcs.fImageProc(const_cast<SkImage*>(image), fProcs.fImageCtx);
+ sign = -1; // +1 signals custom encoder
+ }
+ // We check data, since a custom proc can return nullptr, in which case we behave as if
+ // there was no custom proc.
+ if (!data) {
+ data = image->encodeToData();
+ sign = 1;
}
- write_data(image->encodeToData(), 1); // +1 signals standard encoder
+ write_data(std::move(data), sign);
}
void SkBinaryWriteBuffer::writeTypeface(SkTypeface* obj) {