Chromium Code Reviews| Index: include/core/SkWriteBuffer.h |
| diff --git a/include/core/SkWriteBuffer.h b/include/core/SkWriteBuffer.h |
| index 87ac8bf21494aa3ea8ec2aec7823a03bf74a0bea..83af4419ba00f2113c6ac1fbbe9bb49ff8b37727 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; |
| @@ -30,6 +31,8 @@ public: |
| virtual bool isCrossProcess() const = 0; |
| + virtual void write(const void*, size_t) { sk_throw(); } |
|
mtklein
2016/08/04 12:50:37
The other implementation of SkWriteBuffer isn't wr
reed1
2016/08/04 13:18:41
Makes sense. I hadn't internalized that I was goin
|
| + |
| virtual void writeByteArray(const void* data, size_t size) = 0; |
| void writeDataAsByteArray(SkData* data) { |
| this->writeByteArray(data->data(), data->size()); |
| @@ -60,12 +63,24 @@ public: |
| virtual void writeImage(const SkImage*) = 0; |
| virtual void writeTypeface(SkTypeface* typeface) = 0; |
| virtual void writePaint(const SkPaint& paint) = 0; |
| + |
| + void setDedupers(SkDeduper* images, SkDeduper* typefaces) { |
|
mtklein
2016/08/04 12:50:37
We can probably just put these on SkBinaryWriteBuf
|
| + fImageDeduper = images; |
| + fTypefaceDeduper = typefaces; |
| + } |
| + |
| +protected: |
| + bool newWriteImage(const SkImage*); |
| + bool newWriteTypeface(SkTypeface*); |
| + |
| + SkDeduper* fImageDeduper = nullptr; |
| + SkDeduper* fTypefaceDeduper = 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 +94,10 @@ public: |
| return SkToBool(fFlags & kCrossProcess_Flag); |
| } |
| + void write(const void* buffer, size_t bytes) override { |
| + fWriter.write(buffer, bytes); |
| + } |
| + |
| void reset(void* storage = NULL, size_t storageSize = 0) { |
| fWriter.reset(storage, storageSize); |
| } |