[PATCH i-g-t v2 20/21] gputop: Allow to set delay interval
Lucas De Marchi
lucas.demarchi at intel.com
Tue Apr 23 23:44:30 UTC 2024
Like `top` and `htop`, allow to pass -d, --delay =SEC[.TENTHS] as
argument.
Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
---
lib/igt_core.h | 1 +
tools/gputop.c | 21 +++++++++++++++++++--
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/lib/igt_core.h b/lib/igt_core.h
index 26bb0cb68..084d94da7 100644
--- a/lib/igt_core.h
+++ b/lib/igt_core.h
@@ -1489,6 +1489,7 @@ void igt_kmsg(const char *format, ...);
#define MSEC_PER_SEC (1000)
#define USEC_PER_SEC (1000*MSEC_PER_SEC)
+#define USEC_PER_DECISEC (100*MSEC_PER_SEC)
#define NSEC_PER_SEC (1000*USEC_PER_SEC)
#define for_if(expr__) if (!(expr__)) {} else
diff --git a/tools/gputop.c b/tools/gputop.c
index e99aa56e5..80481f738 100644
--- a/tools/gputop.c
+++ b/tools/gputop.c
@@ -26,6 +26,7 @@
#include <sys/sysmacros.h>
#include <stdbool.h>
+#include "igt_core.h"
#include "igt_drm_clients.h"
#include "igt_drm_fdinfo.h"
#include "drmtest.h"
@@ -302,6 +303,7 @@ static void clrscr(void)
struct gputop_args {
long n_iter;
+ unsigned long delay_usec;
};
static void help(void)
@@ -310,15 +312,17 @@ static void help(void)
"\t%s [options]\n\n"
"Options:\n"
"\t-h, --help show this help\n"
+ "\t-d, --delay =SEC[.TENTHS] iterative delay as SECS [.TENTHS]\n"
"\t-n, --iterations =NUMBER number of executions\n"
, program_invocation_short_name);
}
static int parse_args(int argc, char * const argv[], struct gputop_args *args)
{
- static const char cmdopts_s[] = "hn:";
+ static const char cmdopts_s[] = "hn:d:";
static const struct option cmdopts[] = {
{"help", no_argument, 0, 'h'},
+ {"delay", required_argument, 0, 'd'},
{"iterations", required_argument, 0, 'n'},
{ }
};
@@ -326,9 +330,11 @@ static int parse_args(int argc, char * const argv[], struct gputop_args *args)
/* defaults */
memset(args, 0, sizeof(*args));
args->n_iter = -1;
+ args->delay_usec = 2 * USEC_PER_SEC;
for (;;) {
int c, idx = 0;
+ char *end_ptr = NULL;
c = getopt_long(argc, argv, cmdopts_s, cmdopts, &idx);
if (c == -1)
@@ -338,6 +344,16 @@ static int parse_args(int argc, char * const argv[], struct gputop_args *args)
case 'n':
args->n_iter = strtol(optarg, NULL, 10);
break;
+ case 'd':
+ args->delay_usec = strtoul(optarg, &end_ptr, 10) * USEC_PER_SEC;
+ if (*end_ptr == '.')
+ args->delay_usec += strtoul(end_ptr + 1, &end_ptr, 10) * USEC_PER_DECISEC;
+
+ if (!args->delay_usec) {
+ fprintf(stderr, "Invalid delay value: %s\n", optarg);
+ return -1;
+ }
+ break;
case 'h':
help();
return 0;
@@ -353,7 +369,7 @@ static int parse_args(int argc, char * const argv[], struct gputop_args *args)
int main(int argc, char **argv)
{
struct gputop_args args;
- unsigned int period_us = 2e6;
+ unsigned int period_us;
struct igt_drm_clients *clients = NULL;
int con_w = -1, con_h = -1;
int ret;
@@ -366,6 +382,7 @@ int main(int argc, char **argv)
return EXIT_SUCCESS;
n = args.n_iter;
+ period_us = args.delay_usec;
clients = igt_drm_clients_init(NULL);
if (!clients)
--
2.43.0
More information about the igt-dev
mailing list