diff --git a/bench/SKPBench.cpp b/bench/SKPBench.cpp
index 9d822d9..9c96ef6 100644
--- a/bench/SKPBench.cpp
+++ b/bench/SKPBench.cpp
@@ -6,6 +6,9 @@
  */
 
 #include "SKPBench.h"
+#include "SkCommandLineFlags.h"
+
+DECLARE_int32(benchTile);
 
 SKPBench::SKPBench(const char* name, const SkPicture* pic, const SkIRect& clip, SkScalar scale)
     : fPic(SkRef(pic))
@@ -32,11 +35,21 @@
 }
 
 void SKPBench::onDraw(const int loops, SkCanvas* canvas) {
-    canvas->save();
-        canvas->scale(fScale, fScale);
-        for (int i = 0; i < loops; i++) {
-            fPic->playback(canvas);
-            canvas->flush();
+    SkIRect bounds;
+    SkAssertResult(canvas->getClipDeviceBounds(&bounds));
+
+    SkAutoCanvasRestore overall(canvas, true/*save now*/);
+    canvas->scale(fScale, fScale);
+
+    for (int i = 0; i < loops; i++) {
+        for (int y = bounds.fTop; y < bounds.fBottom; y += FLAGS_benchTile) {
+            for (int x = bounds.fLeft; x < bounds.fRight; x += FLAGS_benchTile) {
+                SkAutoCanvasRestore perTile(canvas, true/*save now*/);
+                canvas->clipRect(SkRect::Make(
+                            SkIRect::MakeXYWH(x, y, FLAGS_benchTile, FLAGS_benchTile)));
+                fPic->playback(canvas);
+            }
         }
-    canvas->restore();
+        canvas->flush();
+    }
 }
diff --git a/bench/nanobench.cpp b/bench/nanobench.cpp
index 250f438..2758528 100644
--- a/bench/nanobench.cpp
+++ b/bench/nanobench.cpp
@@ -70,6 +70,7 @@
 DEFINE_string(clip, "0,0,1000,1000", "Clip for SKPs.");
 DEFINE_string(scales, "1.0", "Space-separated scales for SKPs.");
 DEFINE_bool(bbh, true, "Build a BBH for SKPs?");
+DEFINE_int32(benchTile, 256, "Tile dimension used for SKP playback.");
 DEFINE_int32(flushEvery, 10, "Flush --outResultsFile every Nth run.");
 
 static SkString humanize(double ms) {
@@ -514,11 +515,10 @@
                 }
                 if (FLAGS_bbh) {
                     // The SKP we read off disk doesn't have a BBH.  Re-record so it grows one.
-                    // Here we use an SkTileGrid with parameters optimized for FLAGS_clip.
                     const SkTileGridFactory::TileGridInfo info = {
-                        SkISize::Make(fClip.width(), fClip.height()),  // tile interval
-                        SkISize::Make(0,0),                            // margin
-                        SkIPoint::Make(fClip.left(), fClip.top()),     // offset
+                        SkISize::Make(FLAGS_benchTile, FLAGS_benchTile),  // tile interval
+                        SkISize::Make(0,0),                               // margin
+                        SkIPoint::Make(0,0),                              // offset
                     };
                     SkTileGridFactory factory(info);
                     SkPictureRecorder recorder;
