71 lines
1.5 KiB
C
71 lines
1.5 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Copyright (C) 2021 Red Hat Inc, Daniel Bristot de Oliveira <bristot@kernel.org>
|
|
*/
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <pthread.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <errno.h>
|
|
#include <fcntl.h>
|
|
#include <stdio.h>
|
|
|
|
#include "timerlat.h"
|
|
|
|
static void timerlat_usage(int err)
|
|
{
|
|
int i;
|
|
|
|
static const char * const msg[] = {
|
|
"",
|
|
"timerlat version " VERSION,
|
|
"",
|
|
" usage: [rtla] timerlat [MODE] ...",
|
|
"",
|
|
" modes:",
|
|
" top - prints the summary from timerlat tracer",
|
|
" hist - prints a histogram of timer latencies",
|
|
"",
|
|
"if no MODE is given, the top mode is called, passing the arguments",
|
|
NULL,
|
|
};
|
|
|
|
for (i = 0; msg[i]; i++)
|
|
fprintf(stderr, "%s\n", msg[i]);
|
|
exit(err);
|
|
}
|
|
|
|
int timerlat_main(int argc, char *argv[])
|
|
{
|
|
if (argc == 0)
|
|
goto usage;
|
|
|
|
/*
|
|
* if timerlat was called without any argument, run the
|
|
* default cmdline.
|
|
*/
|
|
if (argc == 1) {
|
|
timerlat_top_main(argc, argv);
|
|
exit(0);
|
|
}
|
|
|
|
if ((strcmp(argv[1], "-h") == 0) || (strcmp(argv[1], "--help") == 0)) {
|
|
timerlat_usage(0);
|
|
} else if (strncmp(argv[1], "-", 1) == 0) {
|
|
/* the user skipped the tool, call the default one */
|
|
timerlat_top_main(argc, argv);
|
|
exit(0);
|
|
} else if (strcmp(argv[1], "top") == 0) {
|
|
timerlat_top_main(argc-1, &argv[1]);
|
|
exit(0);
|
|
} else if (strcmp(argv[1], "hist") == 0) {
|
|
timerlat_hist_main(argc-1, &argv[1]);
|
|
exit(0);
|
|
}
|
|
|
|
usage:
|
|
timerlat_usage(1);
|
|
exit(1);
|
|
}
|