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