From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> To: igt-dev@lists.freedesktop.org Cc: Intel-gfx@lists.freedesktop.org Subject: [Intel-gfx] [PATCH i-g-t 1/3] intel_gpu_top: Wrap interactive header Date: Wed, 10 Feb 2021 09:37:54 +0000 [thread overview] Message-ID: <20210210093756.61424-1-tvrtko.ursulin@linux.intel.com> (raw) From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Slight improvement with regards to wrapping header components to fit console width. If a single element is wider than max it can still overflow but it should now work better for practical console widths. Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> --- tools/intel_gpu_top.c | 81 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 68 insertions(+), 13 deletions(-) diff --git a/tools/intel_gpu_top.c b/tools/intel_gpu_top.c index 21084185d896..63ef77056341 100644 --- a/tools/intel_gpu_top.c +++ b/tools/intel_gpu_top.c @@ -1461,6 +1461,41 @@ static bool print_groups(struct cnt_group **groups) return print_data; } +static int __attribute__ ((format(__printf__, 6, 7))) +print_header_token(const char *cont, int lines, int con_w, int con_h, int *rem, + const char *fmt, ...) +{ + const char *indent = "\n "; + char buf[256]; + va_list args; + int ret; + + if (lines >= con_h) + return lines; + + va_start(args, fmt); + ret = vsnprintf(buf, sizeof(buf), fmt, args); + assert(ret < sizeof(buf)); + va_end(args); + + ret = (cont ? strlen(cont) : 0) + strlen(buf); + *rem -= ret; + if (*rem < 0) { + if (++lines >= con_h) + return lines; + + *rem = con_w - ret - strlen(indent); + cont = indent; + } + + if (cont) + ret = printf("%s%s", cont, buf); + else + ret = printf("%s", buf); + + return lines; +} + static const char *header_msg; static int @@ -1540,23 +1575,43 @@ print_header(const struct igt_device_card *card, *consumed = print_groups(groups); if (output_mode == INTERACTIVE) { + int rem = con_w; + printf("\033[H\033[J"); - if (lines++ < con_h) - printf("intel-gpu-top: %s @ %s\n", - codename, card->card); - if (lines++ < con_h) { - printf("%s/%s MHz; %s%% RC6; ", - freq_items[1].buf, freq_items[0].buf, - rc6_items[0].buf); - if (engines->r_gpu.present) { - printf("%s/%s W; ", - power_items[0].buf, - power_items[1].buf); - } - printf("%s irqs/s\n", irq_items[0].buf); + lines = print_header_token(NULL, lines, con_w, con_h, &rem, + "intel-gpu-top:"); + + lines = print_header_token(" ", lines, con_w, con_h, &rem, + "%s", codename); + + lines = print_header_token(" @ ", lines, con_w, con_h, &rem, + "%s", card->card); + + lines = print_header_token(" - ", lines, con_w, con_h, &rem, + "%s/%s MHz", + freq_items[1].buf, + freq_items[0].buf); + + lines = print_header_token("; ", lines, con_w, con_h, &rem, + "%s%% RC6", + rc6_items[0].buf); + + if (engines->r_gpu.present) { + lines = print_header_token("; ", lines, con_w, con_h, + &rem, + "%s/%s W", + power_items[0].buf, + power_items[1].buf); } + lines = print_header_token("; ", lines, con_w, con_h, &rem, + "%s irqs/s", + irq_items[0].buf); + + if (lines++ < con_h) + printf("\n"); + if (lines++ < con_h) { if (header_msg) { printf(" >>> %s\n", header_msg); -- 2.27.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx
WARNING: multiple messages have this Message-ID (diff)
From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> To: igt-dev@lists.freedesktop.org Cc: Intel-gfx@lists.freedesktop.org, Tvrtko Ursulin <tvrtko.ursulin@intel.com> Subject: [igt-dev] [PATCH i-g-t 1/3] intel_gpu_top: Wrap interactive header Date: Wed, 10 Feb 2021 09:37:54 +0000 [thread overview] Message-ID: <20210210093756.61424-1-tvrtko.ursulin@linux.intel.com> (raw) From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Slight improvement with regards to wrapping header components to fit console width. If a single element is wider than max it can still overflow but it should now work better for practical console widths. Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> --- tools/intel_gpu_top.c | 81 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 68 insertions(+), 13 deletions(-) diff --git a/tools/intel_gpu_top.c b/tools/intel_gpu_top.c index 21084185d896..63ef77056341 100644 --- a/tools/intel_gpu_top.c +++ b/tools/intel_gpu_top.c @@ -1461,6 +1461,41 @@ static bool print_groups(struct cnt_group **groups) return print_data; } +static int __attribute__ ((format(__printf__, 6, 7))) +print_header_token(const char *cont, int lines, int con_w, int con_h, int *rem, + const char *fmt, ...) +{ + const char *indent = "\n "; + char buf[256]; + va_list args; + int ret; + + if (lines >= con_h) + return lines; + + va_start(args, fmt); + ret = vsnprintf(buf, sizeof(buf), fmt, args); + assert(ret < sizeof(buf)); + va_end(args); + + ret = (cont ? strlen(cont) : 0) + strlen(buf); + *rem -= ret; + if (*rem < 0) { + if (++lines >= con_h) + return lines; + + *rem = con_w - ret - strlen(indent); + cont = indent; + } + + if (cont) + ret = printf("%s%s", cont, buf); + else + ret = printf("%s", buf); + + return lines; +} + static const char *header_msg; static int @@ -1540,23 +1575,43 @@ print_header(const struct igt_device_card *card, *consumed = print_groups(groups); if (output_mode == INTERACTIVE) { + int rem = con_w; + printf("\033[H\033[J"); - if (lines++ < con_h) - printf("intel-gpu-top: %s @ %s\n", - codename, card->card); - if (lines++ < con_h) { - printf("%s/%s MHz; %s%% RC6; ", - freq_items[1].buf, freq_items[0].buf, - rc6_items[0].buf); - if (engines->r_gpu.present) { - printf("%s/%s W; ", - power_items[0].buf, - power_items[1].buf); - } - printf("%s irqs/s\n", irq_items[0].buf); + lines = print_header_token(NULL, lines, con_w, con_h, &rem, + "intel-gpu-top:"); + + lines = print_header_token(" ", lines, con_w, con_h, &rem, + "%s", codename); + + lines = print_header_token(" @ ", lines, con_w, con_h, &rem, + "%s", card->card); + + lines = print_header_token(" - ", lines, con_w, con_h, &rem, + "%s/%s MHz", + freq_items[1].buf, + freq_items[0].buf); + + lines = print_header_token("; ", lines, con_w, con_h, &rem, + "%s%% RC6", + rc6_items[0].buf); + + if (engines->r_gpu.present) { + lines = print_header_token("; ", lines, con_w, con_h, + &rem, + "%s/%s W", + power_items[0].buf, + power_items[1].buf); } + lines = print_header_token("; ", lines, con_w, con_h, &rem, + "%s irqs/s", + irq_items[0].buf); + + if (lines++ < con_h) + printf("\n"); + if (lines++ < con_h) { if (header_msg) { printf(" >>> %s\n", header_msg); -- 2.27.0 _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev
next reply other threads:[~2021-02-10 9:38 UTC|newest] Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-02-10 9:37 Tvrtko Ursulin [this message] 2021-02-10 9:37 ` [igt-dev] [PATCH i-g-t 1/3] intel_gpu_top: Wrap interactive header Tvrtko Ursulin 2021-02-10 9:37 ` [Intel-gfx] [PATCH i-g-t 2/3] intel_gpu_top: Aggregate clients by PID by default Tvrtko Ursulin 2021-02-10 9:44 ` Tvrtko Ursulin 2021-02-10 10:35 ` [Intel-gfx] [igt-dev] " Chris Wilson 2021-02-10 10:35 ` Chris Wilson 2021-02-10 10:55 ` [Intel-gfx] " Tvrtko Ursulin 2021-02-10 10:55 ` Tvrtko Ursulin 2021-02-10 11:03 ` [Intel-gfx] " Chris Wilson 2021-02-10 10:53 ` [Intel-gfx] " Tvrtko Ursulin 2021-02-10 11:06 ` Chris Wilson 2021-02-10 11:06 ` [igt-dev] " Chris Wilson 2021-02-10 11:12 ` Tvrtko Ursulin 2021-02-10 11:12 ` [igt-dev] " Tvrtko Ursulin 2021-02-10 9:37 ` [Intel-gfx] [PATCH i-g-t 3/3] intel_gpu_top: Interactive help screen Tvrtko Ursulin 2021-02-10 9:37 ` [igt-dev] " Tvrtko Ursulin 2021-02-10 10:36 ` [Intel-gfx] " Chris Wilson 2021-02-10 10:36 ` Chris Wilson 2021-02-10 10:37 ` [Intel-gfx] [PATCH i-g-t 1/3] intel_gpu_top: Wrap interactive header Chris Wilson 2021-02-10 11:35 ` [igt-dev] ✗ Fi.CI.BUILD: failure for series starting with [i-g-t,1/3] intel_gpu_top: Wrap interactive header (rev4) Patchwork
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210210093756.61424-1-tvrtko.ursulin@linux.intel.com \ --to=tvrtko.ursulin@linux.intel.com \ --cc=Intel-gfx@lists.freedesktop.org \ --cc=igt-dev@lists.freedesktop.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.