diff options
author | Ben Wagner <bungeman@google.com> | 2016-12-16 15:34:58 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-12-19 16:45:22 +0000 |
commit | efa9d34ccbdeb541a1fa77a678552df7a08531be (patch) | |
tree | 2c5d3a22b94788cbf8473ed6d6ead6a4a1a1348f /src/core/SkStream.cpp | |
parent | 4f8a467a47c0cf98bac728b8fb80d0b8b5ff421e (diff) |
Explicit ownership of data in SkBlockMemoryStream.
SkBlockMemoryStream does not currently document the ownership of its
data pointers. Make the ownership explicit.
Change-Id: Id3f59d09c298550a987a4e74031e2d920e83ba82
Reviewed-on: https://skia-review.googlesource.com/6222
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
Diffstat (limited to 'src/core/SkStream.cpp')
-rw-r--r-- | src/core/SkStream.cpp | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/src/core/SkStream.cpp b/src/core/SkStream.cpp index cf473e76c4..e5fcc877d6 100644 --- a/src/core/SkStream.cpp +++ b/src/core/SkStream.cpp @@ -657,15 +657,8 @@ public: class SkBlockMemoryStream : public SkStreamAsset { public: - SkBlockMemoryStream(SkDynamicMemoryWStream::Block* head, size_t size) - : fBlockMemory(new SkBlockMemoryRefCnt(head)) - , fCurrent(head) - , fSize(size) - , fOffset(0) - , fCurrentOffset(0) {} - - SkBlockMemoryStream(SkBlockMemoryRefCnt* headRef, size_t size) - : fBlockMemory(SkRef(headRef)), fCurrent(fBlockMemory->fHead) + SkBlockMemoryStream(sk_sp<SkBlockMemoryRefCnt> headRef, size_t size) + : fBlockMemory(std::move(headRef)), fCurrent(fBlockMemory->fHead) , fSize(size) , fOffset(0), fCurrentOffset(0) { } size_t read(void* buffer, size_t rawCount) override { @@ -709,8 +702,7 @@ public: size_t currentOffset = fCurrentOffset; while (bytesLeftToPeek) { SkASSERT(current); - size_t bytesFromCurrent = - SkTMin(current->written() - currentOffset, bytesLeftToPeek); + size_t bytesFromCurrent = SkTMin(current->written() - currentOffset, bytesLeftToPeek); memcpy(buffer, current->start() + currentOffset, bytesFromCurrent); bytesLeftToPeek -= bytesFromCurrent; buffer += bytesFromCurrent; @@ -728,7 +720,7 @@ public: } SkBlockMemoryStream* duplicate() const override { - return new SkBlockMemoryStream(fBlockMemory.get(), fSize); + return new SkBlockMemoryStream(fBlockMemory, fSize); } size_t getPosition() const override { @@ -769,8 +761,7 @@ public: } const void* getMemoryBase() override { - if (nullptr != fBlockMemory->fHead && - nullptr == fBlockMemory->fHead->fNext) { + if (fBlockMemory->fHead && !fBlockMemory->fHead->fNext) { return fBlockMemory->fHead->start(); } return nullptr; @@ -785,10 +776,11 @@ private: }; SkStreamAsset* SkDynamicMemoryWStream::detachAsStream() { - SkBlockMemoryStream* stream = new SkBlockMemoryStream(fHead, this->bytesWritten()); + auto stream = skstd::make_unique<SkBlockMemoryStream>(sk_make_sp<SkBlockMemoryRefCnt>(fHead), + this->bytesWritten()); fHead = nullptr; // signal reset() to not free anything this->reset(); - return stream; + return stream.release(); } /////////////////////////////////////////////////////////////////////////////// |