diff options
author | Mike Reed <reed@google.com> | 2016-12-15 13:02:33 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-12-15 19:01:02 +0000 |
commit | 5adaf8bf24e7581104c41c868188602624e8ba86 (patch) | |
tree | 134e6d015f48fe1bbb246029494cd7cb2c741009 /src/core/SkStream.cpp | |
parent | eaef5493ca51ccc722f594ed21d331d40bffd14c (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.cpp | 62 |
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; } |