diff mbox

[2/6] intel_gpu_top: suport command line parameters and variable samples per second

Message ID 1315253973-18950-3-git-send-email-eugeni@dodonov.net (mailing list archive)
State New, archived
Headers show

Commit Message

Eugeni Dodonov Sept. 5, 2011, 8:19 p.m. UTC
From: Eugeni Dodonov <eugeni.dodonov@intel.com>

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>
---
 man/intel_gpu_top.1   |    9 ++++++++
 tools/intel_gpu_top.c |   52 +++++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 57 insertions(+), 4 deletions(-)

Comments

Chris Wilson Sept. 5, 2011, 9:44 p.m. UTC | #1
On Mon,  5 Sep 2011 17:19:29 -0300, Eugeni Dodonov <eugeni@dodonov.net> wrote:
> From: Eugeni Dodonov <eugeni.dodonov@intel.com>
> 
> 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.

Just a minor style issue, otherwise it looks good. All I need is
someway to correlate GPU activity with batches (and especially the
contents of those batches) and with even higher level code and then I'd
be happy. Oh, and integrated with a timeline of CPU activity, of course.
:-)
 
> +	/* Parse options? */
> +	while ((ch = getopt(argc, argv, "s:h")) != -1)
> +	{
> +		switch (ch)
> +		{
> +			case 's': samples_per_sec = atoi(optarg);

In the modules we own, we have adopted the kernel CODING_STYLE as our
standard. 8 space indents, 80 cols line (except where readibility is
improved by going over), braces on the same line as the control flow,
/*
 * This style of long comments.
 */
and case statements should being at the same indentation as the switch
and so should the parameters of a multiline function...
-Chris
Eugeni Dodonov Sept. 5, 2011, 10:16 p.m. UTC | #2
On Mon, Sep 5, 2011 at 18:44, Chris Wilson <chris@chris-wilson.co.uk> wrote:

> In the modules we own, we have adopted the kernel CODING_STYLE as our
> standard. 8 space indents, 80 cols line (except where readibility is
> improved by going over), braces on the same line as the control flow,
>

Fixed, thanks!
diff mbox

Patch

diff --git a/man/intel_gpu_top.1 b/man/intel_gpu_top.1
index 79c9c0e..2cbbec9 100644
--- a/man/intel_gpu_top.1
+++ b/man/intel_gpu_top.1
@@ -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
diff --git a/tools/intel_gpu_top.c b/tools/intel_gpu_top.c
index 64ce828..abe9d4b 100644
--- a/tools/intel_gpu_top.c
+++ b/tools/intel_gpu_top.c
@@ -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,34 @@  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 +476,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 +491,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)) {