diff --git a/tools/bench_record.cpp b/tools/bench_record.cpp index 219a6b9383..cea3f0b626 100644 --- a/tools/bench_record.cpp +++ b/tools/bench_record.cpp @@ -24,41 +24,54 @@ DEFINE_string2(skps, r, "skps", "Directory containing SKPs to read and re-record DEFINE_int32(loops, 900, "Number of times to re-record each SKP."); DEFINE_int32(flags, SkPicture::kUsePathBoundsForClip_RecordingFlag, "RecordingFlags to use."); DEFINE_bool(endRecording, true, "If false, don't time SkPicture::endRecording()"); +DEFINE_int32(nullSize, 1000, "Pretend dimension of null source picture."); + +static void bench_record(SkPicture* src, const char* name) { + const SkMSec start = SkTime::GetMSecs(); + const int width = src ? src->width() : FLAGS_nullSize; + const int height = src ? src->height() : FLAGS_nullSize; + + for (int i = 0; i < FLAGS_loops; i++) { + SkPicture dst; + SkCanvas* canvas = dst.beginRecording(width, height, FLAGS_flags); + if (src) src->draw(canvas); + if (FLAGS_endRecording) dst.endRecording(); + } + + const SkMSec elapsed = SkTime::GetMSecs() - start; + const double msPerLoop = elapsed / (double)FLAGS_loops; + printf("%.2g\t%s\n", msPerLoop, name); +} int tool_main(int argc, char** argv); int tool_main(int argc, char** argv) { SkCommandLineFlags::Parse(argc, argv); SkAutoGraphics autoGraphics; + bench_record(NULL, "NULL"); + if (FLAGS_skps.isEmpty()) return 0; + SkOSFile::Iter it(FLAGS_skps[0], ".skp"); SkString filename; + bool failed = false; while (it.next(&filename)) { const SkString path = SkOSPath::SkPathJoin(FLAGS_skps[0], filename.c_str()); SkAutoTUnref stream(SkStream::NewFromFile(path.c_str())); if (!stream) { SkDebugf("Could not read %s.\n", path.c_str()); + failed = true; continue; } SkAutoTUnref src(SkPicture::CreateFromStream(stream)); if (!src) { SkDebugf("Could not read %s as an SkPicture.\n", path.c_str()); + failed = true; continue; } - - const SkMSec start = SkTime::GetMSecs(); - for (int i = 0; i < FLAGS_loops; i++) { - SkPicture dst; - src->draw(dst.beginRecording(src->width(), src->height(), FLAGS_flags)); - if (FLAGS_endRecording) dst.endRecording(); - } - - const SkMSec elapsed = SkTime::GetMSecs() - start; - const double msPerLoop = elapsed / (double)FLAGS_loops; - printf("%4.2f\t%s\n", msPerLoop, filename.c_str()); + bench_record(src, filename.c_str()); } - - return 0; + return failed ? 1 : 0; } #if !defined SK_BUILD_FOR_IOS