Module Name: src Committed By: ryo Date: Fri Dec 16 08:00:48 UTC 2022
Modified Files: src/usr.sbin/tprof: tprof.8 tprof_top.c Log Message: - added 'c' command to tprof-top to show/hide event counter. - column widths were not calculated correctly and sometimes displayed incorrectly. - use putp() for terminfo str. - fix build error with llvm. To generate a diff of this commit: cvs rdiff -u -r1.22 -r1.23 src/usr.sbin/tprof/tprof.8 cvs rdiff -u -r1.5 -r1.6 src/usr.sbin/tprof/tprof_top.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.sbin/tprof/tprof.8 diff -u src/usr.sbin/tprof/tprof.8:1.22 src/usr.sbin/tprof/tprof.8:1.23 --- src/usr.sbin/tprof/tprof.8:1.22 Fri Dec 9 01:59:51 2022 +++ src/usr.sbin/tprof/tprof.8 Fri Dec 16 08:00:47 2022 @@ -1,4 +1,4 @@ -.\" $NetBSD: tprof.8,v 1.22 2022/12/09 01:59:51 ryo Exp $ +.\" $NetBSD: tprof.8,v 1.23 2022/12/16 08:00:47 ryo Exp $ .\" .\" Copyright (c)2011 YAMAMOTO Takashi, .\" All rights reserved. @@ -24,7 +24,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd December 9, 2022 +.Dd December 16, 2022 .Dt TPROF 8 .Os .Sh NAME @@ -175,6 +175,8 @@ These commands are currently recognized: .Bl -tag -width XXcommandsX -offset indent .It Ic a toggle accumurative mode. +.It Ic c +shows/hides the event counters. .It Ic q quit .Nm . Index: src/usr.sbin/tprof/tprof_top.c diff -u src/usr.sbin/tprof/tprof_top.c:1.5 src/usr.sbin/tprof/tprof_top.c:1.6 --- src/usr.sbin/tprof/tprof_top.c:1.5 Fri Dec 9 02:19:07 2022 +++ src/usr.sbin/tprof/tprof_top.c Fri Dec 16 08:00:47 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: tprof_top.c,v 1.5 2022/12/09 02:19:07 ryo Exp $ */ +/* $NetBSD: tprof_top.c,v 1.6 2022/12/16 08:00:47 ryo Exp $ */ /*- * Copyright (c) 2022 Ryo Shimizu <r...@nerv.org> @@ -28,7 +28,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: tprof_top.c,v 1.5 2022/12/09 02:19:07 ryo Exp $"); +__RCSID("$NetBSD: tprof_top.c,v 1.6 2022/12/16 08:00:47 ryo Exp $"); #endif /* not lint */ #include <sys/param.h> @@ -154,10 +154,10 @@ reset_cursor_pos(void) /* cursor_up * n */ if ((p = tigetstr("cuu")) != NULL) { - printf("%s", tparm(p, win.ws_row - 1, 0, 0, 0, 0, 0, 0, 0, 0)); + putp(tparm(p, win.ws_row - 1, 0, 0, 0, 0, 0, 0, 0, 0)); } else if ((p = tigetstr("cuu1")) != NULL) { for (i = win.ws_row - 1; i > 0; i--) - printf("%s", p); + putp(p); } } @@ -170,7 +170,7 @@ clr_to_eol(void) return; if ((p = tigetstr("el")) != NULL) - printf("%s", p); + putp(p); } /* newline, and clearing to end of line if needed */ @@ -288,7 +288,7 @@ sigalrm_handler(int signo) sigalrm = 1; } -static void +__dead static void die(int signo) { tty_restore(); @@ -297,7 +297,7 @@ die(int signo) exit(EXIT_SUCCESS); } -static void __dead +__dead static void die_errc(int status, int code, const char *fmt, ...) { va_list ap; @@ -676,20 +676,21 @@ show_count_per_event(int *lim) do_redraw = true; } } - for (i = 0; i < nevent; i++) { - for (n = 0; n < ncpu; n++) { - l = snprintf(buf, sizeof(buf), "%"PRIu64, - sample_n_per_event_cpu[opt_mode][nevent * n + i]); - if (sample_cpu_width[n] < (u_int)l) { - sample_cpu_width[n] = l; - do_redraw = true; - } + for (n = 0; n < ncpu; n++) { + uint64_t sum = 0; + for (i = 0; i < nevent; i++) + sum += sample_n_per_event_cpu[opt_mode][nevent * n + i]; + l = snprintf(buf, sizeof(buf), "%"PRIu64, sum); + if (sample_cpu_width[n] < (u_int)l) { + sample_cpu_width[n] = l; + do_redraw = true; } } if (do_redraw) { - lim_printf(lim, " Rate %*s Eventname ", - sample_event_width, "Sample#"); + lim_printf(lim, " Rate %*s %-*s", + sample_event_width, "Sample#", + SYMBOL_LEN, "Eventname"); for (n = 0; n < ncpu; n++) { snprintf(buf, sizeof(buf), "CPU%d", n); lim_printf(lim, " %*s", sample_cpu_width[n], buf); @@ -796,8 +797,9 @@ sample_show(void) lim_newline(&lim); if (do_redraw) { - lim_printf(&lim, " Rate %*s Symbol ", - sample_event_width, "Sample#"); + lim_printf(&lim, " Rate %*s %-*s", + sample_event_width, "Sample#", + SYMBOL_LEN, "Symbol"); for (n = 0; n < ncpu; n++) { snprintf(namebuf, sizeof(namebuf), "CPU%d", n); lim_printf(&lim, " %*s", sample_cpu_width[n], namebuf); @@ -944,7 +946,7 @@ parse_event_scale(tprof_param_t *param, return 0; } -void +__dead void tprof_top(int argc, char **argv) { tprof_param_t params[TPROF_MAXCOUNTERS]; @@ -1046,12 +1048,12 @@ tprof_top(int argc, char **argv) printf("collecting samples..."); fflush(stdout); - tprof_bufsize = sizeof(tprof_sample_t) * 8192; + tprof_bufsize = sizeof(tprof_sample_t) * 1024 * 32; tprof_buf = emalloc(tprof_bufsize); do { bool force_update = false; - for (;;) { + while (sigalrm == 0 && !force_update) { fd_set r; int nfound; char c; @@ -1081,6 +1083,12 @@ tprof_top(int argc, char **argv) /* toggle mode */ opt_mode = (opt_mode + 1) % SAMPLE_MODE_NUM; + do_redraw = true; + break; + case 'c': + /* toggle mode */ + opt_showcounter ^= 1; + do_redraw = true; break; case 'q': goto done; @@ -1088,14 +1096,10 @@ tprof_top(int argc, char **argv) sample_reset(true); break; default: - printf("[%02x]", c); - fflush(stdout); + continue; } force_update = true; - continue; } - if (sigalrm != 0 || force_update) - break; if (FD_ISSET(devfd, &r)) { len = read(devfd, tprof_buf, tprof_bufsize);