aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Ben Wagner <bungeman@google.com>2018-07-10 16:26:34 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-07-10 21:33:25 +0000
commit02ca49fc466bc54831c3a8f03b1b3c6ab6bba498 (patch)
tree39a8d5d4209b89d61bbc1fcca77b631c27fea536
parent351f4daca4f36edc5b8622a5ab646e7c509e6751 (diff)
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>
-rw-r--r--src/core/SkPictureData.cpp4
-rw-r--r--src/core/SkWriteBuffer.cpp19
-rw-r--r--src/core/SkWriteBuffer.h10
3 files changed, 14 insertions, 19 deletions
diff --git a/src/core/SkPictureData.cpp b/src/core/SkPictureData.cpp
index 7699cdab20..92234f9ce9 100644
--- a/src/core/SkPictureData.cpp
+++ b/src/core/SkPictureData.cpp
@@ -189,9 +189,9 @@ void SkPictureData::serialize(SkWStream* stream, const SkSerialProcs& procs,
// 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 a40e9abaa8..8300f61d4b 100644
--- a/src/core/SkWriteBuffer.cpp
+++ b/src/core/SkWriteBuffer.cpp
@@ -27,14 +27,11 @@ SkBinaryWriteBuffer::SkBinaryWriteBuffer()
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 @@ void SkBinaryWriteBuffer::writePaint(const SkPaint& paint) {
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 7be1794c2d..011977ca19 100644
--- a/src/core/SkWriteBuffer.h
+++ b/src/core/SkWriteBuffer.h
@@ -125,14 +125,14 @@ public:
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;