Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(310)

Side by Side Diff: src/pipe/SkPipeReader.cpp

Issue 2347593004: test/fix/tweak writePicture/readPicture (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/pipe/SkPipeFormat.h ('k') | tests/PipeTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2016 Google Inc. 2 * Copyright 2016 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkCanvas.h" 8 #include "SkCanvas.h"
9 #include "SkDeduper.h" 9 #include "SkDeduper.h"
10 #include "SkPicture.h" 10 #include "SkPicture.h"
(...skipping 828 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 SkTypefaceDeserializer* fTFDeserializer = nullptr; 839 SkTypefaceDeserializer* fTFDeserializer = nullptr;
840 }; 840 };
841 841
842 SkPipeDeserializer::SkPipeDeserializer() : fImpl(new Impl) {} 842 SkPipeDeserializer::SkPipeDeserializer() : fImpl(new Impl) {}
843 SkPipeDeserializer::~SkPipeDeserializer() {} 843 SkPipeDeserializer::~SkPipeDeserializer() {}
844 844
845 void SkPipeDeserializer::setTypefaceDeserializer(SkTypefaceDeserializer* tfd) { 845 void SkPipeDeserializer::setTypefaceDeserializer(SkTypefaceDeserializer* tfd) {
846 fImpl->fTFDeserializer = tfd; 846 fImpl->fTFDeserializer = tfd;
847 } 847 }
848 848
849 #if 0
mtklein_C 2016/09/15 20:39:41 Time to kill?
reed1 2016/09/15 21:01:30 Done.
849 sk_sp<SkPicture> SkPipeDeserializer::readPicture(const void* data, size_t size) { 850 sk_sp<SkPicture> SkPipeDeserializer::readPicture(const void* data, size_t size) {
850 if (size < sizeof(uint32_t) + sizeof(SkRect)) { 851 if (size < sizeof(uint32_t) + sizeof(SkRect)) {
851 return nullptr; 852 return nullptr;
852 } 853 }
853 854
854 uint32_t header; 855 uint32_t header;
855 memcpy(&header, data, 4); size -= 4; data = (const char*)data + 4; 856 memcpy(&header, data, 4); size -= 4; data = (const char*)data + 4;
856 if (kDefinePicture_ExtPipeVerb != header) { 857 if (kDefinePicture_ExtPipeVerb != header) {
857 return nullptr; 858 return nullptr;
858 } 859 }
859 SkRect cull; 860 SkRect cull;
860 memcpy(&cull, data, sizeof(SkRect)); 861 memcpy(&cull, data, sizeof(SkRect));
861 size -= sizeof(SkRect); data = (const char*)data + sizeof(SkRect); 862 size -= sizeof(SkRect); data = (const char*)data + sizeof(SkRect);
862 863
863 SkPictureRecorder recorder; 864 SkPictureRecorder recorder;
864 this->playback(data, size, recorder.beginRecording(cull)); 865 this->playback(data, size, recorder.beginRecording(cull));
865 return recorder.finishRecordingAsPicture(); 866 return recorder.finishRecordingAsPicture();
866 } 867 }
868 #endif
867 869
868 sk_sp<SkImage> SkPipeDeserializer::readImage(const void* data, size_t size) { 870 sk_sp<SkImage> SkPipeDeserializer::readImage(const void* data, size_t size) {
869 if (size < sizeof(uint32_t)) { 871 if (size < sizeof(uint32_t)) {
870 SkDebugf("-------- data length too short for readImage %d\n", size); 872 SkDebugf("-------- data length too short for readImage %d\n", size);
871 return nullptr; 873 return nullptr;
872 } 874 }
873 875
874 const uint32_t* ptr = (const uint32_t*)data; 876 const uint32_t* ptr = (const uint32_t*)data;
875 uint32_t packedVerb = *ptr++; 877 uint32_t packedVerb = *ptr++;
876 size -= 4; 878 size -= 4;
(...skipping 11 matching lines...) Expand all
888 SkDebugf("-------- unexpected verb for readImage %d\n", unpack_verb(pack edVerb)); 890 SkDebugf("-------- unexpected verb for readImage %d\n", unpack_verb(pack edVerb));
889 return nullptr; 891 return nullptr;
890 } 892 }
891 int index = unpack_verb_extra(packedVerb); 893 int index = unpack_verb_extra(packedVerb);
892 if (0 == index) { 894 if (0 == index) {
893 return nullptr; // writer failed 895 return nullptr; // writer failed
894 } 896 }
895 return sk_ref_sp(fImpl->fImages.get(index - 1)); 897 return sk_ref_sp(fImpl->fImages.get(index - 1));
896 } 898 }
897 899
900 sk_sp<SkPicture> SkPipeDeserializer::readPicture(const void* data, size_t size) {
901 if (size < sizeof(uint32_t)) {
902 SkDebugf("-------- data length too short for readPicture %d\n", size);
903 return nullptr;
904 }
905
906 const uint32_t* ptr = (const uint32_t*)data;
907 uint32_t packedVerb = *ptr++;
908 size -= 4;
909
910 if (SkPipeVerb::kDefinePicture == unpack_verb(packedVerb)) {
911 SkPipeInflator inflator(&fImpl->fImages, &fImpl->fPictures,
912 &fImpl->fTypefaces, &fImpl->fFactories,
913 fImpl->fTFDeserializer);
914 SkPipeReader reader(this, ptr, size);
915 reader.setInflator(&inflator);
916 definePicture_handler(reader, packedVerb, nullptr);
917 packedVerb = reader.read32(); // read the next verb
918 }
919 if (SkPipeVerb::kWritePicture != unpack_verb(packedVerb)) {
920 SkDebugf("-------- unexpected verb for readPicture %d\n", unpack_verb(pa ckedVerb));
921 return nullptr;
922 }
923 int index = unpack_verb_extra(packedVerb);
924 if (0 == index) {
925 return nullptr; // writer failed
926 }
927 return sk_ref_sp(fImpl->fPictures.get(index - 1));
928 }
929
898 static bool do_playback(SkPipeReader& reader, SkCanvas* canvas, int* endPictureI ndex) { 930 static bool do_playback(SkPipeReader& reader, SkCanvas* canvas, int* endPictureI ndex) {
899 int indent = 0; 931 int indent = 0;
900 932
901 const bool showEachVerb = false; 933 const bool showEachVerb = false;
902 int counter = 0; 934 int counter = 0;
903 while (!reader.eof()) { 935 while (!reader.eof()) {
904 uint32_t prevOffset = reader.offset(); 936 uint32_t prevOffset = reader.offset();
905 uint32_t packedVerb = reader.read32(); 937 uint32_t packedVerb = reader.read32();
906 SkPipeVerb verb = unpack_verb(packedVerb); 938 SkPipeVerb verb = unpack_verb(packedVerb);
907 if ((unsigned)verb >= SK_ARRAY_COUNT(gPipeHandlers)) { 939 if ((unsigned)verb >= SK_ARRAY_COUNT(gPipeHandlers)) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 978
947 bool SkPipeDeserializer::playback(const void* data, size_t size, SkCanvas* canva s) { 979 bool SkPipeDeserializer::playback(const void* data, size_t size, SkCanvas* canva s) {
948 SkPipeInflator inflator(&fImpl->fImages, &fImpl->fPictures, 980 SkPipeInflator inflator(&fImpl->fImages, &fImpl->fPictures,
949 &fImpl->fTypefaces, &fImpl->fFactories, 981 &fImpl->fTypefaces, &fImpl->fFactories,
950 fImpl->fTFDeserializer); 982 fImpl->fTFDeserializer);
951 SkPipeReader reader(this, data, size); 983 SkPipeReader reader(this, data, size);
952 reader.setInflator(&inflator); 984 reader.setInflator(&inflator);
953 return do_playback(reader, canvas); 985 return do_playback(reader, canvas);
954 } 986 }
955 987
OLDNEW
« no previous file with comments | « src/pipe/SkPipeFormat.h ('k') | tests/PipeTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698