static void run_all_collections(void) { struct collection *coll; for_each_collection(coll) run_collection(coll); }
int cmd_bench(int argc, const char **argv) { struct collection *coll; int ret = 0; if (argc < 2) { /* No collection specified. */ print_usage(); goto end; } argc = parse_options(argc, argv, bench_options, bench_usage, PARSE_OPT_STOP_AT_NON_OPTION); bench_format = bench_str2int(bench_format_str); if (bench_format == BENCH_FORMAT_UNKNOWN) { printf("Unknown format descriptor: '%s'\n", bench_format_str); goto end; } if (bench_repeat == 0) { printf("Invalid repeat option: Must specify a positive value\n"); goto end; } if (argc < 1) { print_usage(); goto end; } if (!strcmp(argv[0], "all")) { run_all_collections(); goto end; } for_each_collection(coll) { struct bench *bench; if (strcmp(coll->name, argv[0])) continue; if (argc < 2) { /* No bench specified. */ dump_benchmarks(coll); goto end; } if (!strcmp(argv[1], "all")) { run_collection(coll); goto end; } for_each_bench(coll, bench) { if (strcmp(bench->name, argv[1])) continue; if (bench_format == BENCH_FORMAT_DEFAULT) printf("# Running '%s/%s' benchmark:\n", coll->name, bench->name); fflush(stdout); ret = run_bench(coll->name, bench->name, bench->fn, argc-1, argv+1); goto end; } if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help")) { dump_benchmarks(coll); goto end; } printf("Unknown benchmark: '%s' for collection '%s'\n", argv[1], argv[0]); ret = 1; goto end; } printf("Unknown collection: '%s'\n", argv[0]); ret = 1; end: return ret; }