From d3c001368701e745e85802f91d99461eff21ecca Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Fri, 27 Jan 2012 22:43:53 +0000 Subject: [PATCH] Cleanup options for apitrace trim. --- cli/cli_trim.cpp | 61 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/cli/cli_trim.cpp b/cli/cli_trim.cpp index 0422262..8fdd93c 100644 --- a/cli/cli_trim.cpp +++ b/cli/cli_trim.cpp @@ -30,6 +30,7 @@ #include "os_string.hpp" +#include "trace_callset.hpp" #include "trace_parser.hpp" #include "trace_writer.hpp" @@ -39,27 +40,41 @@ static void usage(void) { std::cout - << "usage: apitrace trim \n" - << synopsis << "\n"; + << "usage: apitrace trim [OPTIONS] ...\n" + << synopsis << "\n" + "\n" + " --calls Only trim specified calls\n" + " -o --output Output trace file\n" + "\n" + ; } static int command(int argc, char *argv[]) { + std::string output; + trace::CallSet calls(trace::FREQUENCY_ALL); int i; - for (i = 0; i < argc; ++i) { + for (i = 0; i < argc;) { const char *arg = argv[i]; if (arg[0] != '-') { break; } + ++i; + if (!strcmp(arg, "--")) { break; } else if (!strcmp(arg, "--help")) { usage(); return 0; + } else if (!strcmp(arg, "--calls")) { + calls = trace::CallSet(argv[i++]); + } else if (!strcmp(arg, "-o") || + !strcmp(arg, "--output")) { + output = argv[i++]; } else { std::cerr << "error: unknown option " << arg << "\n"; usage(); @@ -73,29 +88,37 @@ command(int argc, char *argv[]) return 1; } - trace::Parser p; + for ( ; i < argc; ++i) { + trace::Parser p; + if (!p.open(argv[i])) { + std::cerr << "error: failed to open " << argv[i] << "\n"; + return 1; + } - if (!p.open(argv[i])) { - std::cerr << "error: failed to open " << argv[i] << "\n"; - return 1; - } + if (output.empty()) { + os::String base(argv[i]); + base.trimExtension(); - os::String base(argv[i]); - base.trimExtension(); + output = std::string(base.str()) + std::string("-trim.trace"); + } - std::string output = std::string(base.str()) + std::string("-trim.trace"); + trace::Writer writer; + if (!writer.open(output.c_str())) { + std::cerr << "error: failed to create " << argv[i] << "\n"; + return 1; + } - trace::Writer writer; - writer.open(output.c_str()); + trace::Call *call; + while ((call = p.parse_call())) { + if (calls.contains(*call)) { + writer.writeCall(call); + } + delete call; + } - trace::Call *call; - while ((call = p.parse_call())) { - writer.writeCall(call); - delete call; + std::cout << "Trimmed trace is available as " << output << "\n"; } - std::cout << "Trimmed trace is available as " << output << "\n"; - return 0; } -- 2.43.0