Move SkWriteBuffer to smart pointers.
The fields fFactorySet and fTFSet and their setting member functions are
changed to use smart pointers instead of manually handling the reference
counting.
Change-Id: I7d8e9f3dff5a7b4770959c5cc143a3ac7289d108
Reviewed-on: https://skia-review.googlesource.com/140348
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
diff --git a/src/core/SkPictureData.cpp b/src/core/SkPictureData.cpp
index 7699cda..92234f9 100644
--- a/src/core/SkPictureData.cpp
+++ b/src/core/SkPictureData.cpp
@@ -189,9 +189,9 @@
// factories and typefaces by first serializing to an in-memory write buffer.
SkFactorySet factSet; // buffer refs factSet, so factSet must come first.
SkBinaryWriteBuffer buffer;
- buffer.setFactoryRecorder(&factSet);
+ buffer.setFactoryRecorder(sk_ref_sp(&factSet));
buffer.setSerialProcs(procs);
- buffer.setTypefaceRecorder(typefaceSet);
+ buffer.setTypefaceRecorder(sk_ref_sp(typefaceSet));
this->flattenToBuffer(buffer);
// Dummy serialize our sub-pictures for the side effect of filling
diff --git a/src/core/SkWriteBuffer.cpp b/src/core/SkWriteBuffer.cpp
index a40e9ab..8300f61 100644
--- a/src/core/SkWriteBuffer.cpp
+++ b/src/core/SkWriteBuffer.cpp
@@ -27,14 +27,11 @@
SkBinaryWriteBuffer::SkBinaryWriteBuffer(void* storage, size_t storageSize)
: fFactorySet(nullptr)
+ , fTFSet(nullptr)
, fWriter(storage, storageSize)
- , fTFSet(nullptr) {
-}
+{}
-SkBinaryWriteBuffer::~SkBinaryWriteBuffer() {
- SkSafeUnref(fFactorySet);
- SkSafeUnref(fTFSet);
-}
+SkBinaryWriteBuffer::~SkBinaryWriteBuffer() {}
bool SkBinaryWriteBuffer::usingInitialStorage() const {
return fWriter.usingInitialStorage();
@@ -204,14 +201,12 @@
SkPaintPriv::Flatten(paint, *this);
}
-SkFactorySet* SkBinaryWriteBuffer::setFactoryRecorder(SkFactorySet* rec) {
- SkRefCnt_SafeAssign(fFactorySet, rec);
- return rec;
+void SkBinaryWriteBuffer::setFactoryRecorder(sk_sp<SkFactorySet> rec) {
+ fFactorySet = std::move(rec);
}
-SkRefCntSet* SkBinaryWriteBuffer::setTypefaceRecorder(SkRefCntSet* rec) {
- SkRefCnt_SafeAssign(fTFSet, rec);
- return rec;
+void SkBinaryWriteBuffer::setTypefaceRecorder(sk_sp<SkRefCntSet> rec) {
+ fTFSet = std::move(rec);
}
void SkBinaryWriteBuffer::writeFlattenable(const SkFlattenable* flattenable) {
diff --git a/src/core/SkWriteBuffer.h b/src/core/SkWriteBuffer.h
index 7be1794..011977c 100644
--- a/src/core/SkWriteBuffer.h
+++ b/src/core/SkWriteBuffer.h
@@ -125,14 +125,14 @@
bool writeToStream(SkWStream*);
void writeToMemory(void* dst) { fWriter.flatten(dst); }
- SkFactorySet* setFactoryRecorder(SkFactorySet*);
- SkRefCntSet* setTypefaceRecorder(SkRefCntSet*);
+ void setFactoryRecorder(sk_sp<SkFactorySet>);
+ void setTypefaceRecorder(sk_sp<SkRefCntSet>);
private:
- SkFactorySet* fFactorySet;
- SkWriter32 fWriter;
+ sk_sp<SkFactorySet> fFactorySet;
+ sk_sp<SkRefCntSet> fTFSet;
- SkRefCntSet* fTFSet;
+ SkWriter32 fWriter;
// Only used if we do not have an fFactorySet
SkTHashMap<SkString, uint32_t> fFlattenableDict;