X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fretrace_main.cpp;h=bff8983b15a99becb7ac6dbe06ab58fcffcafdf5;hb=c037ae2b4f749aed15ede635a6b517534bc5a901;hp=ddcc27fb82e1133bd2febf717b4ebb0b7b99d8c9;hpb=6f46db0c981e68a3331188314c1bfc2875eb6eee;p=apitrace diff --git a/retrace/retrace_main.cpp b/retrace/retrace_main.cpp index ddcc27f..bff8983 100644 --- a/retrace/retrace_main.cpp +++ b/retrace/retrace_main.cpp @@ -30,6 +30,9 @@ #include // for CHAR_MAX #include #include +#ifndef _WIN32 +#include // for isatty() +#endif #include "os_binary.hpp" #include "os_time.hpp" @@ -44,7 +47,6 @@ static bool waitOnFinish = false; static bool loopOnFinish = false; -static const char *comparePrefix = NULL; static const char *snapshotPrefix = NULL; static enum { PNM_FMT, @@ -52,7 +54,6 @@ static enum { } snapshotFormat = PNM_FMT; static trace::CallSet snapshotFrequency; -static trace::CallSet compareFrequency; static trace::ParseBookmark lastFrameStart; static unsigned dumpStateCallNo = ~0; @@ -101,26 +102,13 @@ Dumper *dumper = &defaultDumper; /** - * Take/compare snapshots. + * Take snapshots. */ static void takeSnapshot(unsigned call_no) { static unsigned snapshot_no = 0; - assert(snapshotPrefix || comparePrefix); - - image::Image *ref = NULL; - - if (comparePrefix) { - os::String filename = os::String::format("%s%010u.png", comparePrefix, call_no); - ref = image::readPNG(filename); - if (!ref) { - return; - } - if (retrace::verbosity >= 0) { - std::cout << "Read " << filename << "\n"; - } - } + assert(snapshotPrefix); image::Image *src = dumper->getSnapshot(); if (!src) { @@ -147,11 +135,6 @@ takeSnapshot(unsigned call_no) { } } - if (ref) { - std::cout << "Snapshot " << call_no << " average precision of " << src->compare(*ref) << " bits\n"; - delete ref; - } - delete src; snapshot_no++; @@ -170,8 +153,7 @@ static void retraceCall(trace::Call *call) { bool swapRenderTarget = call->flags & trace::CALL_FLAG_SWAP_RENDERTARGET; - bool doSnapshot = snapshotFrequency.contains(*call) || - compareFrequency.contains(*call); + bool doSnapshot = snapshotFrequency.contains(*call); // For calls which cause rendertargets to be swaped, we take the // snapshot _before_ swapping the rendertargets. @@ -573,8 +555,6 @@ usage(const char *argv0) { " --pgpu gpu profiling (gpu times per draw call)\n" " --ppd pixels drawn profiling (pixels drawn per draw call)\n" " --pmem memory usage profiling (vsize rss per 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" @@ -606,14 +586,12 @@ enum { }; const static char * -shortOptions = "bc:C:D:hs:S:vw"; +shortOptions = "bD: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}, {"db", no_argument, 0, DB_OPT}, {"driver", required_argument, 0, DRIVER_OPT}, @@ -647,7 +625,6 @@ int main(int argc, char **argv) using namespace retrace; int i; - assert(compareFrequency.empty()); assert(snapshotFrequency.empty()); int opt; @@ -663,18 +640,6 @@ int main(int argc, char **argv) case CALL_NOS_OPT: useCallNos = trace::boolOption(optarg); break; - case 'c': - comparePrefix = optarg; - if (compareFrequency.empty()) { - compareFrequency = trace::CallSet(trace::FREQUENCY_FRAME); - } - break; - case 'C': - compareFrequency = trace::CallSet(optarg); - if (comparePrefix == NULL) { - comparePrefix = ""; - } - break; case 'D': dumpStateCallNo = atoi(optarg); dumpingState = true; @@ -727,8 +692,8 @@ int main(int argc, char **argv) os::String::iterator sep = prefix.rfindSep(false); if (sep != prefix.end()) { prefix.erase(sep, prefix.end()); - if (!os::createDirectory(prefix)) { - std::cerr << "error: failed to create " << prefix.str() << "\n"; + if (!prefix.exists() && !os::createDirectory(prefix)) { + std::cerr << "error: failed to create `" << prefix.str() << "` directory\n"; } } } @@ -789,6 +754,12 @@ int main(int argc, char **argv) } } +#ifndef _WIN32 + if (!isatty(STDOUT_FILENO)) { + dumpFlags |= trace::DUMP_FLAG_NO_COLOR; + } +#endif + retrace::setUp(); if (retrace::profiling) { retrace::profiler.setup(retrace::profilingCpuTimes, retrace::profilingGpuTimes, retrace::profilingPixelsDrawn, retrace::profilingMemoryUsage);