Index: src/core/SkWriteBuffer.cpp |
diff --git a/src/core/SkWriteBuffer.cpp b/src/core/SkWriteBuffer.cpp |
index 33ac03b49de66e51d82fc1a0bb1a1a1c4c4c05b9..8572170ac3a8c9dbb5833d43bfe7d142a5ce1328 100644 |
--- a/src/core/SkWriteBuffer.cpp |
+++ b/src/core/SkWriteBuffer.cpp |
@@ -8,11 +8,30 @@ |
#include "SkWriteBuffer.h" |
#include "SkBitmap.h" |
#include "SkData.h" |
+#include "SkDeduper.h" |
#include "SkPixelRef.h" |
#include "SkPtrRecorder.h" |
#include "SkStream.h" |
#include "SkTypeface.h" |
+bool SkWriteBuffer::newWriteImage(const SkImage* image) { |
+ if (fImageDeduper) { |
+ this->write32(fImageDeduper->findOrDefine((void*)image)); |
+ return true; |
+ } |
+ return false; |
+} |
+ |
+bool SkWriteBuffer::newWriteTypeface(SkTypeface* typeface) { |
+ if (fTypefaceDeduper) { |
+ this->write32(fTypefaceDeduper->findOrDefine(typeface)); |
+ return true; |
+ } |
+ return false; |
+} |
+ |
+/////////////////////////////////////////////////////////////////////////////////////////////////// |
+ |
SkBinaryWriteBuffer::SkBinaryWriteBuffer(uint32_t flags) |
: fFlags(flags) |
, fFactorySet(nullptr) |
@@ -173,6 +192,10 @@ void SkBinaryWriteBuffer::writeBitmap(const SkBitmap& bitmap) { |
} |
void SkBinaryWriteBuffer::writeImage(const SkImage* image) { |
+ if (this->newWriteImage(image)) { |
+ return; |
+ } |
+ |
this->writeInt(image->width()); |
this->writeInt(image->height()); |
@@ -193,6 +216,10 @@ void SkBinaryWriteBuffer::writeImage(const SkImage* image) { |
} |
void SkBinaryWriteBuffer::writeTypeface(SkTypeface* obj) { |
+ if (this->newWriteTypeface(obj)) { |
+ return; |
+ } |
+ |
if (nullptr == obj || nullptr == fTFSet) { |
fWriter.write32(0); |
} else { |