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;