Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |