| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #include "SkStream.h" | 10 #include "SkStream.h" |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 return new SkMemoryStream(fData); | 238 return new SkMemoryStream(fData); |
| 239 } | 239 } |
| 240 | 240 |
| 241 if (!fName.isEmpty()) { | 241 if (!fName.isEmpty()) { |
| 242 SkAutoTDelete<SkFILEStream> that(new SkFILEStream(fName.c_str())); | 242 SkAutoTDelete<SkFILEStream> that(new SkFILEStream(fName.c_str())); |
| 243 if (sk_fidentical(that->fFILE, this->fFILE)) { | 243 if (sk_fidentical(that->fFILE, this->fFILE)) { |
| 244 return that.detach(); | 244 return that.detach(); |
| 245 } | 245 } |
| 246 } | 246 } |
| 247 | 247 |
| 248 fData.reset(SkData::NewFromFILE(fFILE)); | 248 fData = SkData::MakeFromFILE(fFILE); |
| 249 if (nullptr == fData.get()) { | 249 if (nullptr == fData) { |
| 250 return nullptr; | 250 return nullptr; |
| 251 } | 251 } |
| 252 return new SkMemoryStream(fData); | 252 return new SkMemoryStream(fData); |
| 253 } | 253 } |
| 254 | 254 |
| 255 size_t SkFILEStream::getPosition() const { | 255 size_t SkFILEStream::getPosition() const { |
| 256 return sk_ftell(fFILE); | 256 return sk_ftell(fFILE); |
| 257 } | 257 } |
| 258 | 258 |
| 259 bool SkFILEStream::seek(size_t position) { | 259 bool SkFILEStream::seek(size_t position) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 276 | 276 |
| 277 const void* SkFILEStream::getMemoryBase() { | 277 const void* SkFILEStream::getMemoryBase() { |
| 278 if (nullptr == fData.get()) { | 278 if (nullptr == fData.get()) { |
| 279 return nullptr; | 279 return nullptr; |
| 280 } | 280 } |
| 281 return fData->data(); | 281 return fData->data(); |
| 282 } | 282 } |
| 283 | 283 |
| 284 /////////////////////////////////////////////////////////////////////////////// | 284 /////////////////////////////////////////////////////////////////////////////// |
| 285 | 285 |
| 286 static SkData* newFromParams(const void* src, size_t size, bool copyData) { | 286 static sk_sp<SkData> newFromParams(const void* src, size_t size, bool copyData)
{ |
| 287 if (copyData) { | 287 if (copyData) { |
| 288 return SkData::NewWithCopy(src, size); | 288 return SkData::MakeWithCopy(src, size); |
| 289 } else { | 289 } else { |
| 290 return SkData::NewWithoutCopy(src, size); | 290 return SkData::MakeWithoutCopy(src, size); |
| 291 } | 291 } |
| 292 } | 292 } |
| 293 | 293 |
| 294 SkMemoryStream::SkMemoryStream() { | 294 SkMemoryStream::SkMemoryStream() { |
| 295 fData = SkData::NewEmpty(); | 295 fData = SkData::MakeEmpty(); |
| 296 fOffset = 0; | 296 fOffset = 0; |
| 297 } | 297 } |
| 298 | 298 |
| 299 SkMemoryStream::SkMemoryStream(size_t size) { | 299 SkMemoryStream::SkMemoryStream(size_t size) { |
| 300 fData = SkData::NewUninitialized(size); | 300 fData = SkData::MakeUninitialized(size); |
| 301 fOffset = 0; | 301 fOffset = 0; |
| 302 } | 302 } |
| 303 | 303 |
| 304 SkMemoryStream::SkMemoryStream(const void* src, size_t size, bool copyData) { | 304 SkMemoryStream::SkMemoryStream(const void* src, size_t size, bool copyData) { |
| 305 fData = newFromParams(src, size, copyData); | 305 fData = newFromParams(src, size, copyData); |
| 306 fOffset = 0; | 306 fOffset = 0; |
| 307 } | 307 } |
| 308 | 308 |
| 309 SkMemoryStream::SkMemoryStream(sk_sp<SkData> data) : fData(std::move(data)) { |
| 310 if (nullptr == fData) { |
| 311 fData = SkData::MakeEmpty(); |
| 312 } |
| 313 fOffset = 0; |
| 314 } |
| 315 |
| 309 SkMemoryStream::SkMemoryStream(SkData* data) { | 316 SkMemoryStream::SkMemoryStream(SkData* data) { |
| 310 if (nullptr == data) { | 317 if (nullptr == data) { |
| 311 fData = SkData::NewEmpty(); | 318 fData = SkData::MakeEmpty(); |
| 312 } else { | 319 } else { |
| 313 fData = data; | 320 fData = sk_ref_sp(data); |
| 314 fData->ref(); | |
| 315 } | 321 } |
| 316 fOffset = 0; | 322 fOffset = 0; |
| 317 } | 323 } |
| 318 | 324 |
| 319 SkMemoryStream::~SkMemoryStream() { | |
| 320 fData->unref(); | |
| 321 } | |
| 322 | |
| 323 void SkMemoryStream::setMemoryOwned(const void* src, size_t size) { | 325 void SkMemoryStream::setMemoryOwned(const void* src, size_t size) { |
| 324 fData->unref(); | 326 fData = SkData::MakeFromMalloc(src, size); |
| 325 fData = SkData::NewFromMalloc(src, size); | |
| 326 fOffset = 0; | 327 fOffset = 0; |
| 327 } | 328 } |
| 328 | 329 |
| 329 void SkMemoryStream::setMemory(const void* src, size_t size, bool copyData) { | 330 void SkMemoryStream::setMemory(const void* src, size_t size, bool copyData) { |
| 330 fData->unref(); | |
| 331 fData = newFromParams(src, size, copyData); | 331 fData = newFromParams(src, size, copyData); |
| 332 fOffset = 0; | 332 fOffset = 0; |
| 333 } | 333 } |
| 334 | 334 |
| 335 SkData* SkMemoryStream::copyToData() const { | 335 SkData* SkMemoryStream::copyToData() const { |
| 336 fData->ref(); | 336 return SkSafeRef(fData.get()); |
| 337 return fData; | |
| 338 } | 337 } |
| 339 | 338 |
| 340 SkData* SkMemoryStream::setData(SkData* data) { | 339 SkData* SkMemoryStream::setData(SkData* data) { |
| 341 fData->unref(); | |
| 342 if (nullptr == data) { | 340 if (nullptr == data) { |
| 343 fData = SkData::NewEmpty(); | 341 fData = SkData::MakeEmpty(); |
| 344 } else { | 342 } else { |
| 345 fData = data; | 343 fData = sk_ref_sp(data); |
| 346 fData->ref(); | |
| 347 } | 344 } |
| 348 fOffset = 0; | 345 fOffset = 0; |
| 349 return data; | 346 return data; |
| 350 } | 347 } |
| 351 | 348 |
| 352 void SkMemoryStream::skipToAlign4() { | 349 void SkMemoryStream::skipToAlign4() { |
| 353 // cast to remove unary-minus warning | 350 // cast to remove unary-minus warning |
| 354 fOffset += -(int)fOffset & 0x03; | 351 fOffset += -(int)fOffset & 0x03; |
| 355 } | 352 } |
| 356 | 353 |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 512 const void* append(const void* data, size_t size) | 509 const void* append(const void* data, size_t size) |
| 513 { | 510 { |
| 514 SkASSERT((size_t)(fStop - fCurr) >= size); | 511 SkASSERT((size_t)(fStop - fCurr) >= size); |
| 515 memcpy(fCurr, data, size); | 512 memcpy(fCurr, data, size); |
| 516 fCurr += size; | 513 fCurr += size; |
| 517 return (const void*)((const char*)data + size); | 514 return (const void*)((const char*)data + size); |
| 518 } | 515 } |
| 519 }; | 516 }; |
| 520 | 517 |
| 521 SkDynamicMemoryWStream::SkDynamicMemoryWStream() | 518 SkDynamicMemoryWStream::SkDynamicMemoryWStream() |
| 522 : fHead(nullptr), fTail(nullptr), fBytesWritten(0), fCopy(nullptr) | 519 : fHead(nullptr), fTail(nullptr), fBytesWritten(0) |
| 523 { | 520 {} |
| 524 } | |
| 525 | 521 |
| 526 SkDynamicMemoryWStream::~SkDynamicMemoryWStream() | 522 SkDynamicMemoryWStream::~SkDynamicMemoryWStream() |
| 527 { | 523 { |
| 528 reset(); | 524 reset(); |
| 529 } | 525 } |
| 530 | 526 |
| 531 void SkDynamicMemoryWStream::reset() | 527 void SkDynamicMemoryWStream::reset() |
| 532 { | 528 { |
| 533 this->invalidateCopy(); | 529 this->invalidateCopy(); |
| 534 | 530 |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 648 // cast to remove unary-minus warning | 644 // cast to remove unary-minus warning |
| 649 int padBytes = -(int)fBytesWritten & 0x03; | 645 int padBytes = -(int)fBytesWritten & 0x03; |
| 650 if (padBytes == 0) | 646 if (padBytes == 0) |
| 651 return; | 647 return; |
| 652 int zero = 0; | 648 int zero = 0; |
| 653 write(&zero, padBytes); | 649 write(&zero, padBytes); |
| 654 } | 650 } |
| 655 | 651 |
| 656 SkData* SkDynamicMemoryWStream::copyToData() const { | 652 SkData* SkDynamicMemoryWStream::copyToData() const { |
| 657 if (nullptr == fCopy) { | 653 if (nullptr == fCopy) { |
| 658 SkData* data = SkData::NewUninitialized(fBytesWritten); | 654 auto data = SkData::MakeUninitialized(fBytesWritten); |
| 659 // be sure to call copyTo() before we assign to fCopy | 655 // be sure to call copyTo() before we assign to fCopy |
| 660 this->copyTo(data->writable_data()); | 656 this->copyTo(data->writable_data()); |
| 661 fCopy = data; | 657 fCopy = std::move(data); |
| 662 } | 658 } |
| 663 return SkRef(fCopy); | 659 return SkRef(fCopy.get()); |
| 664 } | 660 } |
| 665 | 661 |
| 666 void SkDynamicMemoryWStream::invalidateCopy() { | 662 void SkDynamicMemoryWStream::invalidateCopy() { |
| 667 if (fCopy) { | 663 fCopy = nullptr; |
| 668 fCopy->unref(); | |
| 669 fCopy = nullptr; | |
| 670 } | |
| 671 } | 664 } |
| 672 | 665 |
| 673 class SkBlockMemoryRefCnt : public SkRefCnt { | 666 class SkBlockMemoryRefCnt : public SkRefCnt { |
| 674 public: | 667 public: |
| 675 explicit SkBlockMemoryRefCnt(SkDynamicMemoryWStream::Block* head) : fHead(he
ad) { } | 668 explicit SkBlockMemoryRefCnt(SkDynamicMemoryWStream::Block* head) : fHead(he
ad) { } |
| 676 | 669 |
| 677 virtual ~SkBlockMemoryRefCnt() { | 670 virtual ~SkBlockMemoryRefCnt() { |
| 678 SkDynamicMemoryWStream::Block* block = fHead; | 671 SkDynamicMemoryWStream::Block* block = fHead; |
| 679 while (block != nullptr) { | 672 while (block != nullptr) { |
| 680 SkDynamicMemoryWStream::Block* next = block->fNext; | 673 SkDynamicMemoryWStream::Block* next = block->fNext; |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 847 delete[] s; | 840 delete[] s; |
| 848 fBytesWritten += size; | 841 fBytesWritten += size; |
| 849 #endif | 842 #endif |
| 850 return true; | 843 return true; |
| 851 } | 844 } |
| 852 | 845 |
| 853 /////////////////////////////////////////////////////////////////////////////// | 846 /////////////////////////////////////////////////////////////////////////////// |
| 854 /////////////////////////////////////////////////////////////////////////////// | 847 /////////////////////////////////////////////////////////////////////////////// |
| 855 | 848 |
| 856 | 849 |
| 857 static SkData* mmap_filename(const char path[]) { | 850 static sk_sp<SkData> mmap_filename(const char path[]) { |
| 858 FILE* file = sk_fopen(path, kRead_SkFILE_Flag); | 851 FILE* file = sk_fopen(path, kRead_SkFILE_Flag); |
| 859 if (nullptr == file) { | 852 if (nullptr == file) { |
| 860 return nullptr; | 853 return nullptr; |
| 861 } | 854 } |
| 862 | 855 |
| 863 SkData* data = SkData::NewFromFILE(file); | 856 auto data = SkData::MakeFromFILE(file); |
| 864 sk_fclose(file); | 857 sk_fclose(file); |
| 865 return data; | 858 return data; |
| 866 } | 859 } |
| 867 | 860 |
| 868 SkStreamAsset* SkStream::NewFromFile(const char path[]) { | 861 SkStreamAsset* SkStream::NewFromFile(const char path[]) { |
| 869 SkAutoTUnref<SkData> data(mmap_filename(path)); | 862 auto data(mmap_filename(path)); |
| 870 if (data.get()) { | 863 if (data) { |
| 871 return new SkMemoryStream(data.get()); | 864 return new SkMemoryStream(std::move(data)); |
| 872 } | 865 } |
| 873 | 866 |
| 874 // If we get here, then our attempt at using mmap failed, so try normal | 867 // If we get here, then our attempt at using mmap failed, so try normal |
| 875 // file access. | 868 // file access. |
| 876 SkFILEStream* stream = new SkFILEStream(path); | 869 SkFILEStream* stream = new SkFILEStream(path); |
| 877 if (!stream->isValid()) { | 870 if (!stream->isValid()) { |
| 878 delete stream; | 871 delete stream; |
| 879 stream = nullptr; | 872 stream = nullptr; |
| 880 } | 873 } |
| 881 return stream; | 874 return stream; |
| 882 } | 875 } |
| 883 | 876 |
| 884 // Declared in SkStreamPriv.h: | 877 // Declared in SkStreamPriv.h: |
| 885 SkData* SkCopyStreamToData(SkStream* stream) { | 878 sk_sp<SkData> SkCopyStreamToData(SkStream* stream) { |
| 886 SkASSERT(stream != nullptr); | 879 SkASSERT(stream != nullptr); |
| 887 | 880 |
| 888 if (stream->hasLength()) { | 881 if (stream->hasLength()) { |
| 889 return SkData::NewFromStream(stream, stream->getLength()); | 882 return SkData::MakeFromStream(stream, stream->getLength()); |
| 890 } | 883 } |
| 891 | 884 |
| 892 SkDynamicMemoryWStream tempStream; | 885 SkDynamicMemoryWStream tempStream; |
| 893 const size_t bufferSize = 4096; | 886 const size_t bufferSize = 4096; |
| 894 char buffer[bufferSize]; | 887 char buffer[bufferSize]; |
| 895 do { | 888 do { |
| 896 size_t bytesRead = stream->read(buffer, bufferSize); | 889 size_t bytesRead = stream->read(buffer, bufferSize); |
| 897 tempStream.write(buffer, bytesRead); | 890 tempStream.write(buffer, bytesRead); |
| 898 } while (!stream->isAtEnd()); | 891 } while (!stream->isAtEnd()); |
| 899 return tempStream.copyToData(); | 892 return sk_sp<SkData>(tempStream.copyToData()); |
| 900 } | 893 } |
| 901 | 894 |
| 902 bool SkStreamCopy(SkWStream* out, SkStream* input) { | 895 bool SkStreamCopy(SkWStream* out, SkStream* input) { |
| 903 const char* base = static_cast<const char*>(input->getMemoryBase()); | 896 const char* base = static_cast<const char*>(input->getMemoryBase()); |
| 904 if (base && input->hasPosition() && input->hasLength()) { | 897 if (base && input->hasPosition() && input->hasLength()) { |
| 905 // Shortcut that avoids the while loop. | 898 // Shortcut that avoids the while loop. |
| 906 size_t position = input->getPosition(); | 899 size_t position = input->getPosition(); |
| 907 size_t length = input->getLength(); | 900 size_t length = input->getLength(); |
| 908 SkASSERT(length >= position); | 901 SkASSERT(length >= position); |
| 909 return out->write(&base[position], length - position); | 902 return out->write(&base[position], length - position); |
| 910 } | 903 } |
| 911 char scratch[4096]; | 904 char scratch[4096]; |
| 912 size_t count; | 905 size_t count; |
| 913 while (true) { | 906 while (true) { |
| 914 count = input->read(scratch, sizeof(scratch)); | 907 count = input->read(scratch, sizeof(scratch)); |
| 915 if (0 == count) { | 908 if (0 == count) { |
| 916 return true; | 909 return true; |
| 917 } | 910 } |
| 918 if (!out->write(scratch, count)) { | 911 if (!out->write(scratch, count)) { |
| 919 return false; | 912 return false; |
| 920 } | 913 } |
| 921 } | 914 } |
| 922 } | 915 } |
| OLD | NEW |