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