perf top: Improve the autosizing of column lenghts
When profiling C++ workloads the symbol name length can be really big, so cap it before it garbles the result. This builds upon the autosizing already present where we choose to use the short, basename of DSOs instead of its long, full pathname. Reported-by: Pavel Krauz <krauz@cngroup.cz> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frédéric Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> LKML-Reference: <1268676230-9261-1-git-send-email-acme@infradead.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
committed by
Ingo Molnar
parent
fc6ceea045
commit
b63be8d7be
@ -455,7 +455,7 @@ static void print_sym_table(void)
|
||||
struct sym_entry *syme, *n;
|
||||
struct rb_root tmp = RB_ROOT;
|
||||
struct rb_node *nd;
|
||||
int sym_width = 0, dso_width = 0, max_dso_width;
|
||||
int sym_width = 0, dso_width = 0, dso_short_width;
|
||||
const int win_width = winsize.ws_col - 1;
|
||||
|
||||
samples = userspace_samples = 0;
|
||||
@ -545,15 +545,20 @@ static void print_sym_table(void)
|
||||
if (syme->map->dso->long_name_len > dso_width)
|
||||
dso_width = syme->map->dso->long_name_len;
|
||||
|
||||
if (syme->map->dso->short_name_len > dso_short_width)
|
||||
dso_short_width = syme->map->dso->short_name_len;
|
||||
|
||||
if (syme->name_len > sym_width)
|
||||
sym_width = syme->name_len;
|
||||
}
|
||||
|
||||
printed = 0;
|
||||
|
||||
max_dso_width = winsize.ws_col - sym_width - 29;
|
||||
if (dso_width > max_dso_width)
|
||||
dso_width = max_dso_width;
|
||||
if (sym_width + dso_width > winsize.ws_col - 29) {
|
||||
dso_width = dso_short_width;
|
||||
if (sym_width + dso_width > winsize.ws_col - 29)
|
||||
sym_width = winsize.ws_col - dso_width - 29;
|
||||
}
|
||||
putchar('\n');
|
||||
if (nr_counters == 1)
|
||||
printf(" samples pcnt");
|
||||
|
Reference in New Issue
Block a user