aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkStream.cpp
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2016-12-15 13:02:33 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-12-15 19:01:02 +0000
commit5adaf8bf24e7581104c41c868188602624e8ba86 (patch)
tree134e6d015f48fe1bbb246029494cd7cb2c741009 /src/core/SkStream.cpp
parenteaef5493ca51ccc722f594ed21d331d40bffd14c (diff)
remove unused dynamicwstream.snapshotAsData()
Checking to invalidate this on every write() call has a measurable cost, so removing it both simplifies the class and speeds it up. BUG=skia: Change-Id: Idf0baa265c9a0b5d26d82fce948c61ed9b0810b1 Reviewed-on: https://skia-review.googlesource.com/6096 Reviewed-by: Ben Wagner <bungeman@google.com> Reviewed-by: Mike Klein <mtklein@chromium.org> Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'src/core/SkStream.cpp')
-rw-r--r--src/core/SkStream.cpp62
1 files changed, 18 insertions, 44 deletions
diff --git a/src/core/SkStream.cpp b/src/core/SkStream.cpp
index cb47437d0c..20afe2b701 100644
--- a/src/core/SkStream.cpp
+++ b/src/core/SkStream.cpp
@@ -504,12 +504,8 @@ SkDynamicMemoryWStream::~SkDynamicMemoryWStream()
reset();
}
-void SkDynamicMemoryWStream::reset()
-{
- this->invalidateCopy();
-
+void SkDynamicMemoryWStream::reset() {
Block* block = fHead;
-
while (block != nullptr) {
Block* next = block->fNext;
sk_free(block);
@@ -519,11 +515,8 @@ void SkDynamicMemoryWStream::reset()
fBytesWritten = 0;
}
-bool SkDynamicMemoryWStream::write(const void* buffer, size_t count)
-{
+bool SkDynamicMemoryWStream::write(const void* buffer, size_t count) {
if (count > 0) {
- this->invalidateCopy();
-
fBytesWritten += count;
size_t size;
@@ -572,19 +565,13 @@ bool SkDynamicMemoryWStream::read(void* buffer, size_t offset, size_t count)
return false;
}
-void SkDynamicMemoryWStream::copyTo(void* dst) const
-{
- if (fCopy) {
- memcpy(dst, fCopy->data(), fBytesWritten);
- } else {
- Block* block = fHead;
-
- while (block != nullptr) {
- size_t size = block->written();
- memcpy(dst, block->start(), size);
- dst = (void*)((char*)dst + size);
- block = block->fNext;
- }
+void SkDynamicMemoryWStream::copyTo(void* dst) const {
+ Block* block = fHead;
+ while (block != nullptr) {
+ size_t size = block->written();
+ memcpy(dst, block->start(), size);
+ dst = (void*)((char*)dst + size);
+ block = block->fNext;
}
}
@@ -604,26 +591,18 @@ void SkDynamicMemoryWStream::padToAlign4()
write(&zero, padBytes);
}
-sk_sp<SkData> SkDynamicMemoryWStream::snapshotAsData() const {
- if (nullptr == fCopy) {
- auto data = SkData::MakeUninitialized(fBytesWritten);
- // be sure to call copyTo() before we assign to fCopy
- this->copyTo(data->writable_data());
- fCopy = std::move(data);
+sk_sp<SkData> SkDynamicMemoryWStream::detachAsData() {
+ const size_t size = this->bytesWritten();
+ if (0 == size) {
+ return SkData::MakeEmpty();
}
- return fCopy;
-}
-sk_sp<SkData> SkDynamicMemoryWStream::detachAsData() {
- sk_sp<SkData> data = this->snapshotAsData();
- this->reset();
+ sk_sp<SkData> data = SkData::MakeUninitialized(size);
+ this->copyTo(data->writable_data());
+ this->reset(); // this is the "detach" part
return data;
}
-void SkDynamicMemoryWStream::invalidateCopy() {
- fCopy = nullptr;
-}
-
class SkBlockMemoryRefCnt : public SkRefCnt {
public:
explicit SkBlockMemoryRefCnt(SkDynamicMemoryWStream::Block* head) : fHead(head) { }
@@ -770,13 +749,8 @@ private:
};
SkStreamAsset* SkDynamicMemoryWStream::detachAsStream() {
- if (fCopy) {
- SkMemoryStream* stream = new SkMemoryStream(fCopy);
- this->reset();
- return stream;
- }
- SkBlockMemoryStream* stream = new SkBlockMemoryStream(fHead, fBytesWritten);
- fHead = 0;
+ SkBlockMemoryStream* stream = new SkBlockMemoryStream(fHead, this->bytesWritten());
+ fHead = nullptr; // signal reset() to not free anything
this->reset();
return stream;
}