| Index: src/core/SkRecordDraw.cpp
|
| diff --git a/src/core/SkRecordDraw.cpp b/src/core/SkRecordDraw.cpp
|
| index 5e1fe7f0aa955bff31955a5755861586df5ac79e..54074808460dd032e3c54cedca1c81b9fa6e4e17 100644
|
| --- a/src/core/SkRecordDraw.cpp
|
| +++ b/src/core/SkRecordDraw.cpp
|
| @@ -692,6 +692,13 @@ private:
|
| dst.fRestoreOpID = src.fRestoreOpID;
|
| dst.fHasNestedLayers = src.fHasNestedLayers;
|
| dst.fIsNested = fSaveLayersInStack > 0 || src.fIsNested;
|
| +
|
| + // Store 'saveLayer ops from enclosing picture' + drawPict op + 'ops from sub-picture'
|
| + dst.fKeySize = fSaveLayerOpStack.count() + src.fKeySize + 1;
|
| + dst.fKey = SkNEW_ARRAY(int, dst.fKeySize);
|
| + memcpy(dst.fKey, fSaveLayerOpStack.begin(), fSaveLayerOpStack.count() * sizeof(int));
|
| + dst.fKey[fSaveLayerOpStack.count()] = fFillBounds.currentOp();
|
| + memcpy(&dst.fKey[fSaveLayerOpStack.count()+1], src.fKey, src.fKeySize * sizeof(int));
|
| }
|
| }
|
|
|
| @@ -724,6 +731,7 @@ private:
|
| if (isSaveLayer) {
|
| this->updateStackForSaveLayer();
|
| ++fSaveLayersInStack;
|
| + fSaveLayerOpStack.push(fFillBounds.currentOp());
|
| }
|
|
|
| fSaveLayerStack.push(SaveLayerInfo(fFillBounds.currentOp(), isSaveLayer, paint));
|
| @@ -735,6 +743,8 @@ private:
|
| return;
|
| }
|
|
|
| + SkASSERT(fSaveLayersInStack == fSaveLayerOpStack.count());
|
| +
|
| SaveLayerInfo sli;
|
| fSaveLayerStack.pop(&sli);
|
|
|
| @@ -758,12 +768,20 @@ private:
|
| block.fRestoreOpID = fFillBounds.currentOp();
|
| block.fHasNestedLayers = sli.fHasNestedSaveLayer;
|
| block.fIsNested = fSaveLayersInStack > 0;
|
| +
|
| + block.fKeySize = fSaveLayerOpStack.count();
|
| + block.fKey = SkNEW_ARRAY(int, block.fKeySize);
|
| + memcpy(block.fKey, fSaveLayerOpStack.begin(), block.fKeySize * sizeof(int));
|
| +
|
| + fSaveLayerOpStack.pop();
|
| }
|
|
|
| // Used to collect saveLayer information for layer hoisting
|
| - int fSaveLayersInStack;
|
| + int fSaveLayersInStack;
|
| SkTDArray<SaveLayerInfo> fSaveLayerStack;
|
| - SkLayerInfo* fAccelData;
|
| + // The op code indices of all the currently active saveLayers
|
| + SkTDArray<int> fSaveLayerOpStack;
|
| + SkLayerInfo* fAccelData;
|
| const SkPicture::SnapshotArray* fPictList;
|
|
|
| SkRecords::FillBounds fFillBounds;
|
|
|