| Index: tools/bench_record.cpp | 
| =================================================================== | 
| --- tools/bench_record.cpp	(revision 14237) | 
| +++ tools/bench_record.cpp	(working copy) | 
| @@ -34,50 +34,29 @@ | 
| DEFINE_string(bbh, "", "Turn on the bbh and select the type, one of rtree, tilegrid, quadtree"); | 
| DEFINE_bool(skr, false, "Record SKR instead of SKP."); | 
|  | 
| -typedef SkPictureFactory* (*PictureFactory)(); | 
| - | 
| -static SkPictureFactory* vanilla_factory() { | 
| -    return NULL; | 
| -} | 
| - | 
| -static SkPictureFactory* rtree_factory() { | 
| -    return SkNEW(SkRTreePictureFactory); | 
| -} | 
| - | 
| -static SkPictureFactory* tilegrid_factory() { | 
| -    SkTileGridPicture::TileGridInfo info; | 
| -    info.fTileInterval.set(FLAGS_tileGridSize, FLAGS_tileGridSize); | 
| -    info.fMargin.setEmpty(); | 
| -    info.fOffset.setZero(); | 
| -    return SkNEW_ARGS(SkTileGridPictureFactory, (info)); | 
| -} | 
| - | 
| -static SkPictureFactory* quadtree_factory() { | 
| -    return SkNEW(SkQuadTreePictureFactory); | 
| -} | 
| - | 
| -static PictureFactory parse_FLAGS_bbh() { | 
| +static SkBBHFactory* parse_FLAGS_bbh() { | 
| if (FLAGS_bbh.isEmpty()) { | 
| -        return &vanilla_factory; | 
| -    } | 
| -    if (FLAGS_bbh.count() != 1) { | 
| -        SkDebugf("Multiple bbh arguments supplied.\n"); | 
| return NULL; | 
| } | 
| + | 
| if (FLAGS_bbh.contains("rtree")) { | 
| -        return rtree_factory; | 
| +        return SkNEW(SkRTreeFactory); | 
| } | 
| if (FLAGS_bbh.contains("tilegrid")) { | 
| -        return tilegrid_factory; | 
| +        SkTileGridFactory::TileGridInfo info; | 
| +        info.fTileInterval.set(FLAGS_tileGridSize, FLAGS_tileGridSize); | 
| +        info.fMargin.setEmpty(); | 
| +        info.fOffset.setZero(); | 
| +        return SkNEW_ARGS(SkTileGridFactory, (info)); | 
| } | 
| if (FLAGS_bbh.contains("quadtree")) { | 
| -        return quadtree_factory; | 
| +        return SkNEW(SkQuadTreeFactory); | 
| } | 
| SkDebugf("Invalid bbh type %s, must be one of rtree, tilegrid, quadtree.\n", FLAGS_bbh[0]); | 
| return NULL; | 
| } | 
|  | 
| -static void bench_record(SkPicture* src, const char* name, PictureFactory pictureFactory) { | 
| +static void bench_record(SkPicture* src, const char* name, SkBBHFactory* bbhFactory) { | 
| const SkMSec start = SkTime::GetMSecs(); | 
| const int width  = src ? src->width()  : FLAGS_nullSize; | 
| const int height = src ? src->height() : FLAGS_nullSize; | 
| @@ -91,10 +70,8 @@ | 
| } | 
| SkDELETE(SkRecording::Delete(recording));  // delete the SkPlayback*. | 
| } else { | 
| -            int recordingFlags = FLAGS_flags; | 
| -            SkAutoTUnref<SkPictureFactory> factory(pictureFactory()); | 
| -            SkPictureRecorder recorder(factory); | 
| -            SkCanvas* canvas = recorder.beginRecording(width, height, recordingFlags); | 
| +            SkPictureRecorder recorder; | 
| +            SkCanvas* canvas = recorder.beginRecording(width, height, bbhFactory, FLAGS_flags); | 
| if (NULL != src) { | 
| src->draw(canvas); | 
| } | 
| @@ -114,11 +91,13 @@ | 
| SkCommandLineFlags::Parse(argc, argv); | 
| SkAutoGraphics autoGraphics; | 
|  | 
| -    PictureFactory pictureFactory = parse_FLAGS_bbh(); | 
| -    if (pictureFactory == NULL) { | 
| +    if (FLAGS_bbh.count() > 1) { | 
| +        SkDebugf("Multiple bbh arguments supplied.\n"); | 
| return 1; | 
| } | 
| -    bench_record(NULL, "NULL", pictureFactory); | 
| + | 
| +    SkAutoTDelete<SkBBHFactory> bbhFactory(parse_FLAGS_bbh()); | 
| +    bench_record(NULL, "NULL", bbhFactory.get()); | 
| if (FLAGS_skps.isEmpty()) { | 
| return 0; | 
| } | 
| @@ -142,7 +121,7 @@ | 
| failed = true; | 
| continue; | 
| } | 
| -        bench_record(src, filename.c_str(), pictureFactory); | 
| +        bench_record(src, filename.c_str(), bbhFactory.get()); | 
| } | 
| return failed ? 1 : 0; | 
| } | 
|  |