| Index: src/utils/debugger/SkDebugCanvas.cpp | 
| =================================================================== | 
| --- src/utils/debugger/SkDebugCanvas.cpp	(revision 13645) | 
| +++ src/utils/debugger/SkDebugCanvas.cpp	(working copy) | 
| @@ -197,8 +197,9 @@ | 
|  | 
| // set up the saveLayer commands so that the active ones | 
| // return true in their 'active' method | 
| -void SkDebugCanvas::markActiveSaveLayers(int index) { | 
| -    SkTDArray<SkDrawCommand*> activeLayers; | 
| +void SkDebugCanvas::markActiveCommands(int index) { | 
| +    fActiveLayers.rewind(); | 
| +    fActiveCulls.rewind(); | 
|  | 
| for (int i = 0; i < fCommandVector.count(); ++i) { | 
| fCommandVector[i]->setActive(false); | 
| @@ -206,16 +207,24 @@ | 
|  | 
| for (int i = 0; i < index; ++i) { | 
| SkDrawCommand::Action result = fCommandVector[i]->action(); | 
| -        if (SkDrawCommand::kPush_Action == result) { | 
| -            activeLayers.push(fCommandVector[i]); | 
| -        } else if (SkDrawCommand::kPop_Action == result) { | 
| -            activeLayers.pop(); | 
| +        if (SkDrawCommand::kPushLayer_Action == result) { | 
| +            fActiveLayers.push(fCommandVector[i]); | 
| +        } else if (SkDrawCommand::kPopLayer_Action == result) { | 
| +            fActiveLayers.pop(); | 
| +        } else if (SkDrawCommand::kPushCull_Action == result) { | 
| +            fActiveCulls.push(fCommandVector[i]); | 
| +        } else if (SkDrawCommand::kPopCull_Action == result) { | 
| +            fActiveCulls.pop(); | 
| } | 
| } | 
|  | 
| -    for (int i = 0; i < activeLayers.count(); ++i) { | 
| -        activeLayers[i]->setActive(true); | 
| +    for (int i = 0; i < fActiveLayers.count(); ++i) { | 
| +        fActiveLayers[i]->setActive(true); | 
| } | 
| + | 
| +    for (int i = 0; i < fActiveCulls.count(); ++i) { | 
| +        fActiveCulls[i]->setActive(true); | 
| +    } | 
| } | 
|  | 
| void SkDebugCanvas::drawTo(SkCanvas* canvas, int index) { | 
| @@ -268,7 +277,7 @@ | 
| } | 
|  | 
| if (fMegaVizMode) { | 
| -        this->markActiveSaveLayers(index); | 
| +        this->markActiveCommands(index); | 
| } | 
|  | 
| for (; i <= index; i++) { | 
| @@ -288,14 +297,16 @@ | 
|  | 
| if (fCommandVector[i]->isVisible()) { | 
| if (fMegaVizMode && fCommandVector[i]->active()) { | 
| -                // All active saveLayers get replaced with saves so all draws go to the | 
| -                // visible canvas | 
| -                canvas->save(); | 
| -                ++fOutstandingSaveCount; | 
| +                // "active" commands execute their visualization behaviors: | 
| +                //     All active saveLayers get replaced with saves so all draws go to the | 
| +                //     visible canvas. | 
| +                //     All active culls draw their cull box | 
| +                fCommandVector[i]->vizExecute(canvas); | 
| } else { | 
| fCommandVector[i]->execute(canvas); | 
| -                fCommandVector[i]->trackSaveState(&fOutstandingSaveCount); | 
| } | 
| + | 
| +            fCommandVector[i]->trackSaveState(&fOutstandingSaveCount); | 
| } | 
| } | 
|  | 
|  |