bench_pictures_main.cpp revision cf6c44cf9287af8b425fb0d9d286a6d57ad03897
1006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com/* 2006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com * Copyright 2012 Google Inc. 3006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com * 4006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com * Use of this source code is governed by a BSD-style license that can be 5006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com * found in the LICENSE file. 6006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com */ 7006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 8006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com#include "BenchTimer.h" 9cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org#include "SamplePipeControllers.h" 10006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com#include "SkBitmap.h" 11006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com#include "SkCanvas.h" 12cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org#include "SkGPipe.h" 13006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com#include "SkOSFile.h" 14006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com#include "SkPicture.h" 15006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com#include "SkStream.h" 16006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com#include "SkTArray.h" 17006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com#include "picture_utils.h" 18006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 19006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.comconst int DEFAULT_REPEATS = 100; 20006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.comconst int DEFAULT_TILE_WIDTH = 256; 21006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.comconst int DEFAULT_TILE_HEIGHT = 256; 22006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 23006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.comstruct Options; 24006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.comstatic void run_simple_benchmark(SkPicture* picture, const SkBitmap&, 25006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com const Options&); 26006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 27006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.comstruct Options { 28006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com int fRepeats; 29006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com void (*fBenchmark) (SkPicture*, const SkBitmap& bitmap, 30006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com const Options& options); 31006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com int fTileWidth; 32006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com int fTileHeight; 33006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 34006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com Options() : fRepeats(DEFAULT_REPEATS), fBenchmark(run_simple_benchmark), 35006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com fTileWidth(DEFAULT_TILE_WIDTH), fTileHeight(DEFAULT_TILE_HEIGHT){} 36006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com}; 37006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 38006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.comstatic void usage(const char* argv0) { 39006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkDebugf("SkPicture benchmarking tool\n"); 40006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkDebugf("\n" 41006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com"Usage: \n" 42d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org" %s <inputDir>...\n" 43006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com" [--repeat] [--tile width height]" 44006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com, argv0); 45006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkDebugf("\n\n"); 46006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkDebugf( 47d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org" inputDir: A list of directories and files to use as input.\n" 48d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org" Files are expected to have the .skp extension.\n\n"); 49006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkDebugf( 50cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org" --pipe : " 51cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org"Set to use piping." 52cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org" Default is to not use piping.\n"); 53cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org SkDebugf( 54006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com" --repeat : " 55006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com"Set the number of times to repeat each test." 56006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com" Default is %i.\n", DEFAULT_REPEATS); 57006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkDebugf( 58006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com" --tile width height: " 59006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com"Set to use the tiling size and specify the dimensions of each tile." 60006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com" Default is to not use tiling\n"); 61006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com} 62006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 63006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.comstatic void run_simple_benchmark(SkPicture* picture, 64006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com const SkBitmap& bitmap, 65006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com const Options& options) { 66006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkCanvas canvas(bitmap); 67006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 68006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com // We throw this away to remove first time effects (such as paging in this 69006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com // program) 70006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com canvas.drawPicture(*picture); 71006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 72006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com BenchTimer timer = BenchTimer(NULL); 73006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com timer.start(); 74006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com for (int i = 0; i < options.fRepeats; ++i) { 75006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com canvas.drawPicture(*picture); 76006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 77006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com timer.end(); 78006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 79006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com printf("simple: cmsecs = %6.2f\n", timer.fWall / options.fRepeats); 80006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com} 81006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 82006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.comstruct TileInfo { 83006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkBitmap* fBitmap; 84006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkCanvas* fCanvas; 85006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com}; 86006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 87006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.comstatic void setup_single_tile(const SkBitmap& bitmap, const Options& options, 88006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkTArray<TileInfo>* tiles, 89006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com int tile_x_start, int tile_y_start) { 90006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com TileInfo& tile = tiles->push_back(); 91006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com tile.fBitmap = new SkBitmap(); 92006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkIRect rect = SkIRect::MakeXYWH(tile_x_start, tile_y_start, 93006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com options.fTileWidth, 94006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com options.fTileHeight); 95006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com bitmap.extractSubset(tile.fBitmap, rect); 96006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com tile.fCanvas = new SkCanvas(*(tile.fBitmap)); 97006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com tile.fCanvas->translate(-tile_x_start, -tile_y_start); 98006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com} 99006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 100006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.comstatic void setup_tiles(SkPicture* picture, const SkBitmap& bitmap, 101006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com const Options& options, SkTArray<TileInfo>* tiles) { 102006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com for (int tile_y_start = 0; tile_y_start < picture->height(); 103006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com tile_y_start += options.fTileHeight) { 104006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com for (int tile_x_start = 0; tile_x_start < picture->width(); 105006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com tile_x_start += options.fTileWidth) { 106006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com setup_single_tile(bitmap, options, tiles, tile_x_start, 107006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com tile_y_start); 108006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 109006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 110006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 111006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com} 112006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 113006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.comstatic void run_tile_benchmark(SkPicture* picture, const SkBitmap& bitmap, 114006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com const Options& options) { 115006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkTArray<TileInfo> tiles; 116006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com setup_tiles(picture, bitmap, options, &tiles); 117006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 118006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com // We throw this away to remove first time effects (such as paging in this 119006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com // program) 120006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com for (int j = 0; j < tiles.count(); ++j) { 121006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com tiles[j].fCanvas->drawPicture(*picture); 122006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 123006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 124006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com BenchTimer timer = BenchTimer(NULL); 125006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com timer.start(); 126006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com for (int i = 0; i < options.fRepeats; ++i) { 127006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com for (int j = 0; j < tiles.count(); ++j) { 128006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com tiles[j].fCanvas->drawPicture(*picture); 129006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 130006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 131006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com timer.end(); 132006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 133006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com for (int i = 0; i < tiles.count(); ++i) { 134006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com delete tiles[i].fCanvas; 135006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com delete tiles[i].fBitmap; 136006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 137006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 138006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com printf("tile%ix%i: cmsecs = %6.2f\n", options.fTileWidth, 139006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com options.fTileHeight, timer.fWall / options.fRepeats); 140006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com} 141006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 142cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.orgstatic void pipe_run(SkPicture* picture, SkCanvas* canvas) { 143cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org PipeController pipeController(canvas); 144cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org SkGPipeWriter writer; 145cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org SkCanvas* pipeCanvas = writer.startRecording(&pipeController); 146cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org pipeCanvas->drawPicture(*picture); 147cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org writer.endRecording(); 148cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org} 149cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org 150cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.orgstatic void run_pipe_benchmark(SkPicture* picture, const SkBitmap& bitmap, 151cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org const Options& options) { 152cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org SkCanvas canvas(bitmap); 153cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org 154cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org // We throw this away to remove first time effects (such as paging in this 155cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org // program) 156cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org pipe_run(picture, &canvas); 157cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org 158cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org BenchTimer timer = BenchTimer(NULL); 159cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org timer.start(); 160cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org for (int i = 0; i < options.fRepeats; ++i) { 161cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org pipe_run(picture, &canvas); 162cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org } 163cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org timer.end(); 164cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org 165cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org printf("pipe: cmsecs = %6.2f\n", timer.fWall / options.fRepeats); 166cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org} 167cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org 168d1dc920097194e3342355185528c84408a9929c8keyar@chromium.orgstatic void run_single_benchmark(const SkString& inputPath, 169d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org const Options& options) { 170006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkFILEStream inputStream; 171006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 172006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com inputStream.setPath(inputPath.c_str()); 173006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com if (!inputStream.isValid()) { 174006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkDebugf("Could not open file %s\n", inputPath.c_str()); 175006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com return; 176006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 177006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 178006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkPicture picture(&inputStream); 179006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkBitmap bitmap; 180006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com sk_tools::setup_bitmap(&bitmap, picture.width(), picture.height()); 181006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 182d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org SkString filename; 183d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org sk_tools::get_basename(&filename, inputPath); 184006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com printf("running bench [%i %i] %s ", picture.width(), picture.height(), 185d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org filename.c_str()); 186d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org 187006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com options.fBenchmark(&picture, bitmap, options); 188006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com} 189006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 190006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.comstatic void parse_commandline(int argc, char* const argv[], 191d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org SkTArray<SkString>* inputs, Options* options) { 192006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com const char* argv0 = argv[0]; 193006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com char* const* stop = argv + argc; 194006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 195006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com for (++argv; argv < stop; ++argv) { 196006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com if (0 == strcmp(*argv, "--repeat")) { 197006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com ++argv; 198006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com if (argv < stop) { 199006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com options->fRepeats = atoi(*argv); 200006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com if (options->fRepeats < 1) { 201006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkDebugf("--repeat must be given a value > 0\n"); 202006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com exit(-1); 203006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 204006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } else { 205006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkDebugf("Missing arg for --repeat\n"); 206006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com usage(argv0); 207006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com exit(-1); 208006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 209006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } else if (0 == strcmp(*argv, "--tile")) { 210006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com options->fBenchmark = run_tile_benchmark; 211006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com ++argv; 212006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com if (argv < stop) { 213006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com options->fTileWidth = atoi(*argv); 214006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com if (options->fTileWidth < 1) { 215006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkDebugf("--tile must be given a width with a value > 0\n"); 216006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com exit(-1); 217006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 218006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } else { 219006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkDebugf("Missing width for --tile\n"); 220006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com usage(argv0); 221006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com exit(-1); 222006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 223006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com ++argv; 224006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com if (argv < stop) { 225006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com options->fTileHeight = atoi(*argv); 226006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com if (options->fTileHeight < 1) { 227006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkDebugf("--tile must be given a height with a value > 0" 228006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com "\n"); 229006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com exit(-1); 230006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 231006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } else { 232006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com SkDebugf("Missing height for --tile\n"); 233006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com usage(argv0);\ 234006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com exit(-1); 235006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 236cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org } else if (0 == strcmp(*argv, "--pipe")) { 237cf6c44cf9287af8b425fb0d9d286a6d57ad03897keyar@chromium.org options->fBenchmark = run_pipe_benchmark; 238006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } else if (0 == strcmp(*argv, "--help") || 0 == strcmp(*argv, "-h")) { 239006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com usage(argv0); 240006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com exit(0); 241006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } else { 242d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org inputs->push_back(SkString(*argv)); 243006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 244006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 245006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 246d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org if (inputs->count() < 1) { 247006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com usage(argv0); 248006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com exit(-1); 249006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 250d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org} 251d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org 252d1dc920097194e3342355185528c84408a9929c8keyar@chromium.orgstatic void process_input(const SkString& input, const Options& options) { 253d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org SkOSFile::Iter iter(input.c_str(), "skp"); 254d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org SkString inputFilename; 255006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 256d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org if (iter.next(&inputFilename)) { 257d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org do { 258d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org SkString inputPath; 259d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org sk_tools::make_filepath(&inputPath, input.c_str(), 260d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org inputFilename); 261d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org run_single_benchmark(inputPath, options); 262d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org } while(iter.next(&inputFilename)); 263d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org } else { 264d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org run_single_benchmark(input, options); 265d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org } 266006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com} 267006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 268006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.comint main(int argc, char* const argv[]) { 269d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org SkTArray<SkString> inputs; 270006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com Options options; 271006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 272d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org parse_commandline(argc, argv, &inputs, &options); 273006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com 274d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org for (int i = 0; i < inputs.count(); ++i) { 275d1dc920097194e3342355185528c84408a9929c8keyar@chromium.org process_input(inputs[i], options); 276006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com } 277006db0f1b8d85caea7ac37bc1fca133eca74aac8reed@google.com} 278