From: Carl Worth Date: Sun, 12 Aug 2012 23:49:09 +0000 (-0700) Subject: glretrace, dump-images: Accept --call-nos=no to get snapshots with call numbers X-Git-Url: https://git.cworth.org/git?p=apitrace;a=commitdiff_plain;h=4edd6294b0d65390bd1737fef7beb956323375c4 glretrace, dump-images: Accept --call-nos=no to get snapshots with call numbers It is sometimes inconvenient to have call numbers encoded within the snapshot filenames. For example, when doing tests of "apitrace trim" in the test suite the call numbers frequently change even when the image contents do not. By accepting the --call-nos=no option, these programs will now generate filenames with sequential numbers starting from 0 rather than using call numbers in the filenames. --- diff --git a/cli/cli_dump_images.cpp b/cli/cli_dump_images.cpp index 0e2dd8c..34e4d05 100644 --- a/cli/cli_dump_images.cpp +++ b/cli/cli_dump_images.cpp @@ -44,17 +44,20 @@ usage(void) std::cout << "usage apitrace dump-images [OPTIONS] TRACE_FILE\n" << synopsis << "\n" "\n" - " -h, --help show this help message and exit\n" - " --calls=CALLSET dump images only for specified calls\n" - " (default value is \"*/frame\" which\n" - " which dumps an image for each frame)\n" - " -o, --output=PREFIX prefix to use in naming output files\n" - " (default is trace filename without extension)\n" + " -h, --help show this help message and exit\n" + " --calls=CALLSET dump images only for specified calls\n" + " (default value is \"*/frame\" which\n" + " which dumps an image for each frame)\n" + " --call-nos[=BOOL] use call numbers in image filenames,\n" + " otherwise use sequental numbers (default=yes)\n" + " -o, --output=PREFIX prefix to use in naming output files\n" + " (default is trace filename without extension)\n" "\n"; } enum { CALLS_OPT = CHAR_MAX + 1, + CALL_NOS_OPT, }; const static char * @@ -64,6 +67,7 @@ const static struct option longOptions[] = { {"help", no_argument, 0, 'h'}, {"calls", required_argument, 0, CALLS_OPT}, + {"call-nos", optional_argument, 0, CALL_NOS_OPT}, {"output", required_argument, 0, 'o'}, {0, 0, 0, 0} }; @@ -75,6 +79,7 @@ command(int argc, char *argv[]) const char *calls = NULL; const char *traceName = NULL; const char *output = NULL; + std::string call_nos; int opt; while ((opt = getopt_long(argc, argv, shortOptions, longOptions, NULL)) != -1) { @@ -85,6 +90,9 @@ command(int argc, char *argv[]) case CALLS_OPT: calls = optarg; break; + case CALL_NOS_OPT: + call_nos = std::string("--call-nos=") + optarg; + break; case 'o': output = optarg; break; @@ -126,6 +134,9 @@ command(int argc, char *argv[]) opts.push_back(calls); else opts.push_back("*/frame"); + if (!call_nos.empty()) { + opts.push_back(call_nos.c_str()); + } return executeRetrace(opts, traceName); } diff --git a/retrace/retrace_main.cpp b/retrace/retrace_main.cpp index 63d3dab..ca03745 100644 --- a/retrace/retrace_main.cpp +++ b/retrace/retrace_main.cpp @@ -35,6 +35,7 @@ #include "image.hpp" #include "trace_callset.hpp" #include "trace_dump.hpp" +#include "trace_option.hpp" #include "retrace.hpp" @@ -71,6 +72,7 @@ bool profiling = false; bool profilingGpuTimes = false; bool profilingCpuTimes = false; bool profilingPixelsDrawn = false; +bool useCallNos = true; unsigned frameNo = 0; unsigned callNo = 0; @@ -92,6 +94,8 @@ Dumper *dumper = &defaultDumper; */ static void takeSnapshot(unsigned call_no) { + static unsigned snapshot_no = 0; + assert(snapshotPrefix || comparePrefix); image::Image *ref = NULL; @@ -116,10 +120,13 @@ takeSnapshot(unsigned call_no) { if (snapshotPrefix) { if (snapshotPrefix[0] == '-' && snapshotPrefix[1] == 0) { char comment[21]; - snprintf(comment, sizeof comment, "%u", call_no); + snprintf(comment, sizeof comment, "%u", + useCallNos ? call_no : snapshot_no); src->writePNM(std::cout, comment); } else { - os::String filename = os::String::format("%s%010u.png", snapshotPrefix, call_no); + os::String filename = os::String::format("%s%010u.png", + snapshotPrefix, + useCallNos ? call_no : snapshot_no); if (src->writePNG(filename) && retrace::verbosity >= 0) { std::cout << "Wrote " << filename << "\n"; } @@ -133,6 +140,8 @@ takeSnapshot(unsigned call_no) { delete src; + snapshot_no++; + return; } @@ -507,6 +516,7 @@ usage(const char *argv0) { " --ppd pixels drawn profiling (pixels drawn per draw call)\n" " -c, --compare=PREFIX compare against snapshots with given PREFIX\n" " -C, --calls=CALLSET calls to compare (default is every frame)\n" + " --call-nos[=BOOL] use call numbers in snapshot filenames\n" " --core use core profile\n" " --db use a double buffer visual (default)\n" " --driver=DRIVER force driver type (`hw`, `sw`, `ref`, `null`, or driver module name)\n" @@ -519,7 +529,8 @@ usage(const char *argv0) { } enum { - CORE_OPT = CHAR_MAX + 1, + CALL_NOS_OPT = CHAR_MAX + 1, + CORE_OPT, DB_OPT, DRIVER_OPT, PCPU_OPT, @@ -534,6 +545,7 @@ shortOptions = "bc:C:D:hs:S:vw"; const static struct option longOptions[] = { {"benchmark", no_argument, 0, 'b'}, + {"call-nos", optional_argument, 0, CALL_NOS_OPT }, {"calls", required_argument, 0, 'C'}, {"compare", required_argument, 0, 'c'}, {"core", no_argument, 0, CORE_OPT}, @@ -578,6 +590,9 @@ int main(int argc, char **argv) retrace::debug = false; retrace::verbosity = -1; break; + case CALL_NOS_OPT: + useCallNos = trace::boolOption(optarg); + break; case 'c': comparePrefix = optarg; if (compareFrequency.empty()) {