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

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

Issue 2347593004: test/fix/tweak writePicture/readPicture (Closed)
Patch Set: remove dead code 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 sk_sp<SkPicture> SkPipeDeserializer::readPicture(const void* data, size_t size) {
850 if (size < sizeof(uint32_t) + sizeof(SkRect)) {
851 return nullptr;
852 }
853
854 uint32_t header;
855 memcpy(&header, data, 4); size -= 4; data = (const char*)data + 4;
856 if (kDefinePicture_ExtPipeVerb != header) {
857 return nullptr;
858 }
859 SkRect cull;
860 memcpy(&cull, data, sizeof(SkRect));
861 size -= sizeof(SkRect); data = (const char*)data + sizeof(SkRect);
862
863 SkPictureRecorder recorder;
864 this->playback(data, size, recorder.beginRecording(cull));
865 return recorder.finishRecordingAsPicture();
866 }
867
868 sk_sp<SkImage> SkPipeDeserializer::readImage(const void* data, size_t size) { 849 sk_sp<SkImage> SkPipeDeserializer::readImage(const void* data, size_t size) {
869 if (size < sizeof(uint32_t)) { 850 if (size < sizeof(uint32_t)) {
870 SkDebugf("-------- data length too short for readImage %d\n", size); 851 SkDebugf("-------- data length too short for readImage %d\n", size);
871 return nullptr; 852 return nullptr;
872 } 853 }
873 854
874 const uint32_t* ptr = (const uint32_t*)data; 855 const uint32_t* ptr = (const uint32_t*)data;
875 uint32_t packedVerb = *ptr++; 856 uint32_t packedVerb = *ptr++;
876 size -= 4; 857 size -= 4;
877 858
(...skipping 10 matching lines...) Expand all
888 SkDebugf("-------- unexpected verb for readImage %d\n", unpack_verb(pack edVerb)); 869 SkDebugf("-------- unexpected verb for readImage %d\n", unpack_verb(pack edVerb));
889 return nullptr; 870 return nullptr;
890 } 871 }
891 int index = unpack_verb_extra(packedVerb); 872 int index = unpack_verb_extra(packedVerb);
892 if (0 == index) { 873 if (0 == index) {
893 return nullptr; // writer failed 874 return nullptr; // writer failed
894 } 875 }
895 return sk_ref_sp(fImpl->fImages.get(index - 1)); 876 return sk_ref_sp(fImpl->fImages.get(index - 1));
896 } 877 }
897 878
879 sk_sp<SkPicture> SkPipeDeserializer::readPicture(const void* data, size_t size) {
880 if (size < sizeof(uint32_t)) {
881 SkDebugf("-------- data length too short for readPicture %d\n", size);
882 return nullptr;
883 }
884
885 const uint32_t* ptr = (const uint32_t*)data;
886 uint32_t packedVerb = *ptr++;
887 size -= 4;
888
889 if (SkPipeVerb::kDefinePicture == unpack_verb(packedVerb)) {
890 SkPipeInflator inflator(&fImpl->fImages, &fImpl->fPictures,
891 &fImpl->fTypefaces, &fImpl->fFactories,
892 fImpl->fTFDeserializer);
893 SkPipeReader reader(this, ptr, size);
894 reader.setInflator(&inflator);
895 definePicture_handler(reader, packedVerb, nullptr);
896 packedVerb = reader.read32(); // read the next verb
897 }
898 if (SkPipeVerb::kWritePicture != unpack_verb(packedVerb)) {
899 SkDebugf("-------- unexpected verb for readPicture %d\n", unpack_verb(pa ckedVerb));
900 return nullptr;
901 }
902 int index = unpack_verb_extra(packedVerb);
903 if (0 == index) {
904 return nullptr; // writer failed
905 }
906 return sk_ref_sp(fImpl->fPictures.get(index - 1));
907 }
908
898 static bool do_playback(SkPipeReader& reader, SkCanvas* canvas, int* endPictureI ndex) { 909 static bool do_playback(SkPipeReader& reader, SkCanvas* canvas, int* endPictureI ndex) {
899 int indent = 0; 910 int indent = 0;
900 911
901 const bool showEachVerb = false; 912 const bool showEachVerb = false;
902 int counter = 0; 913 int counter = 0;
903 while (!reader.eof()) { 914 while (!reader.eof()) {
904 uint32_t prevOffset = reader.offset(); 915 uint32_t prevOffset = reader.offset();
905 uint32_t packedVerb = reader.read32(); 916 uint32_t packedVerb = reader.read32();
906 SkPipeVerb verb = unpack_verb(packedVerb); 917 SkPipeVerb verb = unpack_verb(packedVerb);
907 if ((unsigned)verb >= SK_ARRAY_COUNT(gPipeHandlers)) { 918 if ((unsigned)verb >= SK_ARRAY_COUNT(gPipeHandlers)) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 957
947 bool SkPipeDeserializer::playback(const void* data, size_t size, SkCanvas* canva s) { 958 bool SkPipeDeserializer::playback(const void* data, size_t size, SkCanvas* canva s) {
948 SkPipeInflator inflator(&fImpl->fImages, &fImpl->fPictures, 959 SkPipeInflator inflator(&fImpl->fImages, &fImpl->fPictures,
949 &fImpl->fTypefaces, &fImpl->fFactories, 960 &fImpl->fTypefaces, &fImpl->fFactories,
950 fImpl->fTFDeserializer); 961 fImpl->fTFDeserializer);
951 SkPipeReader reader(this, data, size); 962 SkPipeReader reader(this, data, size);
952 reader.setInflator(&inflator); 963 reader.setInflator(&inflator);
953 return do_playback(reader, canvas); 964 return do_playback(reader, canvas);
954 } 965 }
955 966
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