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>
This commit is contained in:
parent
eaef5493ca
commit
5adaf8bf24
@ -385,7 +385,6 @@ public:
|
||||
void copyTo(void* dst) const;
|
||||
void writeToStream(SkWStream* dst) const;
|
||||
|
||||
sk_sp<SkData> snapshotAsData() const;
|
||||
// Return the contents as SkData, and then reset the stream.
|
||||
sk_sp<SkData> detachAsData();
|
||||
|
||||
@ -400,9 +399,6 @@ private:
|
||||
Block* fHead;
|
||||
Block* fTail;
|
||||
size_t fBytesWritten;
|
||||
mutable sk_sp<SkData> fCopy; // is invalidated if we write after it is created
|
||||
|
||||
void invalidateCopy();
|
||||
|
||||
// For access to the Block type.
|
||||
friend class SkBlockMemoryStream;
|
||||
|
@ -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,24 +591,16 @@ 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);
|
||||
}
|
||||
return fCopy;
|
||||
}
|
||||
|
||||
sk_sp<SkData> SkDynamicMemoryWStream::detachAsData() {
|
||||
sk_sp<SkData> data = this->snapshotAsData();
|
||||
this->reset();
|
||||
return data;
|
||||
}
|
||||
const size_t size = this->bytesWritten();
|
||||
if (0 == size) {
|
||||
return SkData::MakeEmpty();
|
||||
}
|
||||
|
||||
void SkDynamicMemoryWStream::invalidateCopy() {
|
||||
fCopy = nullptr;
|
||||
sk_sp<SkData> data = SkData::MakeUninitialized(size);
|
||||
this->copyTo(data->writable_data());
|
||||
this->reset(); // this is the "detach" part
|
||||
return data;
|
||||
}
|
||||
|
||||
class SkBlockMemoryRefCnt : public SkRefCnt {
|
||||
@ -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;
|
||||
}
|
||||
|
@ -15,14 +15,19 @@ static const int kMaximumGlyphCount = SK_MaxU16 + 1;
|
||||
|
||||
static bool stream_equals(const SkDynamicMemoryWStream& stream, size_t offset,
|
||||
const char* buffer, size_t len) {
|
||||
sk_sp<SkData> data = stream.snapshotAsData();
|
||||
if (offset + len > data->size()) {
|
||||
return false;
|
||||
}
|
||||
if (len != strlen(buffer)) {
|
||||
return false;
|
||||
}
|
||||
return memcmp(data->bytes() + offset, buffer, len) == 0;
|
||||
|
||||
const size_t streamSize = stream.bytesWritten();
|
||||
|
||||
if (offset + len > streamSize) {
|
||||
return false;
|
||||
}
|
||||
|
||||
SkAutoTMalloc<char> data(streamSize);
|
||||
stream.copyTo(data.get());
|
||||
return memcmp(data.get() + offset, buffer, len) == 0;
|
||||
}
|
||||
|
||||
DEF_TEST(SkPDF_ToUnicode, reporter) {
|
||||
|
@ -117,12 +117,6 @@ static void TestWStream(skiatest::Reporter* reporter) {
|
||||
}
|
||||
REPORTER_ASSERT(reporter, ds.getOffset() == 100 * 26);
|
||||
|
||||
{
|
||||
sk_sp<SkData> data = ds.snapshotAsData();
|
||||
REPORTER_ASSERT(reporter, 100 * 26 == data->size());
|
||||
REPORTER_ASSERT(reporter, memcmp(dst, data->data(), data->size()) == 0);
|
||||
}
|
||||
|
||||
{
|
||||
// Test that this works after a snapshot.
|
||||
std::unique_ptr<SkStreamAsset> stream(ds.detachAsStream());
|
||||
|
Loading…
Reference in New Issue
Block a user