]> git.cworth.org Git - apitrace/commitdiff
glretrace, dump-images: Accept --call-nos=no to get snapshots with call numbers
authorCarl Worth <cworth@cworth.org>
Sun, 12 Aug 2012 23:49:09 +0000 (16:49 -0700)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Sun, 2 Dec 2012 21:00:41 +0000 (21:00 +0000)
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.

cli/cli_dump_images.cpp
retrace/retrace_main.cpp

index 0e2dd8c8b6cfaf6919253a0ffdc8b841fad1dd5e..34e4d05d130dcb5162ab0adcc793f77c73710d56 100644 (file)
@@ -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);
 }
index 63d3dab07064a7b2a615af967e1263440b68862a..ca03745c64d241ba836f718ca7aef041c2749cbc 100644 (file)
@@ -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()) {