Adding SkTileGrid: a new subclass of BBoxHierarchy, optimized for tiled playback.
Review URL: https://codereview.appspot.com/6820093

git-svn-id: http://skia.googlecode.com/svn/trunk@6314 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tools/PictureRenderer.cpp b/tools/PictureRenderer.cpp
index 23223da..cb68f39 100644
--- a/tools/PictureRenderer.cpp
+++ b/tools/PictureRenderer.cpp
@@ -22,6 +22,7 @@
 #include "SkScalar.h"
 #include "SkString.h"
 #include "SkTemplates.h"
+#include "SkTileGrid.h"
 #include "SkTDArray.h"
 #include "SkThreadUtils.h"
 #include "SkTypes.h"
@@ -564,12 +565,37 @@
     }
 };
 
+class TileGridPicture : public SkPicture {
+public:
+    TileGridPicture(int tileWidth, int tileHeight, int xTileCount, int yTileCount) {
+        fTileWidth = tileWidth;
+        fTileHeight = tileHeight;
+        fXTileCount = xTileCount;
+        fYTileCount = yTileCount;
+    }
+
+    virtual SkBBoxHierarchy* createBBoxHierarchy() const SK_OVERRIDE{
+        return SkNEW_ARGS(SkTileGrid, (fTileWidth, fTileHeight, fXTileCount, fYTileCount));
+    }
+private:
+    int fTileWidth, fTileHeight, fXTileCount, fYTileCount;
+};
+
 SkPicture* PictureRenderer::createPicture() {
     switch (fBBoxHierarchyType) {
         case kNone_BBoxHierarchyType:
             return SkNEW(SkPicture);
         case kRTree_BBoxHierarchyType:
             return SkNEW(RTreePicture);
+        case kTileGrid_BBoxHierarchyType:
+            {
+                int xTileCount = fPicture->width() / fGridWidth +
+                    ((fPicture->width() % fGridWidth) ? 1 : 0);
+                int yTileCount = fPicture->height() / fGridHeight +
+                    ((fPicture->height() % fGridHeight) ? 1 : 0);
+                return SkNEW_ARGS(TileGridPicture, (fGridWidth, fGridHeight, xTileCount,
+                                                    yTileCount));
+            }
     }
     SkASSERT(0); // invalid bbhType
     return NULL;