| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 #ifndef SkPictureRecord_DEFINED | 8 #ifndef SkPictureRecord_DEFINED |
| 9 #define SkPictureRecord_DEFINED | 9 #define SkPictureRecord_DEFINED |
| 10 | 10 |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 | 93 |
| 94 void beginRecording(); | 94 void beginRecording(); |
| 95 void endRecording(); | 95 void endRecording(); |
| 96 | 96 |
| 97 void internalOnly_EnableOpts(bool optsEnabled) { | 97 void internalOnly_EnableOpts(bool optsEnabled) { |
| 98 fOptsEnabled = optsEnabled; | 98 fOptsEnabled = optsEnabled; |
| 99 } | 99 } |
| 100 | 100 |
| 101 private: | 101 private: |
| 102 void handleOptimization(int opt); | 102 void handleOptimization(int opt); |
| 103 int recordRestoreOffsetPlaceholder(SkRegion::Op); | 103 size_t recordRestoreOffsetPlaceholder(SkRegion::Op); |
| 104 void fillRestoreOffsetPlaceholdersForCurrentStackLevel(uint32_t restoreOffse
t); | 104 void fillRestoreOffsetPlaceholdersForCurrentStackLevel(uint32_t restoreOffse
t); |
| 105 | 105 |
| 106 #ifndef SK_COLLAPSE_MATRIX_CLIP_STATE | 106 #ifndef SK_COLLAPSE_MATRIX_CLIP_STATE |
| 107 SkTDArray<int32_t> fRestoreOffsetStack; | 107 SkTDArray<int32_t> fRestoreOffsetStack; |
| 108 int fFirstSavedLayerIndex; | 108 int fFirstSavedLayerIndex; |
| 109 enum { | 109 enum { |
| 110 kNoSavedLayerIndex = -1 | 110 kNoSavedLayerIndex = -1 |
| 111 }; | 111 }; |
| 112 #endif | 112 #endif |
| 113 | 113 |
| 114 SkTDArray<uint32_t> fCullOffsetStack; | 114 SkTDArray<uint32_t> fCullOffsetStack; |
| 115 | 115 |
| 116 /* | 116 /* |
| 117 * Write the 'drawType' operation and chunk size to the skp. 'size' | 117 * Write the 'drawType' operation and chunk size to the skp. 'size' |
| 118 * can potentially be increased if the chunk size needs its own storage | 118 * can potentially be increased if the chunk size needs its own storage |
| 119 * location (i.e., it overflows 24 bits). | 119 * location (i.e., it overflows 24 bits). |
| 120 * Returns the start offset of the chunk. This is the location at which | 120 * Returns the start offset of the chunk. This is the location at which |
| 121 * the opcode & size are stored. | 121 * the opcode & size are stored. |
| 122 * TODO: since we are handing the size into here we could call reserve | 122 * 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 | 123 * and then return a pointer to the memory storage. This could decrease |
| 124 * allocation overhead but could lead to more wasted space (the tail | 124 * allocation overhead but could lead to more wasted space (the tail |
| 125 * end of blocks could go unused). Possibly add a second addDraw that | 125 * end of blocks could go unused). Possibly add a second addDraw that |
| 126 * operates in this manner. | 126 * operates in this manner. |
| 127 */ | 127 */ |
| 128 size_t addDraw(DrawType drawType, uint32_t* size) { | 128 size_t addDraw(DrawType drawType, size_t* size) { |
| 129 size_t offset = fWriter.bytesWritten(); | 129 size_t offset = fWriter.bytesWritten(); |
| 130 | 130 |
| 131 this->predrawNotify(); | 131 this->predrawNotify(); |
| 132 | 132 |
| 133 #ifdef SK_DEBUG_TRACE | 133 #ifdef SK_DEBUG_TRACE |
| 134 SkDebugf("add %s\n", DrawTypeToString(drawType)); | 134 SkDebugf("add %s\n", DrawTypeToString(drawType)); |
| 135 #endif | 135 #endif |
| 136 | 136 |
| 137 SkASSERT(0 != *size); | 137 SkASSERT(0 != *size); |
| 138 SkASSERT(((uint8_t) drawType) == drawType); | 138 SkASSERT(((uint8_t) drawType) == drawType); |
| 139 | 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(SkToU32(*size)); |
| 144 } else { | 144 } else { |
| 145 fWriter.writeInt(PACK_8_24(drawType, *size)); | 145 fWriter.writeInt(PACK_8_24(drawType, SkToU32(*size))); |
| 146 } | 146 } |
| 147 | 147 |
| 148 return offset; | 148 return offset; |
| 149 } | 149 } |
| 150 | 150 |
| 151 void addInt(int value) { | 151 void addInt(int value) { |
| 152 fWriter.writeInt(value); | 152 fWriter.writeInt(value); |
| 153 } | 153 } |
| 154 void addScalar(SkScalar scalar) { | 154 void addScalar(SkScalar scalar) { |
| 155 fWriter.writeScalar(scalar); | 155 fWriter.writeScalar(scalar); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 public: | 199 public: |
| 200 void validate(size_t initialOffset, uint32_t size) const; | 200 void validate(size_t initialOffset, uint32_t size) const; |
| 201 private: | 201 private: |
| 202 void validateBitmaps() const; | 202 void validateBitmaps() const; |
| 203 void validateMatrices() const; | 203 void validateMatrices() const; |
| 204 void validatePaints() const; | 204 void validatePaints() const; |
| 205 void validatePaths() const; | 205 void validatePaths() const; |
| 206 void validateRegions() const; | 206 void validateRegions() const; |
| 207 #else | 207 #else |
| 208 public: | 208 public: |
| 209 void validate(size_t initialOffset, uint32_t size) const { | 209 void validate(size_t initialOffset, size_t size) const { |
| 210 SkASSERT(fWriter.bytesWritten() == initialOffset + size); | 210 SkASSERT(fWriter.bytesWritten() == initialOffset + size); |
| 211 } | 211 } |
| 212 #endif | 212 #endif |
| 213 | 213 |
| 214 protected: | 214 protected: |
| 215 virtual SkSurface* onNewSurface(const SkImageInfo&) SK_OVERRIDE; | 215 virtual SkSurface* onNewSurface(const SkImageInfo&) SK_OVERRIDE; |
| 216 const void* onPeekPixels(SkImageInfo*, size_t*) SK_OVERRIDE { | 216 const void* onPeekPixels(SkImageInfo*, size_t*) SK_OVERRIDE { |
| 217 return NULL; | 217 return NULL; |
| 218 } | 218 } |
| 219 | 219 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 const SkPaint& paint, const SkFlatData* flatPaintData)
; | 255 const SkPaint& paint, const SkFlatData* flatPaintData)
; |
| 256 | 256 |
| 257 int addPathToHeap(const SkPath& path); // does not write to ops stream | 257 int addPathToHeap(const SkPath& path); // does not write to ops stream |
| 258 | 258 |
| 259 // These entry points allow the writing of matrices, clips, saves & | 259 // These entry points allow the writing of matrices, clips, saves & |
| 260 // restores to be deferred (e.g., if the MC state is being collapsed and | 260 // restores to be deferred (e.g., if the MC state is being collapsed and |
| 261 // only written out as needed). | 261 // only written out as needed). |
| 262 void recordConcat(const SkMatrix& matrix); | 262 void recordConcat(const SkMatrix& matrix); |
| 263 void recordTranslate(const SkMatrix& matrix); | 263 void recordTranslate(const SkMatrix& matrix); |
| 264 void recordScale(const SkMatrix& matrix); | 264 void recordScale(const SkMatrix& matrix); |
| 265 int recordClipRect(const SkRect& rect, SkRegion::Op op, bool doAA); | 265 size_t recordClipRect(const SkRect& rect, SkRegion::Op op, bool doAA); |
| 266 int recordClipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAA); | 266 size_t recordClipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAA); |
| 267 int recordClipPath(int pathID, SkRegion::Op op, bool doAA); | 267 size_t recordClipPath(int pathID, SkRegion::Op op, bool doAA); |
| 268 int recordClipRegion(const SkRegion& region, SkRegion::Op op); | 268 size_t recordClipRegion(const SkRegion& region, SkRegion::Op op); |
| 269 void recordSave(SaveFlags flags); | 269 void recordSave(SaveFlags flags); |
| 270 void recordSaveLayer(const SkRect* bounds, const SkPaint* paint, SaveFlags f
lags); | 270 void recordSaveLayer(const SkRect* bounds, const SkPaint* paint, SaveFlags f
lags); |
| 271 void recordRestore(bool fillInSkips = true); | 271 void recordRestore(bool fillInSkips = true); |
| 272 | 272 |
| 273 // These are set to NULL in our constructor, but may be changed by | 273 // These are set to NULL in our constructor, but may be changed by |
| 274 // subclasses, in which case they will be SkSafeUnref'd in our destructor. | 274 // subclasses, in which case they will be SkSafeUnref'd in our destructor. |
| 275 SkBBoxHierarchy* fBoundingHierarchy; | 275 SkBBoxHierarchy* fBoundingHierarchy; |
| 276 SkPictureStateTree* fStateTree; | 276 SkPictureStateTree* fStateTree; |
| 277 | 277 |
| 278 // Allocated in the constructor and managed by this class. | 278 // Allocated in the constructor and managed by this class. |
| (...skipping 21 matching lines...) Expand all Loading... |
| 300 friend class SkPictureTester; // for unit testing | 300 friend class SkPictureTester; // for unit testing |
| 301 | 301 |
| 302 #ifdef SK_COLLAPSE_MATRIX_CLIP_STATE | 302 #ifdef SK_COLLAPSE_MATRIX_CLIP_STATE |
| 303 SkMatrixClipStateMgr fMCMgr; | 303 SkMatrixClipStateMgr fMCMgr; |
| 304 #endif | 304 #endif |
| 305 | 305 |
| 306 typedef SkCanvas INHERITED; | 306 typedef SkCanvas INHERITED; |
| 307 }; | 307 }; |
| 308 | 308 |
| 309 #endif | 309 #endif |
| OLD | NEW |