summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2009-12-08 22:38:18 -0800
committerCarl Worth <cworth@cworth.org>2009-12-10 14:02:25 -0800
commitb4b8aafc61f48be9c1bfef7cf2c055201aeb4711 (patch)
tree4c4b1ab6d7977187e49ee15b45b94c04d2997de9
parent94a180c0c95d70983ca15ada1de5d8624a68211e (diff)
Limit printing to terminal height in intel_gpu_top.
When using intel_gpu_top in a small terminal, the most important information (ring idle/busy units) scrolls off the top of the screen. This patch limits the number of lines printed to the terminal height so that the most idle units (at the bottom) are truncated instead. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
-rw-r--r--tools/intel_gpu_top.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/tools/intel_gpu_top.c b/tools/intel_gpu_top.c
index d314edaf..9ef3ae4d 100644
--- a/tools/intel_gpu_top.c
+++ b/tools/intel_gpu_top.c
@@ -29,6 +29,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <err.h>
+#include <sys/ioctl.h>
#include "intel_gpu_tools.h"
#include "instdone.h"
@@ -257,6 +258,13 @@ int main(int argc, char **argv)
qsort(top_bits_sorted, num_instdone_bits,
sizeof(struct top_bit *), top_bits_sort);
+ /* Limit the number of lines printed to the terminal height so the
+ * most important info (at the top) will stay on screen. */
+ unsigned short int max_lines = -1;
+ struct winsize ws;
+ if (ioctl(0, TIOCGWINSZ, &ws) != -1)
+ max_lines = ws.ws_row - 6; /* exclude header lines */
+
printf("%s", clear_screen);
print_clock_info();
@@ -275,11 +283,13 @@ int main(int argc, char **argv)
if (top_bits_sorted[i]->count < 1)
break;
- percent = top_bits_sorted[i]->count / SAMPLES_TO_PERCENT_RATIO;
- len = printf("%30s: %3d%%: ",
- top_bits_sorted[i]->bit->name,
- percent);
- print_percentage_bar (percent, len);
+ if (i < max_lines) {
+ percent = top_bits_sorted[i]->count / SAMPLES_TO_PERCENT_RATIO;
+ len = printf("%30s: %3d%%: ",
+ top_bits_sorted[i]->bit->name,
+ percent);
+ print_percentage_bar (percent, len);
+ }
top_bits_sorted[i]->count = 0;
}