<< "usage: apitrace trim [OPTIONS] TRACE_FILE...\n"
<< synopsis << "\n"
"\n"
- " -h, --help show this help message and exit\n"
- " --calls=CALLSET only trim specified calls\n"
- " -o --output=TRACE_FILE output trace file\n"
+ " -h, --help show this help message and exit\n"
+ " --calls=CALLSET only retain specified calls\n"
+ " --thread=THREAD_ID only retain calls from specified thread\n"
+ " -o, --output=TRACE_FILE output trace file\n"
"\n"
;
}
enum {
- CALLS_OPT = CHAR_MAX + 1,
+ CALLS_OPT = CHAR_MAX + 1,
+ THREAD_OPT,
};
const static char *
-shortOptions = "ho";
+shortOptions = "ho:";
const static struct option
longOptions[] = {
{"help", no_argument, 0, 'h'},
{"calls", required_argument, 0, CALLS_OPT},
- {"calls", required_argument, 0, CALLS_OPT},
- {"output", optional_argument, 0, 'o'},
+ {"thread", required_argument, 0, THREAD_OPT},
+ {"output", required_argument, 0, 'o'},
{0, 0, 0, 0}
};
{
std::string output;
trace::CallSet calls(trace::FREQUENCY_ALL);
+ int thread = -1;
int i;
int opt;
case CALLS_OPT:
calls = trace::CallSet(optarg);
break;
+ case THREAD_OPT:
+ thread = atoi(optarg);
+ break;
case 'o':
output = optarg;
break;
trace::Call *call;
while ((call = p.parse_call())) {
- if (calls.contains(*call)) {
+ if (calls.contains(*call) &&
+ (thread == -1 || call->thread_id == thread)) {
writer.writeCall(call);
}
delete call;