| Index: src/core/SkPictureStateTree.cpp | 
| =================================================================== | 
| --- src/core/SkPictureStateTree.cpp	(revision 14614) | 
| +++ src/core/SkPictureStateTree.cpp	(working copy) | 
| @@ -114,27 +114,60 @@ | 
| fCurrentMatrix = matrix; | 
| } | 
|  | 
| -uint32_t SkPictureStateTree::Iterator::nextDraw() { | 
| +uint32_t SkPictureStateTree::Iterator::peekDraw() { | 
| SkASSERT(this->isValid()); | 
| if (fPlaybackIndex >= fDraws->count()) { | 
| +        return kDrawComplete; | 
| +    } | 
| + | 
| +    Draw* draw = static_cast<Draw*>((*fDraws)[fPlaybackIndex]); | 
| +    return draw->fOffset; | 
| +} | 
| + | 
| +uint32_t SkPictureStateTree::Iterator::skipDraw() { | 
| +    SkASSERT(this->isValid()); | 
| +    if (fPlaybackIndex >= fDraws->count()) { | 
| +        return this->finish(); | 
| +    } | 
| + | 
| +    Draw* draw = static_cast<Draw*>((*fDraws)[fPlaybackIndex]); | 
| + | 
| +    if (fSave) { | 
| +        fCanvas->save(); | 
| +        fSave = false; | 
| +    } | 
| + | 
| +    fNodes.rewind(); | 
| + | 
| +    ++fPlaybackIndex; | 
| +    return draw->fOffset; | 
| +} | 
| + | 
| +uint32_t SkPictureStateTree::Iterator::finish() { | 
| +    if (fCurrentNode->fFlags & Node::kSaveLayer_Flag) { | 
| +        fCanvas->restore(); | 
| +    } | 
| + | 
| +    for (fCurrentNode = fCurrentNode->fParent; fCurrentNode; | 
| +            fCurrentNode = fCurrentNode->fParent) { | 
| +        // Note: we call restore() twice when both flags are set. | 
| +        if (fCurrentNode->fFlags & Node::kSave_Flag) { | 
| +            fCanvas->restore(); | 
| +        } | 
| if (fCurrentNode->fFlags & Node::kSaveLayer_Flag) { | 
| fCanvas->restore(); | 
| } | 
| +    } | 
|  | 
| -        for (fCurrentNode = fCurrentNode->fParent; fCurrentNode; | 
| -             fCurrentNode = fCurrentNode->fParent) { | 
| -            // Note: we call restore() twice when both flags are set. | 
| -            if (fCurrentNode->fFlags & Node::kSave_Flag) { | 
| -                fCanvas->restore(); | 
| -            } | 
| -            if (fCurrentNode->fFlags & Node::kSaveLayer_Flag) { | 
| -                fCanvas->restore(); | 
| -            } | 
| -        } | 
| +    fCanvas->setMatrix(fPlaybackMatrix); | 
| +    fCurrentMatrix = NULL; | 
| +    return kDrawComplete; | 
| +} | 
|  | 
| -        fCanvas->setMatrix(fPlaybackMatrix); | 
| -        fCurrentMatrix = NULL; | 
| -        return kDrawComplete; | 
| +uint32_t SkPictureStateTree::Iterator::nextDraw() { | 
| +    SkASSERT(this->isValid()); | 
| +    if (fPlaybackIndex >= fDraws->count()) { | 
| +        return this->finish(); | 
| } | 
|  | 
| Draw* draw = static_cast<Draw*>((*fDraws)[fPlaybackIndex]); | 
|  |