| Index: src/core/SkPictureRecord.cpp
|
| ===================================================================
|
| --- src/core/SkPictureRecord.cpp (revision 13386)
|
| +++ src/core/SkPictureRecord.cpp (working copy)
|
| @@ -43,9 +43,15 @@
|
| fBitmapHeap = SkNEW(SkBitmapHeap);
|
| fFlattenableHeap.setBitmapStorage(fBitmapHeap);
|
| fPathHeap = NULL; // lazy allocate
|
| +#ifndef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| fFirstSavedLayerIndex = kNoSavedLayerIndex;
|
| +#endif
|
|
|
| fInitialSaveCount = kNoInitialSave;
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.init(this);
|
| +#endif
|
| }
|
|
|
| SkPictureRecord::~SkPictureRecord() {
|
| @@ -139,10 +145,15 @@
|
| }
|
|
|
| int SkPictureRecord::save(SaveFlags flags) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.save(flags);
|
| +#else
|
| // record the offset to us, making it non-positive to distinguish a save
|
| // from a clip entry.
|
| fRestoreOffsetStack.push(-(int32_t)fWriter.bytesWritten());
|
| this->recordSave(flags);
|
| +#endif
|
| return this->INHERITED::save(flags);
|
| }
|
|
|
| @@ -157,6 +168,11 @@
|
|
|
| int SkPictureRecord::saveLayer(const SkRect* bounds, const SkPaint* paint,
|
| SaveFlags flags) {
|
| +
|
| + int count;
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + count = fMCMgr.saveLayer(bounds, paint, flags);
|
| +#else
|
| // record the offset to us, making it non-positive to distinguish a save
|
| // from a clip entry.
|
| fRestoreOffsetStack.push(-(int32_t)fWriter.bytesWritten());
|
| @@ -164,6 +180,7 @@
|
| if (kNoSavedLayerIndex == fFirstSavedLayerIndex) {
|
| fFirstSavedLayerIndex = fRestoreOffsetStack.count();
|
| }
|
| +#endif
|
|
|
| /* Don't actually call INHERITED::saveLayer, because that will try to allocate
|
| an offscreen device (potentially very big) which we don't actually need
|
| @@ -171,13 +188,13 @@
|
| clip starts out the size of the picture, which is often much larger
|
| than the size of the actual device we'll use during playback).
|
| */
|
| - int count = this->INHERITED::save(flags);
|
| + count = this->INHERITED::save(flags);
|
| this->clipRectBounds(bounds, flags, NULL);
|
| return count;
|
| }
|
|
|
| void SkPictureRecord::recordSaveLayer(const SkRect* bounds, const SkPaint* paint,
|
| - SaveFlags flags) {
|
| + SaveFlags flags) {
|
| // op + bool for 'bounds'
|
| uint32_t size = 2 * kUInt32Size;
|
| if (NULL != bounds) {
|
| @@ -198,7 +215,11 @@
|
| }
|
|
|
| bool SkPictureRecord::isDrawingToLayer() const {
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + return fMCMgr.isDrawingToLayer();
|
| +#else
|
| return fFirstSavedLayerIndex != kNoSavedLayerIndex;
|
| +#endif
|
| }
|
|
|
| /*
|
| @@ -577,6 +598,14 @@
|
| SkASSERT(fRestoreOffsetStack.count() > 1);
|
| #endif
|
|
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + if (fMCMgr.getSaveCount() == 1) {
|
| + return;
|
| + }
|
| +
|
| + // TODO: don't write the restore to the op stream for normal saves
|
| + fMCMgr.restore();
|
| +#else
|
| // check for underflow
|
| if (fRestoreOffsetStack.count() == 0) {
|
| return;
|
| @@ -609,59 +638,86 @@
|
| }
|
|
|
| fRestoreOffsetStack.pop();
|
| +#endif
|
|
|
| return this->INHERITED::restore();
|
| }
|
|
|
| -void SkPictureRecord::recordRestore() {
|
| +void SkPictureRecord::recordRestore(bool fillInSkips) {
|
| uint32_t initialOffset, size;
|
| - this->fillRestoreOffsetPlaceholdersForCurrentStackLevel((uint32_t)fWriter.bytesWritten());
|
| + if (fillInSkips) {
|
| + this->fillRestoreOffsetPlaceholdersForCurrentStackLevel((uint32_t)fWriter.bytesWritten());
|
| + }
|
| size = 1 * kUInt32Size; // RESTORE consists solely of 1 op code
|
| initialOffset = this->addDraw(RESTORE, &size);
|
| this->validate(initialOffset, size);
|
| }
|
|
|
| bool SkPictureRecord::translate(SkScalar dx, SkScalar dy) {
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.translate(dx, dy);
|
| +#else
|
| // op + dx + dy
|
| uint32_t size = 1 * kUInt32Size + 2 * sizeof(SkScalar);
|
| size_t initialOffset = this->addDraw(TRANSLATE, &size);
|
| this->addScalar(dx);
|
| this->addScalar(dy);
|
| this->validate(initialOffset, size);
|
| +#endif
|
| return this->INHERITED::translate(dx, dy);
|
| }
|
|
|
| bool SkPictureRecord::scale(SkScalar sx, SkScalar sy) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.scale(sx, sy);
|
| +#else
|
| // op + sx + sy
|
| uint32_t size = 1 * kUInt32Size + 2 * sizeof(SkScalar);
|
| size_t initialOffset = this->addDraw(SCALE, &size);
|
| this->addScalar(sx);
|
| this->addScalar(sy);
|
| this->validate(initialOffset, size);
|
| +#endif
|
| return this->INHERITED::scale(sx, sy);
|
| }
|
|
|
| bool SkPictureRecord::rotate(SkScalar degrees) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.rotate(degrees);
|
| +#else
|
| // op + degrees
|
| uint32_t size = 1 * kUInt32Size + sizeof(SkScalar);
|
| size_t initialOffset = this->addDraw(ROTATE, &size);
|
| this->addScalar(degrees);
|
| this->validate(initialOffset, size);
|
| +#endif
|
| return this->INHERITED::rotate(degrees);
|
| }
|
|
|
| bool SkPictureRecord::skew(SkScalar sx, SkScalar sy) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.skew(sx, sy);
|
| +#else
|
| // op + sx + sy
|
| uint32_t size = 1 * kUInt32Size + 2 * sizeof(SkScalar);
|
| size_t initialOffset = this->addDraw(SKEW, &size);
|
| this->addScalar(sx);
|
| this->addScalar(sy);
|
| this->validate(initialOffset, size);
|
| +#endif
|
| return this->INHERITED::skew(sx, sy);
|
| }
|
|
|
| bool SkPictureRecord::concat(const SkMatrix& matrix) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.concat(matrix);
|
| +#else
|
| this->recordConcat(matrix);
|
| +#endif
|
| return this->INHERITED::concat(matrix);
|
| }
|
|
|
| @@ -675,12 +731,17 @@
|
| }
|
|
|
| void SkPictureRecord::setMatrix(const SkMatrix& matrix) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.setMatrix(matrix);
|
| +#else
|
| this->validate(fWriter.bytesWritten(), 0);
|
| // op + matrix
|
| uint32_t size = kUInt32Size + matrix.writeToMemory(NULL);
|
| size_t initialOffset = this->addDraw(SET_MATRIX, &size);
|
| this->addMatrix(matrix);
|
| this->validate(initialOffset, size);
|
| +#endif
|
| this->INHERITED::setMatrix(matrix);
|
| }
|
|
|
| @@ -700,7 +761,12 @@
|
| }
|
| }
|
|
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| void SkPictureRecord::fillRestoreOffsetPlaceholdersForCurrentStackLevel(uint32_t restoreOffset) {
|
| + fMCMgr.fillInSkips(&fWriter, restoreOffset);
|
| +}
|
| +#else
|
| +void SkPictureRecord::fillRestoreOffsetPlaceholdersForCurrentStackLevel(uint32_t restoreOffset) {
|
| int32_t offset = fRestoreOffsetStack.top();
|
| while (offset > 0) {
|
| uint32_t peek = fWriter.read32At(offset);
|
| @@ -715,6 +781,7 @@
|
| SkASSERT(SAVE == drawOp || SAVE_LAYER == drawOp);
|
| #endif
|
| }
|
| +#endif
|
|
|
| void SkPictureRecord::beginRecording() {
|
| // we have to call this *after* our constructor, to ensure that it gets
|
| @@ -726,9 +793,19 @@
|
| void SkPictureRecord::endRecording() {
|
| SkASSERT(kNoInitialSave != fInitialSaveCount);
|
| this->restoreToCount(fInitialSaveCount);
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.finish();
|
| +#endif
|
| }
|
|
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| int SkPictureRecord::recordRestoreOffsetPlaceholder(SkRegion::Op op) {
|
| + size_t offset = fWriter.bytesWritten();
|
| + this->addInt(-1);
|
| + return offset;
|
| +}
|
| +#else
|
| +int SkPictureRecord::recordRestoreOffsetPlaceholder(SkRegion::Op op) {
|
| if (fRestoreOffsetStack.isEmpty()) {
|
| return -1;
|
| }
|
| @@ -757,22 +834,30 @@
|
| fRestoreOffsetStack.top() = offset;
|
| return offset;
|
| }
|
| +#endif
|
|
|
| bool SkPictureRecord::clipRect(const SkRect& rect, SkRegion::Op op, bool doAA) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.clipRect(rect, op, doAA);
|
| +#else
|
| this->recordClipRect(rect, op, doAA);
|
| +#endif
|
| return this->INHERITED::clipRect(rect, op, doAA);
|
| }
|
|
|
| int SkPictureRecord::recordClipRect(const SkRect& rect, SkRegion::Op op, bool doAA) {
|
| -
|
| // id + rect + clip params
|
| uint32_t size = 1 * kUInt32Size + sizeof(rect) + 1 * kUInt32Size;
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + size += kUInt32Size; // + restore offset
|
| +#else
|
| // recordRestoreOffsetPlaceholder doesn't always write an offset
|
| if (!fRestoreOffsetStack.isEmpty()) {
|
| // + restore offset
|
| size += kUInt32Size;
|
| }
|
| -
|
| +#endif
|
| size_t initialOffset = this->addDraw(CLIP_RECT, &size);
|
| this->addRect(rect);
|
| this->addInt(ClipParams_pack(op, doAA));
|
| @@ -787,7 +872,11 @@
|
| return this->SkPictureRecord::clipRect(rrect.getBounds(), op, doAA);
|
| }
|
|
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.clipRRect(rrect, op, doAA);
|
| +#else
|
| this->recordClipRRect(rrect, op, doAA);
|
| +#endif
|
| if (fRecordFlags & SkPicture::kUsePathBoundsForClip_RecordingFlag) {
|
| return this->updateClipConservativelyUsingBounds(rrect.getBounds(), op, false);
|
| } else {
|
| @@ -796,19 +885,21 @@
|
| }
|
|
|
| int SkPictureRecord::recordClipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAA) {
|
| -
|
| // op + rrect + clip params
|
| uint32_t size = 1 * kUInt32Size + SkRRect::kSizeInMemory + 1 * kUInt32Size;
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + size += kUInt32Size; // + restore offset
|
| +#else
|
| // recordRestoreOffsetPlaceholder doesn't always write an offset
|
| if (!fRestoreOffsetStack.isEmpty()) {
|
| // + restore offset
|
| size += kUInt32Size;
|
| }
|
| +#endif
|
| size_t initialOffset = this->addDraw(CLIP_RRECT, &size);
|
| this->addRRect(rrect);
|
| this->addInt(ClipParams_pack(op, doAA));
|
| int offset = recordRestoreOffsetPlaceholder(op);
|
| -
|
| this->validate(initialOffset, size);
|
| return offset;
|
| }
|
| @@ -820,8 +911,12 @@
|
| return this->clipRect(r, op, doAA);
|
| }
|
|
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.clipPath(path, op, doAA);
|
| +#else
|
| int pathID = this->addPathToHeap(path);
|
| this->recordClipPath(pathID, op, doAA);
|
| +#endif
|
|
|
| if (fRecordFlags & SkPicture::kUsePathBoundsForClip_RecordingFlag) {
|
| return this->updateClipConservativelyUsingBounds(path.getBounds(), op,
|
| @@ -832,36 +927,47 @@
|
| }
|
|
|
| int SkPictureRecord::recordClipPath(int pathID, SkRegion::Op op, bool doAA) {
|
| -
|
| // op + path index + clip params
|
| uint32_t size = 3 * kUInt32Size;
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + size += kUInt32Size; // + restore offset
|
| +#else
|
| // recordRestoreOffsetPlaceholder doesn't always write an offset
|
| if (!fRestoreOffsetStack.isEmpty()) {
|
| // + restore offset
|
| size += kUInt32Size;
|
| }
|
| +#endif
|
| size_t initialOffset = this->addDraw(CLIP_PATH, &size);
|
| this->addInt(pathID);
|
| this->addInt(ClipParams_pack(op, doAA));
|
| int offset = recordRestoreOffsetPlaceholder(op);
|
| -
|
| this->validate(initialOffset, size);
|
| return offset;
|
| }
|
|
|
| bool SkPictureRecord::clipRegion(const SkRegion& region, SkRegion::Op op) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.clipRegion(region, op);
|
| +#else
|
| this->recordClipRegion(region, op);
|
| +#endif
|
| return this->INHERITED::clipRegion(region, op);
|
| }
|
|
|
| int SkPictureRecord::recordClipRegion(const SkRegion& region, SkRegion::Op op) {
|
| // op + clip params + region
|
| uint32_t size = 2 * kUInt32Size + region.writeToMemory(NULL);
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + size += kUInt32Size; // + restore offset
|
| +#else
|
| // recordRestoreOffsetPlaceholder doesn't always write an offset
|
| if (!fRestoreOffsetStack.isEmpty()) {
|
| // + restore offset
|
| size += kUInt32Size;
|
| }
|
| +#endif
|
| size_t initialOffset = this->addDraw(CLIP_REGION, &size);
|
| this->addRegion(region);
|
| this->addInt(ClipParams_pack(op, false));
|
| @@ -872,6 +978,11 @@
|
| }
|
|
|
| void SkPictureRecord::clear(SkColor color) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| // op + color
|
| uint32_t size = 2 * kUInt32Size;
|
| size_t initialOffset = this->addDraw(DRAW_CLEAR, &size);
|
| @@ -880,6 +991,11 @@
|
| }
|
|
|
| void SkPictureRecord::drawPaint(const SkPaint& paint) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| // op + paint index
|
| uint32_t size = 2 * kUInt32Size;
|
| size_t initialOffset = this->addDraw(DRAW_PAINT, &size);
|
| @@ -890,6 +1006,11 @@
|
|
|
| void SkPictureRecord::drawPoints(PointMode mode, size_t count, const SkPoint pts[],
|
| const SkPaint& paint) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| // op + paint index + mode + count + point data
|
| uint32_t size = 4 * kUInt32Size + count * sizeof(SkPoint);
|
| size_t initialOffset = this->addDraw(DRAW_POINTS, &size);
|
| @@ -902,6 +1023,11 @@
|
| }
|
|
|
| void SkPictureRecord::drawOval(const SkRect& oval, const SkPaint& paint) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| // op + paint index + rect
|
| uint32_t size = 2 * kUInt32Size + sizeof(oval);
|
| size_t initialOffset = this->addDraw(DRAW_OVAL, &size);
|
| @@ -912,6 +1038,11 @@
|
| }
|
|
|
| void SkPictureRecord::drawRect(const SkRect& rect, const SkPaint& paint) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| // op + paint index + rect
|
| uint32_t size = 2 * kUInt32Size + sizeof(rect);
|
| size_t initialOffset = this->addDraw(DRAW_RECT, &size);
|
| @@ -922,6 +1053,11 @@
|
| }
|
|
|
| void SkPictureRecord::drawRRect(const SkRRect& rrect, const SkPaint& paint) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| if (rrect.isRect()) {
|
| this->SkPictureRecord::drawRect(rrect.getBounds(), paint);
|
| } else if (rrect.isOval()) {
|
| @@ -939,6 +1075,11 @@
|
| }
|
|
|
| void SkPictureRecord::drawPath(const SkPath& path, const SkPaint& paint) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| // op + paint index + path index
|
| uint32_t size = 3 * kUInt32Size;
|
| size_t initialOffset = this->addDraw(DRAW_PATH, &size);
|
| @@ -953,6 +1094,11 @@
|
| if (bitmap.drawsNothing()) {
|
| return;
|
| }
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| // op + paint index + bitmap index + left + top
|
| uint32_t size = 3 * kUInt32Size + 2 * sizeof(SkScalar);
|
| size_t initialOffset = this->addDraw(DRAW_BITMAP, &size);
|
| @@ -970,6 +1116,10 @@
|
| if (bitmap.drawsNothing()) {
|
| return;
|
| }
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| // id + paint index + bitmap index + bool for 'src' + flags
|
| uint32_t size = 5 * kUInt32Size;
|
| if (NULL != src) {
|
| @@ -993,6 +1143,11 @@
|
| if (bitmap.drawsNothing()) {
|
| return;
|
| }
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| // id + paint index + bitmap index + matrix
|
| uint32_t size = 3 * kUInt32Size + matrix.writeToMemory(NULL);
|
| size_t initialOffset = this->addDraw(DRAW_BITMAP_MATRIX, &size);
|
| @@ -1008,6 +1163,11 @@
|
| if (bitmap.drawsNothing()) {
|
| return;
|
| }
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| // op + paint index + bitmap id + center + dst rect
|
| uint32_t size = 3 * kUInt32Size + sizeof(center) + sizeof(dst);
|
| size_t initialOffset = this->addDraw(DRAW_BITMAP_NINE, &size);
|
| @@ -1024,6 +1184,11 @@
|
| if (bitmap.drawsNothing()) {
|
| return;
|
| }
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| // op + paint index + bitmap index + left + top
|
| uint32_t size = 5 * kUInt32Size;
|
| size_t initialOffset = this->addDraw(DRAW_SPRITE, &size);
|
| @@ -1056,6 +1221,11 @@
|
|
|
| void SkPictureRecord::drawText(const void* text, size_t byteLength, SkScalar x,
|
| SkScalar y, const SkPaint& paint) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| bool fast = !paint.isVerticalText() && paint.canComputeFastBounds();
|
|
|
| // op + paint index + length + 'length' worth of chars + x + y
|
| @@ -1080,6 +1250,11 @@
|
|
|
| void SkPictureRecord::drawPosText(const void* text, size_t byteLength,
|
| const SkPoint pos[], const SkPaint& paint) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| size_t points = paint.countText(text, byteLength);
|
| if (0 == points)
|
| return;
|
| @@ -1166,6 +1341,10 @@
|
| const SkScalar xpos[], SkScalar constY,
|
| const SkPaint& paint) {
|
|
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| const SkFlatData* flatPaintData = this->getFlatPaintData(paint);
|
| this->drawPosTextHImpl(text, byteLength, xpos, constY, paint, flatPaintData);
|
| }
|
| @@ -1212,6 +1391,11 @@
|
| void SkPictureRecord::drawTextOnPath(const void* text, size_t byteLength,
|
| const SkPath& path, const SkMatrix* matrix,
|
| const SkPaint& paint) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| // op + paint index + length + 'length' worth of data + path index + matrix
|
| const SkMatrix& m = matrix ? *matrix : SkMatrix::I();
|
| uint32_t size = 3 * kUInt32Size + SkAlign4(byteLength) + kUInt32Size + m.writeToMemory(NULL);
|
| @@ -1225,6 +1409,11 @@
|
| }
|
|
|
| void SkPictureRecord::drawPicture(SkPicture& picture) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| // op + picture index
|
| uint32_t size = 2 * kUInt32Size;
|
| size_t initialOffset = this->addDraw(DRAW_PICTURE, &size);
|
| @@ -1237,6 +1426,11 @@
|
| const SkColor colors[], SkXfermode* xfer,
|
| const uint16_t indices[], int indexCount,
|
| const SkPaint& paint) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| uint32_t flags = 0;
|
| if (texs) {
|
| flags |= DRAW_VERTICES_HAS_TEXS;
|
| @@ -1296,6 +1490,11 @@
|
| }
|
|
|
| void SkPictureRecord::drawData(const void* data, size_t length) {
|
| +
|
| +#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE
|
| + fMCMgr.call(SkMatrixClipStateMgr::kOther_CallType);
|
| +#endif
|
| +
|
| // op + length + 'length' worth of data
|
| uint32_t size = 2 * kUInt32Size + SkAlign4(length);
|
| size_t initialOffset = this->addDraw(DRAW_DATA, &size);
|
|
|