X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fretrace_main.cpp;h=7cc3fcab869bf0e5935d504838275de4909bd940;hb=4f9982f5ec3dccae65d5a49dfd5a81b9737d90cd;hp=63d3dab07064a7b2a615af967e1263440b68862a;hpb=42b89fc9a180e56dbe55a9816904c84aacb555ea;p=apitrace diff --git a/retrace/retrace_main.cpp b/retrace/retrace_main.cpp index 63d3dab..7cc3fca 100644 --- a/retrace/retrace_main.cpp +++ b/retrace/retrace_main.cpp @@ -1,6 +1,8 @@ /************************************************************************** * * Copyright 2011 Jose Fonseca + * Copyright (C) 2013 Intel Corporation. All rights reversed. + * Author: Shuang He * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -35,6 +37,7 @@ #include "image.hpp" #include "trace_callset.hpp" #include "trace_dump.hpp" +#include "trace_option.hpp" #include "retrace.hpp" @@ -71,6 +74,8 @@ bool profiling = false; bool profilingGpuTimes = false; bool profilingCpuTimes = false; bool profilingPixelsDrawn = false; +bool profilingMemoryUsage = false; +bool useCallNos = true; unsigned frameNo = 0; unsigned callNo = 0; @@ -92,6 +97,8 @@ Dumper *dumper = &defaultDumper; */ static void takeSnapshot(unsigned call_no) { + static unsigned snapshot_no = 0; + assert(snapshotPrefix || comparePrefix); image::Image *ref = NULL; @@ -116,10 +123,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 +143,8 @@ takeSnapshot(unsigned call_no) { delete src; + snapshot_no++; + return; } @@ -505,8 +517,10 @@ usage(const char *argv0) { " --pcpu cpu profiling (cpu times per call)\n" " --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" " --driver=DRIVER force driver type (`hw`, `sw`, `ref`, `null`, or driver module name)\n" @@ -519,12 +533,14 @@ usage(const char *argv0) { } enum { - CORE_OPT = CHAR_MAX + 1, + CALL_NOS_OPT = CHAR_MAX + 1, + CORE_OPT, DB_OPT, DRIVER_OPT, PCPU_OPT, PGPU_OPT, PPD_OPT, + PMEM_OPT, SB_OPT, }; @@ -534,6 +550,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}, @@ -544,6 +561,7 @@ longOptions[] = { {"pcpu", no_argument, 0, PCPU_OPT}, {"pgpu", no_argument, 0, PGPU_OPT}, {"ppd", no_argument, 0, PPD_OPT}, + {"pmem", no_argument, 0, PMEM_OPT}, {"sb", no_argument, 0, SB_OPT}, {"snapshot-prefix", required_argument, 0, 's'}, {"snapshot", required_argument, 0, 'S'}, @@ -578,6 +596,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()) { @@ -661,6 +682,13 @@ int main(int argc, char **argv) retrace::profilingPixelsDrawn = true; break; + case PMEM_OPT: + retrace::debug = false; + retrace::profiling = true; + retrace::verbosity = -1; + + retrace::profilingMemoryUsage = true; + break; default: std::cerr << "error: unknown option " << opt << "\n"; usage(argv[0]); @@ -670,7 +698,7 @@ int main(int argc, char **argv) retrace::setUp(); if (retrace::profiling) { - retrace::profiler.setup(retrace::profilingCpuTimes, retrace::profilingGpuTimes, retrace::profilingPixelsDrawn); + retrace::profiler.setup(retrace::profilingCpuTimes, retrace::profilingGpuTimes, retrace::profilingPixelsDrawn, retrace::profilingMemoryUsage); } os::setExceptionCallback(exceptionCallback);