| Index: src/core/SkPictureRecord.cpp
|
| diff --git a/src/core/SkPictureRecord.cpp b/src/core/SkPictureRecord.cpp
|
| index 01478bb844828bae09214e457ed4dada66d251cd..4134f8dede6410c090753bca630ccf19243e1384 100644
|
| --- a/src/core/SkPictureRecord.cpp
|
| +++ b/src/core/SkPictureRecord.cpp
|
| @@ -715,21 +715,27 @@ void SkPictureRecord::recordRestoreOffsetPlaceholder(SkRegion::Op op) {
|
| return;
|
| }
|
|
|
| + // The RestoreOffset field is initially filled with a placeholder
|
| + // value that points to the offset of the previous RestoreOffset
|
| + // in the current stack level, thus forming a linked list so that
|
| + // the restore offsets can be filled in when the corresponding
|
| + // restore command is recorded.
|
| + int32_t prevOffset = fRestoreOffsetStack.top();
|
| +
|
| if (regionOpExpands(op)) {
|
| // Run back through any previous clip ops, and mark their offset to
|
| // be 0, disabling their ability to trigger a jump-to-restore, otherwise
|
| // they could hide this clips ability to expand the clip (i.e. go from
|
| // empty to non-empty).
|
| fillRestoreOffsetPlaceholdersForCurrentStackLevel(0);
|
| +
|
| + // Reset the pointer back to the previous clip so that subsequent
|
| + // restores don't overwrite the offsets we just cleared.
|
| + prevOffset = 0;
|
| }
|
|
|
| size_t offset = fWriter.size();
|
| - // The RestoreOffset field is initially filled with a placeholder
|
| - // value that points to the offset of the previous RestoreOffset
|
| - // in the current stack level, thus forming a linked list so that
|
| - // the restore offsets can be filled in when the corresponding
|
| - // restore command is recorded.
|
| - addInt(fRestoreOffsetStack.top());
|
| + addInt(prevOffset);
|
| fRestoreOffsetStack.top() = offset;
|
| }
|
|
|
|
|