| Index: bench/PictureNestingBench.cpp | 
| diff --git a/bench/PictureNestingBench.cpp b/bench/PictureNestingBench.cpp | 
| index c2848833b747a8d8afaaf09117addeb75129fe04..7868f46c9fd60190cb64bb20971dabd91502366f 100644 | 
| --- a/bench/PictureNestingBench.cpp | 
| +++ b/bench/PictureNestingBench.cpp | 
| @@ -14,17 +14,17 @@ | 
| #include "SkPictureRecorder.h" | 
| #include "SkString.h" | 
|  | 
| +#include <math.h> | 
| + | 
| class PictureNesting : public Benchmark { | 
| public: | 
| PictureNesting(const char* name, int maxLevel, int maxPictureLevel) | 
| : fMaxLevel(maxLevel) | 
| , fMaxPictureLevel(maxPictureLevel) { | 
| - | 
| +        fName.printf("picture_nesting_%s_%d", name, this->countPics()); | 
| fPaint.setColor(SK_ColorRED); | 
| fPaint.setAntiAlias(true); | 
| fPaint.setStyle(SkPaint::kStroke_Style); | 
| -        SkAutoTUnref<SkCanvas> nullCanvas(SkCreateNullCanvas()); | 
| -        fName.printf("picture_nesting_%s_%d", name, this->sierpinsky(nullCanvas, 0, fPaint)); | 
| } | 
|  | 
| protected: | 
| @@ -37,7 +37,8 @@ protected: | 
| canvas->save(); | 
| canvas->scale(SkIntToScalar(canvasSize.x()), SkIntToScalar(canvasSize.y())); | 
|  | 
| -        this->sierpinsky(canvas, 0, fPaint); | 
| +        SkDEBUGCODE(int pics = ) this->sierpinsky(canvas, 0, fPaint); | 
| +        SkASSERT(pics == this->countPics()); | 
|  | 
| canvas->restore(); | 
| } | 
| @@ -86,6 +87,15 @@ protected: | 
| int fMaxPictureLevel; | 
|  | 
| private: | 
| +    int countPics() const { | 
| +        // Solve: pics from sierpinsky | 
| +        // f(m) = 1 + 3*f(m - 1) | 
| +        // f(0) = 0 | 
| +        //   via "recursive function to closed form" tricks | 
| +        // f(m) = 1/2 (3^m - 1) | 
| +        return static_cast<int>((pow(3.0, fMaxPictureLevel) - 1.0) / 2.0); | 
| +    } | 
| + | 
| SkString fName; | 
| SkPaint  fPaint; | 
|  | 
| @@ -123,6 +133,10 @@ class PictureNestingPlayback : public PictureNesting { | 
| public: | 
| PictureNestingPlayback(int maxLevel, int maxPictureLevel) | 
| : INHERITED("playback", maxLevel, maxPictureLevel) { | 
| +    } | 
| +protected: | 
| +    virtual void onPreDraw() SK_OVERRIDE { | 
| +        this->INHERITED::onPreDraw(); | 
|  | 
| SkIPoint canvasSize = onGetSize(); | 
| SkPictureRecorder recorder; | 
| @@ -133,7 +147,6 @@ public: | 
| fPicture.reset(recorder.endRecording()); | 
| } | 
|  | 
| -protected: | 
| virtual void onDraw(const int loops, SkCanvas* canvas) { | 
| for (int i = 0; i < loops; i++) { | 
| canvas->drawPicture(fPicture); | 
|  |