aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkStream.cpp
diff options
context:
space:
mode:
authorGravatar Ben Wagner <bungeman@google.com>2016-12-16 15:34:58 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-12-19 16:45:22 +0000
commitefa9d34ccbdeb541a1fa77a678552df7a08531be (patch)
tree2c5d3a22b94788cbf8473ed6d6ead6a4a1a1348f /src/core/SkStream.cpp
parent4f8a467a47c0cf98bac728b8fb80d0b8b5ff421e (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.cpp24
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();
}
///////////////////////////////////////////////////////////////////////////////