bench_pictures_main.cpp revision d1dc920097194e3342355185528c84408a9929c8
1f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com/*
243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Copyright 2012 Google Inc.
343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen *
443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Use of this source code is governed by a BSD-style license that can be
543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * found in the LICENSE file.
643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */
743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "BenchTimer.h"
943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "SkBitmap.h"
1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "SkCanvas.h"
1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "SkOSFile.h"
1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "SkPicture.h"
1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "SkStream.h"
1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "SkTArray.h"
1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "picture_utils.h"
1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst int DEFAULT_REPEATS = 100;
1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst int DEFAULT_TILE_WIDTH = 256;
1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst int DEFAULT_TILE_HEIGHT = 256;
2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenstruct Options;
2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenstatic void run_simple_benchmark(SkPicture* picture, const SkBitmap&,
2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen                                 const Options&);
2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenstruct Options {
2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    int fRepeats;
2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    void (*fBenchmark) (SkPicture*, const SkBitmap& bitmap,
2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen                        const Options& options);
2943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    int fTileWidth;
3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    int fTileHeight;
31c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org
3243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    Options() : fRepeats(DEFAULT_REPEATS), fBenchmark(run_simple_benchmark),
33a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    fTileWidth(DEFAULT_TILE_WIDTH), fTileHeight(DEFAULT_TILE_HEIGHT){}
3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen};
35a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
367c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.orgstatic void usage(const char* argv0) {
3743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    SkDebugf("SkPicture benchmarking tool\n");
38a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    SkDebugf("\n"
39a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org"Usage: \n"
4043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen"     %s <inputDir>...\n"
41ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org"     [--repeat] [--tile width height]"
42c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com, argv0);
4343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    SkDebugf("\n\n");
44c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com    SkDebugf(
45a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org"     inputDir:  A list of directories and files to use as input.\n"
4643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen"                    Files are expected to have the .skp extension.\n\n");
47ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org    SkDebugf(
48a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org"     --repeat : "
4943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen"Set the number of times to repeat each test."
5031e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager" Default is %i.\n", DEFAULT_REPEATS);
51a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    SkDebugf(
5231e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager"     --tile width height: "
5331e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager"Set to use the tiling size and specify the dimensions of each tile."
5431e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager" Default is to not use tiling\n");
5571affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org}
5671affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org
5743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenstatic void run_simple_benchmark(SkPicture* picture,
58394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com                                 const SkBitmap& bitmap,
59394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com                                 const Options& options) {
60394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    SkCanvas canvas(bitmap);
61394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
62394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    // We throw this away to remove first time effects (such as paging in this
63394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    // program)
64394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    canvas.drawPicture(*picture);
65394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
66394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    BenchTimer timer = BenchTimer(NULL);
67394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    timer.start();
68394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    for (int i = 0; i < options.fRepeats; ++i) {
69394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com        canvas.drawPicture(*picture);
70394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    }
71394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    timer.end();
72394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
73394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    printf("simple: cmsecs = %6.2f\n", timer.fWall / options.fRepeats);
74394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com}
75394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
76394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comstruct TileInfo {
77394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    SkBitmap* fBitmap;
78394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    SkCanvas* fCanvas;
79394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com};
80394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
81394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comstatic void setup_single_tile(const SkBitmap& bitmap, const Options& options,
82394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com                              SkTArray<TileInfo>* tiles,
83394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com                              int tile_x_start, int tile_y_start) {
84394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    TileInfo& tile = tiles->push_back();
85394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    tile.fBitmap = new SkBitmap();
86394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    SkIRect rect = SkIRect::MakeXYWH(tile_x_start, tile_y_start,
87394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com                                             options.fTileWidth,
88394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com                                             options.fTileHeight);
89394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    bitmap.extractSubset(tile.fBitmap, rect);
90394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    tile.fCanvas = new SkCanvas(*(tile.fBitmap));
91394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    tile.fCanvas->translate(-tile_x_start, -tile_y_start);
92394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com}
93394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
94394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comstatic void setup_tiles(SkPicture* picture, const SkBitmap& bitmap,
95394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com                        const Options& options, SkTArray<TileInfo>* tiles) {
96394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    for (int tile_y_start = 0; tile_y_start < picture->height();
97394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com         tile_y_start += options.fTileHeight) {
98394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com        for (int tile_x_start = 0; tile_x_start < picture->width();
99394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com             tile_x_start += options.fTileWidth) {
100394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com            setup_single_tile(bitmap, options, tiles, tile_x_start,
101394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com                              tile_y_start);
102394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com        }
103394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    }
104394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
105394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com}
106303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org
107303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.orgstatic void run_tile_benchmark(SkPicture* picture, const SkBitmap& bitmap,
108303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org                               const Options& options) {
109ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    SkTArray<TileInfo> tiles;
110ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    setup_tiles(picture, bitmap, options, &tiles);
111303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org
112303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org    // We throw this away to remove first time effects (such as paging in this
11343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    // program)
11443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    for (int j = 0; j < tiles.count(); ++j) {
11543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen        tiles[j].fCanvas->drawPicture(*picture);
11643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    }
11743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
118303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org    BenchTimer timer = BenchTimer(NULL);
11943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    timer.start();
12043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    for (int i = 0; i < options.fRepeats; ++i) {
12143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen        for (int j = 0; j < tiles.count(); ++j) {
12243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen            tiles[j].fCanvas->drawPicture(*picture);
12343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen        }
12443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    }
12543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    timer.end();
12643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
12743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    for (int i = 0; i < tiles.count(); ++i) {
12843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen        delete tiles[i].fCanvas;
12943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen        delete tiles[i].fBitmap;
13043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    }
131303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org
13234e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org    printf("tile%ix%i: cmsecs = %6.2f\n", options.fTileWidth,
13343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen           options.fTileHeight, timer.fWall / options.fRepeats);
13443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
135ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org
136ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgstatic void run_single_benchmark(const SkString& inputPath,
13743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen                                 const Options& options) {
13843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    SkFILEStream inputStream;
139ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org
140ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    inputStream.setPath(inputPath.c_str());
14143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    if (!inputStream.isValid()) {
14243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen        SkDebugf("Could not open file %s\n", inputPath.c_str());
143ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        return;
144ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    }
14543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
14643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    SkPicture picture(&inputStream);
14743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    SkBitmap bitmap;
14843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    sk_tools::setup_bitmap(&bitmap, picture.width(), picture.height());
14943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
15043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    SkString filename;
15143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    sk_tools::get_basename(&filename, inputPath);
15243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    printf("running bench [%i %i] %s ", picture.width(), picture.height(),
15343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen           filename.c_str());
154ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org
155ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    options.fBenchmark(&picture, bitmap, options);
15643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
157ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org
158ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgstatic void parse_commandline(int argc, char* const argv[],
159c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org                              SkTArray<SkString>* inputs, Options* options) {
160c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org    const char* argv0 = argv[0];
161c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org    char* const* stop = argv + argc;
16243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
16343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    for (++argv; argv < stop; ++argv) {
164c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org        if (0 == strcmp(*argv, "--repeat")) {
165c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org            ++argv;
16643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen            if (argv < stop) {
167c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org                options->fRepeats = atoi(*argv);
168c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org                if (options->fRepeats < 1) {
169ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org                    SkDebugf("--repeat must be given a value > 0\n");
17043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen                    exit(-1);
171c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org                }
17243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen            } else {
17343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen                SkDebugf("Missing arg for --repeat\n");
174c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org                usage(argv0);
17543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen                exit(-1);
17643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen            }
17743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen        } else if (0 == strcmp(*argv, "--tile")) {
17843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen            options->fBenchmark = run_tile_benchmark;
17943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen            ++argv;
180c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com            if (argv < stop) {
181c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com                options->fTileWidth = atoi(*argv);
182c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org                if (options->fTileWidth < 1) {
1837304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org                    SkDebugf("--tile must be given a width with a value > 0\n");
184c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com                    exit(-1);
185c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org                }
186c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com            } else {
187c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com                SkDebugf("Missing width for --tile\n");
188c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com                usage(argv0);
189c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org                exit(-1);
190c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org            }
19143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen            ++argv;
1922abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org            if (argv < stop) {
193c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com                options->fTileHeight = atoi(*argv);
19443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen                if (options->fTileHeight < 1) {
19543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen                    SkDebugf("--tile must be given a height with a value > 0"
19643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen                             "\n");
197303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org                    exit(-1);
198303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org                }
199303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org            } else {
200394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com                SkDebugf("Missing height for --tile\n");
20143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen                usage(argv0);\
202303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org                exit(-1);
2038bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org            }
2048bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org        } else if (0 == strcmp(*argv, "--help") || 0 == strcmp(*argv, "-h")) {
20543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen            usage(argv0);
20643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen            exit(0);
20743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen        } else {
208c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com            inputs->push_back(SkString(*argv));
209c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com        }
210c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com    }
211ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org
21243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    if (inputs->count() < 1) {
213ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org        usage(argv0);
21443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen        exit(-1);
215ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org    }
21643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
217ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org
218c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.orgstatic void process_input(const SkString& input, const Options& options) {
219303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org    SkOSFile::Iter iter(input.c_str(), "skp");
220ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    SkString inputFilename;
22143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
22243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    if (iter.next(&inputFilename)) {
22343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen        do {
22443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen            SkString inputPath;
22543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen            sk_tools::make_filepath(&inputPath, input.c_str(),
22643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen                                    inputFilename);
22743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen            run_single_benchmark(inputPath, options);
22843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen        } while(iter.next(&inputFilename));
22984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org    } else {
230c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org          run_single_benchmark(input, options);
23143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    }
232ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org}
233c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
234c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.orgint main(int argc, char* const argv[]) {
23543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    SkTArray<SkString> inputs;
23643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    Options options;
23743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
238ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    parse_commandline(argc, argv, &inputs, &options);
23943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
24043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    for (int i = 0; i < inputs.count(); ++i) {
241ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        process_input(inputs[i], options);
242ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    }
243ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org}
244ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org