Reland "Revert "Make SKP deserialize null instead of PNG images by default.""
This reverts commit b78c91996051d250b6a2946a7b6f14719e014d57.
Reason for revert: Possible cause of https://crbug.com/1485891
Original change's description:
> Revert "Revert "Make SKP deserialize null instead of PNG images by default.""
>
> This reverts commit 2d295711337cf6fcbf66dfc90af39d4188999108.
>
> Change-Id: I158484509c1d067cbebdc99f97e42ff734fa855a
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/755548
> Reviewed-by: Brian Osman <brianosman@google.com>
> Commit-Queue: Kevin Lubick <kjlubick@google.com>
Change-Id: Ifb716927460a8ab6a03dafc168d1eb1eb230fea7
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/759268
Owners-Override: Kevin Lubick <kjlubick@google.com>
Commit-Queue: Kevin Lubick <kjlubick@google.com>
Auto-Submit: Kevin Lubick <kjlubick@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index 78bd500..3e55dab 100644
--- a/dm/DMSrcSink.cpp
+++ b/dm/DMSrcSink.cpp
@@ -21,7 +21,6 @@
#include "include/core/SkSurface.h"
#include "include/core/SkSurfaceProps.h"
#include "include/docs/SkPDFDocument.h"
-#include "include/encode/SkPngEncoder.h"
#include "include/gpu/GrBackendSurface.h"
#include "include/gpu/GrDirectContext.h"
#include "include/gpu/ganesh/SkImageGanesh.h"
@@ -52,7 +51,6 @@
#include "src/gpu/ganesh/GrDirectContextPriv.h"
#include "src/gpu/ganesh/GrGpu.h"
#include "src/gpu/ganesh/image/GrImageUtils.h"
-#include "src/image/SkImage_Base.h"
#include "src/utils/SkJSONWriter.h"
#include "src/utils/SkMultiPictureDocumentPriv.h"
#include "src/utils/SkOSPath.h"
@@ -2007,14 +2005,6 @@
}
#endif
-static SkSerialProcs serial_procs_using_png() {
- static SkSerialProcs procs;
- procs.fImageProc = [](SkImage* img, void*) -> sk_sp<SkData> {
- return SkPngEncoder::Encode(as_IB(img)->directContext(), img, SkPngEncoder::Options{});
- };
- return procs;
-}
-
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SKPSink::SKPSink() {}
@@ -2026,8 +2016,7 @@
if (!result.isOk()) {
return result;
}
- SkSerialProcs procs = serial_procs_using_png();
- recorder.finishRecordingAsPicture()->serialize(dst, &procs);
+ recorder.finishRecordingAsPicture()->serialize(dst);
return Result::Ok();
}
@@ -2280,9 +2269,8 @@
}
sk_sp<SkPicture> pic(recorder.finishRecordingAsPicture());
- SkSerialProcs procs = serial_procs_using_png();
// Serialize it and then deserialize it.
- sk_sp<SkPicture> deserialized(SkPicture::MakeFromData(pic->serialize(&procs).get()));
+ sk_sp<SkPicture> deserialized(SkPicture::MakeFromData(pic->serialize().get()));
result = draw_to_canvas(fSink.get(), bitmap, stream, log, size,
[&](SkCanvas* canvas) {
diff --git a/docs/examples/Picture_008.cpp b/docs/examples/Picture_008.cpp
new file mode 100644
index 0000000..69a6d75
--- /dev/null
+++ b/docs/examples/Picture_008.cpp
@@ -0,0 +1,20 @@
+// Copyright 2019 Google LLC.
+// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
+#include "tools/fiddle/examples.h"
+// HASH=30b9f1b310187db6aff720a5d67591e2
+REG_FIDDLE(Picture_008, 256, 256, false, 0) {
+void draw(SkCanvas* canvas) {
+ SkPictureRecorder recorder;
+ SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
+ SkPaint paint;
+ pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
+ paint.setColor(SK_ColorWHITE);
+ pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
+ sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
+ SkDynamicMemoryWStream writableStream;
+ picture->serialize(&writableStream);
+ sk_sp<SkData> readableData = writableStream.detachAsData();
+ sk_sp<SkPicture> copy = SkPicture::MakeFromData(readableData->data(), readableData->size());
+ copy->playback(canvas);
+}
+} // END FIDDLE
diff --git a/docs/examples/Picture_MakeFromData.cpp b/docs/examples/Picture_MakeFromData.cpp
index 4ed67cb..92041e8 100644
--- a/docs/examples/Picture_MakeFromData.cpp
+++ b/docs/examples/Picture_MakeFromData.cpp
@@ -12,7 +12,7 @@
pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
SkDynamicMemoryWStream writableStream;
- picture->serialize(&writableStream, nullptr);
+ picture->serialize(&writableStream);
sk_sp<SkData> readableData = writableStream.detachAsData();
sk_sp<SkPicture> copy = SkPicture::MakeFromData(readableData.get());
copy->playback(canvas);
diff --git a/docs/examples/Picture_MakeFromStream.cpp b/docs/examples/Picture_MakeFromStream.cpp
index fcc08e8..5508809 100644
--- a/docs/examples/Picture_MakeFromStream.cpp
+++ b/docs/examples/Picture_MakeFromStream.cpp
@@ -12,7 +12,7 @@
pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
SkDynamicMemoryWStream writableStream;
- picture->serialize(&writableStream, nullptr);
+ picture->serialize(&writableStream);
std::unique_ptr<SkStreamAsset> readableStream = writableStream.detachAsStream();
sk_sp<SkPicture> copy = SkPicture::MakeFromStream(readableStream.get());
copy->playback(canvas);
diff --git a/docs/examples/Picture_serialize.cpp b/docs/examples/Picture_serialize.cpp
index 3a0a695..1875ba6 100644
--- a/docs/examples/Picture_serialize.cpp
+++ b/docs/examples/Picture_serialize.cpp
@@ -11,10 +11,7 @@
paint.setColor(SK_ColorWHITE);
pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
- SkSerialProcs sProcs;
- // One would override serialization behavior for images, typefaces, or even SkPictures
- // themselves if desired by setting the fields on sProcs.
- sk_sp<SkData> readableData = picture->serialize(&sProcs);
+ sk_sp<SkData> readableData = picture->serialize();
sk_sp<SkPicture> copy = SkPicture::MakeFromData(readableData->data(), readableData->size());
copy->playback(canvas);
}
diff --git a/docs/examples/Picture_serialize_2.cpp b/docs/examples/Picture_serialize_2.cpp
index f97e174..f78b130 100644
--- a/docs/examples/Picture_serialize_2.cpp
+++ b/docs/examples/Picture_serialize_2.cpp
@@ -12,10 +12,7 @@
pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
SkDynamicMemoryWStream writableStream;
- SkSerialProcs sProcs;
- // One would override serialization behavior for images, typefaces, or even SkPictures
- // themselves if desired by setting the fields on sProcs.
- picture->serialize(&writableStream, &sProcs);
+ picture->serialize(&writableStream);
sk_sp<SkData> readableData = writableStream.detachAsData();
sk_sp<SkPicture> copy = SkPicture::MakeFromData(readableData->data(), readableData->size());
copy->playback(canvas);
diff --git a/fuzz/FuzzCanvas.cpp b/fuzz/FuzzCanvas.cpp
index 2c21203..268a79b 100644
--- a/fuzz/FuzzCanvas.cpp
+++ b/fuzz/FuzzCanvas.cpp
@@ -7,7 +7,6 @@
#include "fuzz/Fuzz.h"
#include "fuzz/FuzzCommon.h"
-#include "include/codec/SkPngDecoder.h"
#include "include/core/SkBitmap.h"
#include "include/core/SkBlurTypes.h"
#include "include/core/SkCanvas.h"
@@ -35,7 +34,6 @@
#include "include/effects/SkImageFilters.h"
#include "include/effects/SkLumaColorFilter.h"
#include "include/effects/SkPerlinNoiseShader.h"
-#include "include/encode/SkPngEncoder.h"
#include "include/gpu/ganesh/SkSurfaceGanesh.h"
#include "include/private/base/SkTo.h"
#include "include/svg/SkSVGCanvas.h"
@@ -1524,14 +1522,9 @@
SkIntToScalar(kCanvasSize.height())));
sk_sp<SkPicture> pic(recorder.finishRecordingAsPicture());
if (!pic) { fuzz->signalBug(); }
- SkSerialProcs sProcs;
- sProcs.fImageProc = [](SkImage* img, void*) -> sk_sp<SkData> {
- return SkPngEncoder::Encode(nullptr, img, SkPngEncoder::Options{});
- };
- sk_sp<SkData> data = pic->serialize(&sProcs);
+ sk_sp<SkData> data = pic->serialize();
if (!data) { fuzz->signalBug(); }
SkReadBuffer rb(data->data(), data->size());
- SkCodecs::Register(SkPngDecoder::Decoder());
auto deserialized = SkPicturePriv::MakeFromBuffer(rb);
if (!deserialized) { fuzz->signalBug(); }
auto surface = SkSurfaces::Raster(
diff --git a/gm/3d.cpp b/gm/3d.cpp
index d9938d1..51c1c29 100644
--- a/gm/3d.cpp
+++ b/gm/3d.cpp
@@ -8,8 +8,6 @@
#include "gm/gm.h"
#include "include/core/SkCanvas.h"
#include "include/core/SkData.h"
-#include "include/core/SkPicture.h"
-#include "include/core/SkPictureRecorder.h"
#include <cmath>
@@ -44,6 +42,9 @@
return viewport * perspective * camera * model * inv(viewport);
}
+#include "include/core/SkPicture.h"
+#include "include/core/SkPictureRecorder.h"
+
static void do_draw(SkCanvas* canvas, SkColor color) {
SkAutoCanvasRestore acr(canvas, true);
@@ -72,4 +73,10 @@
auto pic = recorder.finishRecordingAsPicture();
real_canvas->drawPicture(pic);
+
+ if ((false)) {
+ auto data = pic->serialize();
+ auto pic2 = SkPicture::MakeFromData(data.get());
+ real_canvas->drawPicture(pic2);
+ }
}
diff --git a/include/core/SkPicture.h b/include/core/SkPicture.h
index a81bd735..343d63d 100644
--- a/include/core/SkPicture.h
+++ b/include/core/SkPicture.h
@@ -162,10 +162,6 @@
may be used to provide user context to procs->fPictureProc; procs->fPictureProc
is called with a pointer to SkPicture and user context.
- The default behavior for serializing SkImages is to encode a nullptr. Should
- clients want to, for example, encode these SkImages as PNGs so they can be
- deserialized, they must provide SkSerialProcs with the fImageProc set to do so.
-
@param procs custom serial data encoders; may be nullptr
@return storage containing serialized SkPicture
@@ -180,10 +176,6 @@
may be used to provide user context to procs->fPictureProc; procs->fPictureProc
is called with a pointer to SkPicture and user context.
- The default behavior for serializing SkImages is to encode a nullptr. Should
- clients want to, for example, encode these SkImages as PNGs so they can be
- deserialized, they must provide SkSerialProcs with the fImageProc set to do so.
-
@param stream writable serial data stream
@param procs custom serial data encoders; may be nullptr
diff --git a/modules/skottie/src/SkottieTool.cpp b/modules/skottie/src/SkottieTool.cpp
index 8f4920b..30a5651 100644
--- a/modules/skottie/src/SkottieTool.cpp
+++ b/modules/skottie/src/SkottieTool.cpp
@@ -9,7 +9,6 @@
#include "include/core/SkGraphics.h"
#include "include/core/SkPicture.h"
#include "include/core/SkPictureRecorder.h"
-#include "include/core/SkSerialProcs.h"
#include "include/core/SkStream.h"
#include "include/core/SkSurface.h"
#include "include/encode/SkPngEncoder.h"
@@ -20,7 +19,6 @@
#include "modules/skresources/include/SkResources.h"
#include "src/core/SkOSFile.h"
#include "src/core/SkTaskGroup.h"
-#include "src/image/SkImage_Base.h"
#include "src/utils/SkOSPath.h"
#include "tools/flags/CommandLineFlags.h"
@@ -273,12 +271,7 @@
auto stream = make_file_stream(frame_index, "skp");
if (frame && stream) {
- SkSerialProcs sProcs;
- sProcs.fImageProc = [](SkImage* img, void*) -> sk_sp<SkData> {
- return SkPngEncoder::Encode(as_IB(img)->directContext(), img,
- SkPngEncoder::Options{});
- };
- frame->serialize(stream.get(), &sProcs);
+ frame->serialize(stream.get());
}
}
diff --git a/relnotes/skpicture_png.md b/relnotes/skpicture_png.md
deleted file mode 100644
index 6f3e88a..0000000
--- a/relnotes/skpicture_png.md
+++ /dev/null
@@ -1,2 +0,0 @@
-`SkPicture`s no longer serialize `SkImage`s to PNG encoded data by default. Clients who wish to
-preserve this should make use of `SkSerialProcs`, specifically the `fImageProc` field.
\ No newline at end of file
diff --git a/src/core/SkGlyph.cpp b/src/core/SkGlyph.cpp
index ad51f8f..4e69ff8 100644
--- a/src/core/SkGlyph.cpp
+++ b/src/core/SkGlyph.cpp
@@ -63,8 +63,6 @@
}
sk_sp<SkPicture> picture = drawable->makePictureSnapshot();
- // These drawables should not have SkImages, SkTypefaces or SkPictures inside of them, so
- // the default SkSerialProcs are sufficient.
sk_sp<SkData> data = picture->serialize();
// If the picture is too big, or there is no picture, then drop by sending an empty byte array.
diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp
index cf2a258..7ccf3a3 100644
--- a/src/core/SkPicture.cpp
+++ b/src/core/SkPicture.cpp
@@ -319,7 +319,7 @@
buffer.writeUInt(info.getVersion());
buffer.writeRect(info.fCullRect);
- if (auto custom = custom_serialize(picture.get(), buffer.serialProcs())) {
+ if (auto custom = custom_serialize(picture.get(), buffer.fProcs)) {
int32_t size = SkToS32(custom->size());
buffer.write32(-size); // negative for custom format
buffer.writePad32(custom->data(), size);
diff --git a/src/core/SkWriteBuffer.cpp b/src/core/SkWriteBuffer.cpp
index efe610d..0565b2e 100644
--- a/src/core/SkWriteBuffer.cpp
+++ b/src/core/SkWriteBuffer.cpp
@@ -8,13 +8,16 @@
#include "src/core/SkWriteBuffer.h"
#include "include/core/SkAlphaType.h"
+#include "include/core/SkBitmap.h"
#include "include/core/SkData.h"
#include "include/core/SkFlattenable.h"
#include "include/core/SkImage.h"
#include "include/core/SkPoint.h"
#include "include/core/SkPoint3.h"
#include "include/core/SkRect.h"
+#include "include/core/SkStream.h"
#include "include/core/SkTypeface.h"
+#include "include/encode/SkPngEncoder.h"
#include "include/private/base/SkAssert.h"
#include "include/private/base/SkTFitsIn.h"
#include "include/private/base/SkTo.h"
@@ -162,9 +165,21 @@
return data;
}
// Check to see if the image's source was an encoded block of data.
- // If so, just use that. Otherwise, return nullptr. Clients really should be providing
- // an ImageProc to encode images if that functionality is necessary.
- return image->refEncodedData();
+ // If so, just use that.
+ data = image->refEncodedData();
+ if (data) {
+ return data;
+ }
+ SkBitmap bm;
+ auto ib = as_IB(image);
+ if (!ib->getROPixels(ib->directContext(), &bm)) {
+ return nullptr;
+ }
+ SkDynamicMemoryWStream stream;
+ if (SkPngEncoder::Encode(&stream, bm.pixmap(), SkPngEncoder::Options())) {
+ return stream.detachAsData();
+ }
+ return nullptr;
}
static sk_sp<SkData> serialize_mipmap(const SkMipmap* mipmap, SkSerialProcs procs) {
diff --git a/src/core/SkWriteBuffer.h b/src/core/SkWriteBuffer.h
index da03f8d..4fd0cfa 100644
--- a/src/core/SkWriteBuffer.h
+++ b/src/core/SkWriteBuffer.h
@@ -84,11 +84,10 @@
virtual void writeImage(const SkImage*) = 0;
virtual void writeTypeface(SkTypeface* typeface) = 0;
virtual void writePaint(const SkPaint& paint) = 0;
-
- const SkSerialProcs& serialProcs() const { return fProcs; }
-
protected:
SkSerialProcs fProcs;
+
+ friend class SkPicturePriv; // fProcs
};
/**
diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp
index 9592ffc..4744b57 100644
--- a/tests/ImageFilterTest.cpp
+++ b/tests/ImageFilterTest.cpp
@@ -29,7 +29,6 @@
#include "include/core/SkRefCnt.h"
#include "include/core/SkSamplingOptions.h"
#include "include/core/SkScalar.h"
-#include "include/core/SkSerialProcs.h"
#include "include/core/SkShader.h"
#include "include/core/SkSize.h"
#include "include/core/SkSurface.h"
@@ -39,7 +38,6 @@
#include "include/effects/SkGradientShader.h"
#include "include/effects/SkImageFilters.h"
#include "include/effects/SkPerlinNoiseShader.h"
-#include "include/encode/SkPngEncoder.h"
#include "include/gpu/GpuTypes.h"
#include "include/gpu/GrTypes.h"
#include "include/private/base/SkTArray.h"
@@ -1659,11 +1657,7 @@
sk_sp<SkImage> image(surface->makeImageSnapshot());
sk_sp<SkImageFilter> filter(SkImageFilters::Image(std::move(image), SkFilterMode::kNearest));
- SkSerialProcs sProcs;
- sProcs.fImageProc = [](SkImage* img, void*) -> sk_sp<SkData> {
- return SkPngEncoder::Encode(as_IB(img)->directContext(), img, SkPngEncoder::Options{});
- };
- sk_sp<SkData> data(filter->serialize(&sProcs));
+ sk_sp<SkData> data(filter->serialize());
sk_sp<SkImageFilter> unflattenedFilter = SkImageFilter::Deserialize(data->data(), data->size());
REPORTER_ASSERT(reporter, unflattenedFilter);
diff --git a/tests/PictureTest.cpp b/tests/PictureTest.cpp
index f877f11..5d3c466 100644
--- a/tests/PictureTest.cpp
+++ b/tests/PictureTest.cpp
@@ -69,7 +69,7 @@
recorder.beginRecording(0, 0);
sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture());
SkDynamicMemoryWStream stream;
- picture->serialize(&stream, nullptr); // default SkSerialProcs
+ picture->serialize(&stream);
}
#endif
@@ -513,7 +513,7 @@
canvas->drawString("Q", 0, 10, font, SkPaint());
sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture());
SkDynamicMemoryWStream stream;
- picture->serialize(&stream, nullptr); // default SkSerialProcs
+ picture->serialize(&stream);
}
DEF_TEST(Picture, reporter) {
@@ -708,7 +708,7 @@
sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture());
SkDynamicMemoryWStream wstream;
- picture->serialize(&wstream, nullptr); // default SkSerialProcs
+ picture->serialize(&wstream);
std::unique_ptr<SkStream> rstream(wstream.detachAsStream());
sk_sp<SkPicture> deserializedPicture(SkPicture::MakeFromStream(rstream.get()));
@@ -785,7 +785,7 @@
auto pic = rec.finishRecordingAsPicture();
REPORTER_ASSERT(reporter, pic);
- auto data = pic->serialize(); // explicitly testing the default SkSerialProcs
+ auto data = pic->serialize();
REPORTER_ASSERT(reporter, data);
auto pic2 = SkPicture::MakeFromData(data->data(), data->size());
diff --git a/tests/SerializationTest.cpp b/tests/SerializationTest.cpp
index 588c9a7..2f638ae 100644
--- a/tests/SerializationTest.cpp
+++ b/tests/SerializationTest.cpp
@@ -732,17 +732,17 @@
// Valid case with non-empty array:
{
unsigned char data[kArraySize] = { 1, 2, 3 };
- SkBinaryWriteBuffer writer({});
- writer.writeByteArray(data, kArraySize);
- SkAutoMalloc buf(writer.bytesWritten());
- writer.writeToMemory(buf.get());
+ SkBinaryWriteBuffer writer({});
+ writer.writeByteArray(data, kArraySize);
+ SkAutoMalloc buf(writer.bytesWritten());
+ writer.writeToMemory(buf.get());
- SkReadBuffer reader(buf.get(), writer.bytesWritten());
- size_t len = ~0;
- const void* arr = reader.skipByteArray(&len);
- REPORTER_ASSERT(reporter, arr);
- REPORTER_ASSERT(reporter, len == kArraySize);
- REPORTER_ASSERT(reporter, memcmp(arr, data, len) == 0);
+ SkReadBuffer reader(buf.get(), writer.bytesWritten());
+ size_t len = ~0;
+ const void* arr = reader.skipByteArray(&len);
+ REPORTER_ASSERT(reporter, arr);
+ REPORTER_ASSERT(reporter, len == kArraySize);
+ REPORTER_ASSERT(reporter, memcmp(arr, data, len) == 0);
}
// Writing a zero length array (can be detected as valid by non-nullptr return):
diff --git a/tools/dump_record.cpp b/tools/dump_record.cpp
index 0b35691..a3f7252 100644
--- a/tools/dump_record.cpp
+++ b/tools/dump_record.cpp
@@ -8,19 +8,15 @@
#include "include/core/SkBitmap.h"
#include "include/core/SkPicture.h"
#include "include/core/SkPictureRecorder.h"
-#include "include/core/SkSerialProcs.h"
#include "include/core/SkStream.h"
-#include "include/encode/SkPngEncoder.h"
#include "src/base/SkTime.h"
#include "src/core/SkPicturePriv.h"
#include "src/core/SkRecord.h"
#include "src/core/SkRecordDraw.h"
#include "src/core/SkRecordOpts.h"
#include "src/core/SkRecorder.h"
-#include "src/image/SkImage_Base.h"
#include "tools/flags/CommandLineFlags.h"
-
-#include <cstdio>
+#include <stdio.h>
static DEFINE_string2(skps, r, "", ".SKPs to dump.");
static DEFINE_string(match, "", "The usual filters on file names to dump.");
@@ -196,11 +192,7 @@
nullptr);
sk_sp<SkPicture> dst(r.finishRecordingAsPicture());
SkFILEWStream ostream(FLAGS_write[0]);
- SkSerialProcs sProcs;
- sProcs.fImageProc = [](SkImage* img, void*) -> sk_sp<SkData> {
- return SkPngEncoder::Encode(nullptr, img, SkPngEncoder::Options{});
- };
- dst->serialize(&ostream, &sProcs);
+ dst->serialize(&ostream);
}
}
diff --git a/tools/fiddle/all_examples.cpp b/tools/fiddle/all_examples.cpp
index 79072cf..0d1acef 100644
--- a/tools/fiddle/all_examples.cpp
+++ b/tools/fiddle/all_examples.cpp
@@ -711,6 +711,7 @@
#include "docs/examples/Path_transform_2.cpp"
#include "docs/examples/Path_updateBoundsCache.cpp"
#include "docs/examples/Path_writeToMemory.cpp"
+#include "docs/examples/Picture_008.cpp"
#include "docs/examples/Picture_AbortCallback_abort.cpp"
#include "docs/examples/Picture_MakeFromData.cpp"
#include "docs/examples/Picture_MakeFromStream.cpp"
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index cb9584b..42dde2e 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -24,12 +24,10 @@
#include "include/core/SkPictureRecorder.h"
#include "include/core/SkRect.h"
#include "include/core/SkSamplingOptions.h"
-#include "include/core/SkSerialProcs.h"
#include "include/core/SkStream.h"
#include "include/core/SkSurface.h"
#include "include/core/SkSurfaceProps.h"
#include "include/core/SkTextBlob.h"
-#include "include/encode/SkPngEncoder.h"
#include "include/gpu/GrDirectContext.h"
#include "include/private/base/SkDebug.h"
#include "include/private/base/SkTPin.h"
@@ -48,7 +46,6 @@
#include "src/core/SkStringUtils.h"
#include "src/core/SkTaskGroup.h"
#include "src/core/SkTextBlobPriv.h"
-#include "src/image/SkImage_Base.h"
#include "src/sksl/SkSLCompiler.h"
#include "src/sksl/SkSLString.h"
#include "src/text/GlyphRun.h"
@@ -1594,14 +1591,6 @@
Viewer::SkFontFields* fFontOverrides;
};
-static SkSerialProcs serial_procs_using_png() {
- SkSerialProcs sProcs;
- sProcs.fImageProc = [](SkImage* img, void*) -> sk_sp<SkData> {
- return SkPngEncoder::Encode(as_IB(img)->directContext(), img, SkPngEncoder::Options{});
- };
- return sProcs;
-}
-
void Viewer::drawSlide(SkSurface* surface) {
if (fCurrentSlide < 0) {
return;
@@ -1628,8 +1617,7 @@
fSlides[fCurrentSlide]->draw(recorderCanvas);
sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture());
SkFILEWStream stream("sample_app.skp");
- SkSerialProcs sProcs = serial_procs_using_png();
- picture->serialize(&stream, &sProcs);
+ picture->serialize(&stream);
fSaveToSKP = false;
}
@@ -1728,8 +1716,7 @@
if (recorderRestoreCanvas) {
sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture());
- SkSerialProcs sProcs = serial_procs_using_png();
- auto data = picture->serialize(&sProcs);
+ auto data = picture->serialize();
slideCanvas = recorderRestoreCanvas;
slideCanvas->drawPicture(SkPicture::MakeFromData(data.get()));
}