add pipecanvas

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2201323003

Review-Url: https://codereview.chromium.org/2201323003
diff --git a/include/core/SkWriteBuffer.h b/include/core/SkWriteBuffer.h
index 87ac8bf..d77c073 100644
--- a/include/core/SkWriteBuffer.h
+++ b/include/core/SkWriteBuffer.h
@@ -19,6 +19,7 @@
 #include "../private/SkTHash.h"
 
 class SkBitmap;
+class SkDeduper;
 class SkFactorySet;
 class SkFlattenable;
 class SkRefCntSet;
@@ -60,12 +61,17 @@
     virtual void writeImage(const SkImage*) = 0;
     virtual void writeTypeface(SkTypeface* typeface) = 0;
     virtual void writePaint(const SkPaint& paint) = 0;
+
+    void setDeduper(SkDeduper* deduper) { fDeduper = deduper; }
+
+protected:
+    SkDeduper* fDeduper = nullptr;
 };
 
 /**
  * Concrete implementation that serializes to a flat binary blob.
  */
-class SkBinaryWriteBuffer final : public SkWriteBuffer {
+class SkBinaryWriteBuffer : public SkWriteBuffer {
 public:
     enum Flags {
         kCrossProcess_Flag = 1 << 0,
@@ -79,6 +85,10 @@
         return SkToBool(fFlags & kCrossProcess_Flag);
     }
 
+    void write(const void* buffer, size_t bytes) {
+        fWriter.write(buffer, bytes);
+    }
+
     void reset(void* storage = NULL, size_t storageSize = 0) {
         fWriter.reset(storage, storageSize);
     }