Revert "Revert "impl SkSerial picture procs""

This reverts commit 2a3009931d7bb0f5ca31490c4cf19eef205e4e7a.

Implement SkSerialProcs for pictures

Bug: skia:
Change-Id: Icde2d912941a19999e204ac5213f519ed5387e12
Reviewed-on: https://skia-review.googlesource.com/84480
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/include/core/SkWriteBuffer.h b/include/core/SkWriteBuffer.h
index 42d8f96..b0b6fd9 100644
--- a/include/core/SkWriteBuffer.h
+++ b/include/core/SkWriteBuffer.h
@@ -37,6 +37,8 @@
 
     virtual bool isCrossProcess() const = 0;
 
+    virtual void writePad32(const void* buffer, size_t bytes) = 0;
+
     virtual void writeByteArray(const void* data, size_t size) = 0;
     void writeDataAsByteArray(SkData* data) {
         this->writeByteArray(data->data(), data->size());
@@ -83,9 +85,14 @@
      */
     void setClientContext(void* ctx) { fClientCtx = ctx; }
 
+    void setSerialProcs(const SkSerialProcs& procs) { fProcs = procs; }
+
 protected:
-    SkDeduper* fDeduper = nullptr;
-    void*      fClientCtx = nullptr;
+    SkDeduper*      fDeduper = nullptr;
+    void*           fClientCtx = nullptr;
+    SkSerialProcs   fProcs;
+
+    friend class SkPicture; // fProcs
 };
 
 /**
@@ -108,7 +115,7 @@
     void write(const void* buffer, size_t bytes) {
         fWriter.write(buffer, bytes);
     }
-    void writePad32(const void* buffer, size_t bytes) {
+    void writePad32(const void* buffer, size_t bytes) override {
         fWriter.writePad(buffer, bytes);
     }
 
@@ -150,8 +157,6 @@
     SkFactorySet* setFactoryRecorder(SkFactorySet*);
     SkRefCntSet* setTypefaceRecorder(SkRefCntSet*);
 
-    void setSerialProcs(const SkSerialProcs& procs) { fProcs = procs; }
-
 #ifdef SK_SUPPORT_LEGACY_SERIAL_BUFFER_OBJECTS
     void setPixelSerializer(sk_sp<SkPixelSerializer>);
 #endif
@@ -162,7 +167,6 @@
     SkWriter32 fWriter;
 
     SkRefCntSet*    fTFSet;
-    SkSerialProcs   fProcs;
 
     // Only used if we do not have an fFactorySet
     SkTHashMap<SkString, uint32_t> fFlattenableDict;