| Index: src/core/SkPictureRecord.cpp
|
| diff --git a/src/core/SkPictureRecord.cpp b/src/core/SkPictureRecord.cpp
|
| index f9ab0c93c16db6d7356b348b35123a165ad12d50..36b8d379f536b637feea9d825ad5ddfd0a08c28d 100644
|
| --- a/src/core/SkPictureRecord.cpp
|
| +++ b/src/core/SkPictureRecord.cpp
|
| @@ -83,7 +83,7 @@ static inline size_t get_paint_offset(DrawType op, size_t opSize) {
|
| 0, // RESTORE - no paint
|
| 0, // ROTATE - no paint
|
| 0, // SAVE - no paint
|
| - 0, // SAVE_LAYER - see below - this paint's location varies
|
| + 0, // SAVE_LAYER_SAVEFLAGS_DEPRECATED - see below - this paint's location varies
|
| 0, // SCALE - no paint
|
| 0, // SET_MATRIX - no paint
|
| 0, // SKEW - no paint
|
| @@ -103,6 +103,7 @@ static inline size_t get_paint_offset(DrawType op, size_t opSize) {
|
| 1, // DRAW_ATLAS - right after op code
|
| 1, // DRAW_IMAGE_NINE - right after op code
|
| 1, // DRAW_IMAGE_RECT - right after op code
|
| + 0, // SAVE_LAYER_SAVELAYERFLAGS - see below - this paint's location varies
|
| };
|
|
|
| static_assert(sizeof(gPaintOffsets) == LAST_DRAWTYPE_ENUM + 1, "need_to_be_in_sync");
|
| @@ -115,7 +116,8 @@ static inline size_t get_paint_offset(DrawType op, size_t opSize) {
|
| overflow = sizeof(uint32_t);
|
| }
|
|
|
| - if (SAVE_LAYER == op) {
|
| + SkASSERT(SAVE_LAYER_SAVEFLAGS_DEPRECATED != op);
|
| + if (SAVE_LAYER_SAVELAYERFLAGS == op) {
|
| static const uint32_t kSaveLayerNoBoundsPaintOffset = 2 * kUInt32Size;
|
| static const uint32_t kSaveLayerWithBoundsPaintOffset = 2 * kUInt32Size + sizeof(SkRect);
|
|
|
| @@ -151,14 +153,13 @@ void SkPictureRecord::recordSave() {
|
| this->validate(initialOffset, size);
|
| }
|
|
|
| -SkCanvas::SaveLayerStrategy SkPictureRecord::willSaveLayer(const SkRect* bounds,
|
| - const SkPaint* paint, SaveFlags flags) {
|
| +SkCanvas::SaveLayerStrategy SkPictureRecord::getSaveLayerStrategy(const SaveLayerRec& rec) {
|
| // record the offset to us, making it non-positive to distinguish a save
|
| // from a clip entry.
|
| fRestoreOffsetStack.push(-(int32_t)fWriter.bytesWritten());
|
| - this->recordSaveLayer(bounds, paint, flags);
|
| + this->recordSaveLayer(rec);
|
|
|
| - this->INHERITED::willSaveLayer(bounds, paint, flags);
|
| + (void)this->INHERITED::getSaveLayerStrategy(rec);
|
| /* No need for a (potentially very big) layer which we don't actually need
|
| at this time (and may not be able to afford since during record our
|
| clip starts out the size of the picture, which is often much larger
|
| @@ -167,25 +168,24 @@ SkCanvas::SaveLayerStrategy SkPictureRecord::willSaveLayer(const SkRect* bounds,
|
| return kNoLayer_SaveLayerStrategy;
|
| }
|
|
|
| -void SkPictureRecord::recordSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
| - SaveFlags flags) {
|
| +void SkPictureRecord::recordSaveLayer(const SaveLayerRec& rec) {
|
| fContentInfo.onSaveLayer();
|
|
|
| // op + bool for 'bounds'
|
| size_t size = 2 * kUInt32Size;
|
| - if (bounds) {
|
| - size += sizeof(*bounds); // + rect
|
| + if (rec.fBounds) {
|
| + size += sizeof(*rec.fBounds); // + rect
|
| }
|
| // + paint index + flags
|
| size += 2 * kUInt32Size;
|
|
|
| SkASSERT(kSaveLayerNoBoundsSize == size || kSaveLayerWithBoundsSize == size);
|
|
|
| - size_t initialOffset = this->addDraw(SAVE_LAYER, &size);
|
| - this->addRectPtr(bounds);
|
| - SkASSERT(initialOffset+get_paint_offset(SAVE_LAYER, size) == fWriter.bytesWritten());
|
| - this->addPaintPtr(paint);
|
| - this->addInt(flags);
|
| + size_t initialOffset = this->addDraw(SAVE_LAYER_SAVELAYERFLAGS, &size);
|
| + this->addRectPtr(rec.fBounds);
|
| + SkASSERT(initialOffset+get_paint_offset(SAVE_LAYER_SAVELAYERFLAGS, size) == fWriter.bytesWritten());
|
| + this->addPaintPtr(rec.fPaint);
|
| + this->addInt(rec.fSaveLayerFlags);
|
|
|
| this->validate(initialOffset, size);
|
| }
|
| @@ -321,7 +321,8 @@ void SkPictureRecord::fillRestoreOffsetPlaceholdersForCurrentStackLevel(uint32_t
|
| // assert that the final offset value points to a save verb
|
| uint32_t opSize;
|
| DrawType drawOp = peek_op_and_size(&fWriter, -offset, &opSize);
|
| - SkASSERT(SAVE == drawOp || SAVE_LAYER == drawOp);
|
| + SkASSERT(SAVE_LAYER_SAVEFLAGS_DEPRECATED != drawOp);
|
| + SkASSERT(SAVE == drawOp || SAVE_LAYER_SAVELAYERFLAGS == drawOp);
|
| }
|
| #endif
|
| }
|
|
|