intel_gpu_top: suport command line parameters and variable samples per

second

This patch adds support for getopt, and adds two default parameters to it:
-h to show usage notes; and -s to allow user to define number of samples
to acquire per second.

Manpage documentation is also adjusted accordingly.

Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
This commit is contained in:
Eugeni Dodonov 2011-09-05 16:23:11 -03:00
parent 6194c75c8f
commit 09e4b0cd26
2 changed files with 55 additions and 4 deletions

View File

@ -4,11 +4,20 @@
.SH NAME
intel_gpu_top \- Display a top-like summary of Intel GPU usage
.SH SYNOPSIS
.nf
.B intel_gpu_top
.B intel_gpu_top [ parameters ]
.SH DESCRIPTION
.B intel_gpu_top
is a tool to display usage information of an Intel GPU. It requires root
privilege to map the graphics device.
.SS Options
.TP
.B -s [samples per second]
number of samples to acquire per second
.TP
.B -h
show usage notes
.PP
Note that idle units are not
displayed, so an entirely idle GPU will only display the ring status and

View File

@ -392,6 +392,23 @@ static void ring_print(struct ring *ring, unsigned long samples_per_sec)
(int)((ring->full / samples_to_percent_ratio) / ring->size));
}
static void
usage(const char *appname)
{
printf("intel_gpu_top - Display a top-like summary of Intel GPU usage\n"
"\n"
"usage: %s [parameters]\n"
"\n"
"The following parameters apply:\n"
"[-s <samples>] samples per seconds (default %d)\n"
"[-h] show this help screen\n"
"\n",
appname,
SAMPLES_PER_SEC
);
return;
}
int main(int argc, char **argv)
{
struct pci_device *pci_dev;
@ -408,7 +425,32 @@ int main(int argc, char **argv)
.name = "blitter",
.mmio = 0x22030,
};
int i;
int i, ch;
int samples_per_sec = SAMPLES_PER_SEC;
/* Parse options? */
while ((ch = getopt(argc, argv, "s:h")) != -1)
{
switch (ch) {
case 's': samples_per_sec = atoi(optarg);
if (samples_per_sec < 100) {
fprintf(stderr, "Error: samples per second must be >= 100\n");
exit(1);
}
break;
case 'h':
usage(argv[0]);
exit(0);
break;
default:
fprintf(stderr, "Invalid flag %c!\n", (char)optopt);
usage(argv[0]);
exit(1);
break;
}
}
argc -= optind;
argv += optind;
pci_dev = intel_get_pci_device();
devid = pci_dev->device_id;
@ -432,8 +474,8 @@ int main(int argc, char **argv)
for (;;) {
int j;
unsigned long long t1, ti, tf;
unsigned long long def_sleep = 1000000 / SAMPLES_PER_SEC;
unsigned long long last_samples_per_sec = SAMPLES_PER_SEC;
unsigned long long def_sleep = 1000000 / samples_per_sec;
unsigned long long last_samples_per_sec = samples_per_sec;
char clear_screen[] = {0x1b, '[', 'H',
0x1b, '[', 'J',
0x0};
@ -447,7 +489,7 @@ int main(int argc, char **argv)
ring_reset(&bsd6_ring);
ring_reset(&blt_ring);
for (i = 0; i < SAMPLES_PER_SEC; i++) {
for (i = 0; i < samples_per_sec; i++) {
long long interval;
ti = gettime();
if (IS_965(devid)) {