| 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 #ifndef SkPictureRecord_DEFINED | 8 #ifndef SkPictureRecord_DEFINED |
| 9 #define SkPictureRecord_DEFINED | 9 #define SkPictureRecord_DEFINED |
| 10 | 10 |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 fRecordFlags = recordFlags; | 95 fRecordFlags = recordFlags; |
| 96 } | 96 } |
| 97 | 97 |
| 98 const SkWriter32& writeStream() const { | 98 const SkWriter32& writeStream() const { |
| 99 return fWriter; | 99 return fWriter; |
| 100 } | 100 } |
| 101 | 101 |
| 102 void beginRecording(); | 102 void beginRecording(); |
| 103 void endRecording(); | 103 void endRecording(); |
| 104 | 104 |
| 105 static bool canRecordBounds(DrawType op); |
| 105 private: | 106 private: |
| 106 void recordRestoreOffsetPlaceholder(SkRegion::Op); | 107 void recordRestoreOffsetPlaceholder(SkRegion::Op); |
| 107 void fillRestoreOffsetPlaceholdersForCurrentStackLevel( | 108 void fillRestoreOffsetPlaceholdersForCurrentStackLevel( |
| 108 uint32_t restoreOffset); | 109 uint32_t restoreOffset); |
| 109 | 110 |
| 110 SkTDArray<int32_t> fRestoreOffsetStack; | 111 SkTDArray<int32_t> fRestoreOffsetStack; |
| 111 int fFirstSavedLayerIndex; | 112 int fFirstSavedLayerIndex; |
| 112 enum { | 113 enum { |
| 113 kNoSavedLayerIndex = -1 | 114 kNoSavedLayerIndex = -1, |
| 114 }; | 115 }; |
| 116 static const uint32_t kInvalidOffset = ~0; |
| 115 | 117 |
| 116 /* | 118 /* |
| 117 * Write the 'drawType' operation and chunk size to the skp. 'size' | 119 * Write the 'drawType' operation and chunk size to the skp. 'size' |
| 118 * can potentially be increased if the chunk size needs its own storage | 120 * can potentially be increased if the chunk size needs its own storage |
| 119 * location (i.e., it overflows 24 bits). | 121 * location (i.e., it overflows 24 bits). |
| 120 * Returns the start offset of the chunk. This is the location at which | 122 * Returns the start offset of the chunk. This is the location at which |
| 121 * the opcode & size are stored. | 123 * the opcode & size are stored. |
| 122 * TODO: since we are handing the size into here we could call reserve | 124 * TODO: since we are handing the size into here we could call reserve |
| 123 * and then return a pointer to the memory storage. This could decrease | 125 * and then return a pointer to the memory storage. This could decrease |
| 124 * allocation overhead but could lead to more wasted space (the tail | 126 * allocation overhead but could lead to more wasted space (the tail |
| 125 * end of blocks could go unused). Possibly add a second addDraw that | 127 * end of blocks could go unused). Possibly add a second addDraw that |
| 126 * operates in this manner. | 128 * operates in this manner. |
| 127 */ | 129 */ |
| 128 uint32_t addDraw(DrawType drawType, uint32_t* size) { | 130 uint32_t addDraw(DrawType drawType, uint32_t* size) { |
| 129 uint32_t offset = fWriter.size(); | 131 uint32_t offset = fWriter.size(); |
| 130 | 132 |
| 131 this->predrawNotify(); | 133 this->predrawNotify(); |
| 132 | 134 |
| 133 #ifdef SK_DEBUG_TRACE | 135 #ifdef SK_DEBUG_TRACE |
| 134 SkDebugf("add %s\n", DrawTypeToString(drawType)); | 136 SkDebugf("add %s\n", DrawTypeToString(drawType)); |
| 135 #endif | 137 #endif |
| 136 | |
| 137 SkASSERT(0 != *size); | 138 SkASSERT(0 != *size); |
| 138 SkASSERT(((uint8_t) drawType) == drawType); | 139 SkASSERT(((uint8_t) drawType) == drawType); |
| 139 | |
| 140 if (0 != (*size & ~MASK_24) || *size == MASK_24) { | 140 if (0 != (*size & ~MASK_24) || *size == MASK_24) { |
| 141 fWriter.writeInt(PACK_8_24(drawType, MASK_24)); | 141 fWriter.writeInt(PACK_8_24(drawType, MASK_24)); |
| 142 *size += 1; | 142 *size += 1; |
| 143 fWriter.writeInt(*size); | 143 fWriter.writeInt(*size); |
| 144 } else { | 144 } else { |
| 145 fWriter.writeInt(PACK_8_24(drawType, *size)); | 145 fWriter.writeInt(PACK_8_24(drawType, *size)); |
| 146 } | 146 } |
| 147 | 147 fLastDrawRejected = false; |
| 148 return offset; | 148 return offset; |
| 149 } | 149 } |
| 150 | 150 |
| 151 uint32_t addDrawWithBounds(DrawType drawType, uint32_t* size, const SkPaint*
paint, |
| 152 const SkRect* localBounds); |
| 153 bool recordBounds() const { return fRecordFlags & SkPicture::kRecordBounds_R
ecordingFlag; } |
| 154 |
| 151 void addInt(int value) { | 155 void addInt(int value) { |
| 152 fWriter.writeInt(value); | 156 fWriter.writeInt(value); |
| 153 } | 157 } |
| 154 void addScalar(SkScalar scalar) { | 158 void addScalar(SkScalar scalar) { |
| 155 fWriter.writeScalar(scalar); | 159 fWriter.writeScalar(scalar); |
| 156 } | 160 } |
| 157 | 161 |
| 158 void addBitmap(const SkBitmap& bitmap); | 162 void addBitmap(const SkBitmap& bitmap); |
| 159 void addMatrix(const SkMatrix& matrix); | 163 void addMatrix(const SkMatrix& matrix); |
| 160 void addMatrixPtr(const SkMatrix* matrix); | 164 void addMatrixPtr(const SkMatrix* matrix); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 | 216 |
| 213 protected: | 217 protected: |
| 214 | 218 |
| 215 // These are set to NULL in our constructor, but may be changed by | 219 // These are set to NULL in our constructor, but may be changed by |
| 216 // subclasses, in which case they will be SkSafeUnref'd in our destructor. | 220 // subclasses, in which case they will be SkSafeUnref'd in our destructor. |
| 217 SkBBoxHierarchy* fBoundingHierarchy; | 221 SkBBoxHierarchy* fBoundingHierarchy; |
| 218 SkPictureStateTree* fStateTree; | 222 SkPictureStateTree* fStateTree; |
| 219 | 223 |
| 220 // Allocated in the constructor and managed by this class. | 224 // Allocated in the constructor and managed by this class. |
| 221 SkBitmapHeap* fBitmapHeap; | 225 SkBitmapHeap* fBitmapHeap; |
| 226 bool fLastDrawRejected; |
| 222 | 227 |
| 223 private: | 228 private: |
| 224 SkChunkFlatController fFlattenableHeap; | 229 SkChunkFlatController fFlattenableHeap; |
| 225 | 230 |
| 226 SkMatrixDictionary fMatrices; | 231 SkMatrixDictionary fMatrices; |
| 227 SkPaintDictionary fPaints; | 232 SkPaintDictionary fPaints; |
| 228 SkRegionDictionary fRegions; | 233 SkRegionDictionary fRegions; |
| 229 | 234 |
| 230 SkPathHeap* fPathHeap; // reference counted | 235 SkPathHeap* fPathHeap; // reference counted |
| 231 SkWriter32 fWriter; | 236 SkWriter32 fWriter; |
| 232 | 237 |
| 233 // we ref each item in these arrays | 238 // we ref each item in these arrays |
| 234 SkTDArray<SkPicture*> fPictureRefs; | 239 SkTDArray<SkPicture*> fPictureRefs; |
| 235 | 240 |
| 236 uint32_t fRecordFlags; | 241 uint32_t fRecordFlags; |
| 237 int fInitialSaveCount; | 242 int fInitialSaveCount; |
| 238 | 243 |
| 239 friend class SkPicturePlayback; | 244 friend class SkPicturePlayback; |
| 240 friend class SkPictureTester; // for unit testing | 245 friend class SkPictureTester; // for unit testing |
| 241 | 246 |
| 242 typedef SkCanvas INHERITED; | 247 typedef SkCanvas INHERITED; |
| 243 }; | 248 }; |
| 244 | 249 |
| 245 #endif | 250 #endif |
| OLD | NEW |