add serial procs to pictures

Bug: skia:7380
Change-Id: Ic1b7e437316c7913711cf5cb119e3fe904cd2c05
Reviewed-on: https://skia-review.googlesource.com/76980
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
diff --git a/include/core/SkWriteBuffer.h b/include/core/SkWriteBuffer.h
index b2db008..42d8f96 100644
--- a/include/core/SkWriteBuffer.h
+++ b/include/core/SkWriteBuffer.h
@@ -9,15 +9,21 @@
 #ifndef SkWriteBuffer_DEFINED
 #define SkWriteBuffer_DEFINED
 
+#define SK_SUPPORT_LEGACY_SERIAL_BUFFER_OBJECTS
+
 #include "SkData.h"
 #include "SkImage.h"
 #include "SkPath.h"
 #include "SkPicture.h"
-#include "SkPixelSerializer.h"
 #include "SkRefCnt.h"
+#include "SkSerialProcs.h"
 #include "SkWriter32.h"
 #include "../private/SkTHash.h"
 
+#ifdef SK_SUPPORT_LEGACY_SERIAL_BUFFER_OBJECTS
+#include "SkPixelSerializer.h"
+#endif
+
 class SkBitmap;
 class SkDeduper;
 class SkFactorySet;
@@ -102,6 +108,9 @@
     void write(const void* buffer, size_t bytes) {
         fWriter.write(buffer, bytes);
     }
+    void writePad32(const void* buffer, size_t bytes) {
+        fWriter.writePad(buffer, bytes);
+    }
 
     void reset(void* storage = nullptr, size_t storageSize = 0) {
         fWriter.reset(storage, storageSize);
@@ -141,26 +150,26 @@
     SkFactorySet* setFactoryRecorder(SkFactorySet*);
     SkRefCntSet* setTypefaceRecorder(SkRefCntSet*);
 
-    /**
-     * Set an SkPixelSerializer to store an encoded representation of pixels,
-     * e.g. SkBitmaps.
-     *
-     * TODO: Encode SkImage pixels as well.
-     */
+    void setSerialProcs(const SkSerialProcs& procs) { fProcs = procs; }
+
+#ifdef SK_SUPPORT_LEGACY_SERIAL_BUFFER_OBJECTS
     void setPixelSerializer(sk_sp<SkPixelSerializer>);
-    SkPixelSerializer* getPixelSerializer() const { return fPixelSerializer.get(); }
+#endif
 
 private:
     const uint32_t fFlags;
     SkFactorySet* fFactorySet;
     SkWriter32 fWriter;
 
-    SkRefCntSet* fTFSet;
-
-    sk_sp<SkPixelSerializer> fPixelSerializer;
+    SkRefCntSet*    fTFSet;
+    SkSerialProcs   fProcs;
 
     // Only used if we do not have an fFactorySet
     SkTHashMap<SkString, uint32_t> fFlattenableDict;
+
+#ifdef SK_SUPPORT_LEGACY_SERIAL_BUFFER_OBJECTS
+    sk_sp<SkPixelSerializer> fPS;
+#endif
 };
 
 #endif // SkWriteBuffer_DEFINED