| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
| 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 "SkBitmapHeap.h" | 10 #include "SkBitmapHeap.h" |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 } | 117 } |
| 118 | 118 |
| 119 void defFactory(const char* name) { | 119 void defFactory(const char* name) { |
| 120 SkFlattenable::Factory factory = SkFlattenable::NameToFactory(name); | 120 SkFlattenable::Factory factory = SkFlattenable::NameToFactory(name); |
| 121 if (factory) { | 121 if (factory) { |
| 122 SkASSERT(fFactoryArray.find(factory) < 0); | 122 SkASSERT(fFactoryArray.find(factory) < 0); |
| 123 *fFactoryArray.append() = factory; | 123 *fFactoryArray.append() = factory; |
| 124 } | 124 } |
| 125 } | 125 } |
| 126 | 126 |
| 127 /** |
| 128 * Add a bitmap to the array of bitmaps, or replace an existing one. |
| 129 * This is only used when in cross process mode without a shared heap. |
| 130 */ |
| 127 void addBitmap(int index) { | 131 void addBitmap(int index) { |
| 132 SkASSERT(shouldFlattenBitmaps(fFlags)); |
| 128 SkBitmap* bm; | 133 SkBitmap* bm; |
| 129 if(fBitmaps.count() == index) { | 134 if(fBitmaps.count() == index) { |
| 130 bm = SkNEW(SkBitmap); | 135 bm = SkNEW(SkBitmap); |
| 131 *fBitmaps.append() = bm; | 136 *fBitmaps.append() = bm; |
| 132 } else { | 137 } else { |
| 133 bm = fBitmaps[index]; | 138 bm = fBitmaps[index]; |
| 134 } | 139 } |
| 135 bm->unflatten(*fReader); | 140 fReader->readBitmap(bm); |
| 136 } | 141 } |
| 137 | 142 |
| 138 /** | 143 /** |
| 139 * Override of SkBitmapHeapReader, so that SkOrderedReadBuffer can use | 144 * Override of SkBitmapHeapReader, so that SkOrderedReadBuffer can use |
| 140 * these SkBitmaps for bitmap shaders. | 145 * these SkBitmaps for bitmap shaders. Used only in cross process mode |
| 146 * without a shared heap. |
| 141 */ | 147 */ |
| 142 virtual SkBitmap* getBitmap(int32_t index) const SK_OVERRIDE { | 148 virtual SkBitmap* getBitmap(int32_t index) const SK_OVERRIDE { |
| 149 SkASSERT(shouldFlattenBitmaps(fFlags)); |
| 143 return fBitmaps[index]; | 150 return fBitmaps[index]; |
| 144 } | 151 } |
| 145 | 152 |
| 146 /** | 153 /** |
| 147 * Needed to be a non-abstract subclass of SkBitmapHeapReader. | 154 * Needed to be a non-abstract subclass of SkBitmapHeapReader. |
| 148 */ | 155 */ |
| 149 virtual void releaseRef(int32_t) SK_OVERRIDE {} | 156 virtual void releaseRef(int32_t) SK_OVERRIDE {} |
| 150 | 157 |
| 151 void setSharedHeap(SkBitmapHeap* heap) { | 158 void setSharedHeap(SkBitmapHeap* heap) { |
| 152 SkASSERT(!shouldFlattenBitmaps(fFlags) || NULL == heap); | 159 SkASSERT(!shouldFlattenBitmaps(fFlags) || NULL == heap); |
| 153 SkRefCnt_SafeAssign(fSharedHeap, heap); | 160 SkRefCnt_SafeAssign(fSharedHeap, heap); |
| 154 this->updateReader(); | 161 this->updateReader(); |
| 155 } | 162 } |
| 156 | 163 |
| 164 /** |
| 165 * Access the shared heap. Only used in the case when bitmaps are not |
| 166 * flattened. |
| 167 */ |
| 157 SkBitmapHeap* getSharedHeap() const { | 168 SkBitmapHeap* getSharedHeap() const { |
| 169 SkASSERT(!shouldFlattenBitmaps(fFlags)); |
| 158 return fSharedHeap; | 170 return fSharedHeap; |
| 159 } | 171 } |
| 160 | 172 |
| 161 void addTypeface() { | 173 void addTypeface() { |
| 162 size_t size = fReader->read32(); | 174 size_t size = fReader->read32(); |
| 163 const void* data = fReader->skip(SkAlign4(size)); | 175 const void* data = fReader->skip(SkAlign4(size)); |
| 164 SkMemoryStream stream(data, size, false); | 176 SkMemoryStream stream(data, size, false); |
| 165 *fTypefaces.append() = SkTypeface::Deserialize(&stream); | 177 *fTypefaces.append() = SkTypeface::Deserialize(&stream); |
| 166 } | 178 } |
| 167 | 179 |
| (...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 765 SkSafeUnref(fSharedHeap); | 777 SkSafeUnref(fSharedHeap); |
| 766 } | 778 } |
| 767 | 779 |
| 768 /////////////////////////////////////////////////////////////////////////////// | 780 /////////////////////////////////////////////////////////////////////////////// |
| 769 | 781 |
| 770 #include "SkGPipe.h" | 782 #include "SkGPipe.h" |
| 771 | 783 |
| 772 SkGPipeReader::SkGPipeReader() { | 784 SkGPipeReader::SkGPipeReader() { |
| 773 fCanvas = NULL; | 785 fCanvas = NULL; |
| 774 fState = NULL; | 786 fState = NULL; |
| 787 fProc = NULL; |
| 775 } | 788 } |
| 776 | 789 |
| 777 SkGPipeReader::SkGPipeReader(SkCanvas* target) { | 790 SkGPipeReader::SkGPipeReader(SkCanvas* target) { |
| 778 fCanvas = NULL; | 791 fCanvas = NULL; |
| 779 this->setCanvas(target); | 792 this->setCanvas(target); |
| 780 fState = NULL; | 793 fState = NULL; |
| 794 fProc = NULL; |
| 781 } | 795 } |
| 782 | 796 |
| 783 void SkGPipeReader::setCanvas(SkCanvas *target) { | 797 void SkGPipeReader::setCanvas(SkCanvas *target) { |
| 784 SkRefCnt_SafeAssign(fCanvas, target); | 798 SkRefCnt_SafeAssign(fCanvas, target); |
| 785 } | 799 } |
| 786 | 800 |
| 787 SkGPipeReader::~SkGPipeReader() { | 801 SkGPipeReader::~SkGPipeReader() { |
| 788 SkSafeUnref(fCanvas); | 802 SkSafeUnref(fCanvas); |
| 789 delete fState; | 803 delete fState; |
| 790 } | 804 } |
| 791 | 805 |
| 792 SkGPipeReader::Status SkGPipeReader::playback(const void* data, size_t length, | 806 SkGPipeReader::Status SkGPipeReader::playback(const void* data, size_t length, |
| 793 uint32_t playbackFlags, size_t* by
tesRead) { | 807 uint32_t playbackFlags, size_t* by
tesRead) { |
| 794 if (NULL == fCanvas) { | 808 if (NULL == fCanvas) { |
| 795 return kError_Status; | 809 return kError_Status; |
| 796 } | 810 } |
| 797 | 811 |
| 798 if (NULL == fState) { | 812 if (NULL == fState) { |
| 799 fState = new SkGPipeState; | 813 fState = new SkGPipeState; |
| 800 } | 814 } |
| 801 | 815 |
| 802 fState->setSilent(playbackFlags & kSilent_PlaybackFlag); | 816 fState->setSilent(playbackFlags & kSilent_PlaybackFlag); |
| 803 | 817 |
| 804 SkASSERT(SK_ARRAY_COUNT(gReadTable) == (kDone_DrawOp + 1)); | 818 SkASSERT(SK_ARRAY_COUNT(gReadTable) == (kDone_DrawOp + 1)); |
| 805 | 819 |
| 806 const ReadProc* table = gReadTable; | 820 const ReadProc* table = gReadTable; |
| 807 SkOrderedReadBuffer reader(data, length); | 821 SkOrderedReadBuffer reader(data, length); |
| 822 reader.setBitmapDecoder(fProc); |
| 808 SkCanvas* canvas = fCanvas; | 823 SkCanvas* canvas = fCanvas; |
| 809 Status status = kEOF_Status; | 824 Status status = kEOF_Status; |
| 810 | 825 |
| 811 fState->setReader(&reader); | 826 fState->setReader(&reader); |
| 812 while (!reader.eof()) { | 827 while (!reader.eof()) { |
| 813 uint32_t op32 = reader.readUInt(); | 828 uint32_t op32 = reader.readUInt(); |
| 814 unsigned op = DrawOp_unpackOp(op32); | 829 unsigned op = DrawOp_unpackOp(op32); |
| 815 // SkDEBUGCODE(DrawOps drawOp = (DrawOps)op;) | 830 // SkDEBUGCODE(DrawOps drawOp = (DrawOps)op;) |
| 816 | 831 |
| 817 if (op >= SK_ARRAY_COUNT(gReadTable)) { | 832 if (op >= SK_ARRAY_COUNT(gReadTable)) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 833 status = kReadAtom_Status; | 848 status = kReadAtom_Status; |
| 834 break; | 849 break; |
| 835 } | 850 } |
| 836 } | 851 } |
| 837 | 852 |
| 838 if (bytesRead) { | 853 if (bytesRead) { |
| 839 *bytesRead = reader.offset(); | 854 *bytesRead = reader.offset(); |
| 840 } | 855 } |
| 841 return status; | 856 return status; |
| 842 } | 857 } |
| OLD | NEW |