Em Thu, May 17, 2018 at 10:58:38PM +0800, Jin Yao escreveu: > In perf annotate view, a new hotkey 'c' is created for > showing the max/min cycles.
I just changed everything from "max/min" to "min/max", as it looked strange print the max first, thanks, applying. - Arnaldo > For example, when press 'c', the annotate view is: > > Percent│ IPC Cycle(max/min) > │ > │ > │ Disassembly of section .text: > │ > │ 000000000003aab0 <random@@GLIBC_2.2.5>: > 8.22 │3.92 sub $0x18,%rsp > │3.92 mov $0x1,%esi > │3.92 xor %eax,%eax > │3.92 cmpl > $0x0,argp_program_version_hook@@G > │3.92 1(2/1) ↓ je 20 > │ lock cmpxchg > %esi,__abort_msg@@GLIBC_P > │ ↓ jne 29 > │ ↓ jmp 43 > │1.10 20: cmpxchg > %esi,__abort_msg@@GLIBC_PRIVATE+ > 8.93 │1.10 1(5/1) ↓ je 43 > > When press 'c' again, the annotate view is switched back: > > Percent│ IPC Cycle > │ > │ > │ Disassembly of section .text: > │ > │ 000000000003aab0 <random@@GLIBC_2.2.5>: > 8.22 │3.92 sub $0x18,%rsp > │3.92 mov $0x1,%esi > │3.92 xor %eax,%eax > │3.92 cmpl > $0x0,argp_program_version_hook@@GLIBC_2.2.5+0x > │3.92 1 ↓ je 20 > │ lock cmpxchg %esi,__abort_msg@@GLIBC_PRIVATE+0x8a0 > │ ↓ jne 29 > │ ↓ jmp 43 > │1.10 20: cmpxchg %esi,__abort_msg@@GLIBC_PRIVATE+0x8a0 > 8.93 │1.10 1 ↓ je 43 > > Signed-off-by: Jin Yao <yao....@linux.intel.com> > --- > tools/perf/ui/browsers/annotate.c | 8 ++++++++ > tools/perf/util/annotate.c | 37 +++++++++++++++++++++++++++++++------ > tools/perf/util/annotate.h | 7 ++++++- > 3 files changed, 45 insertions(+), 7 deletions(-) > > diff --git a/tools/perf/ui/browsers/annotate.c > b/tools/perf/ui/browsers/annotate.c > index 3781d74..f202a3f 100644 > --- a/tools/perf/ui/browsers/annotate.c > +++ b/tools/perf/ui/browsers/annotate.c > @@ -695,6 +695,7 @@ static int annotate_browser__run(struct annotate_browser > *browser, > "O Bump offset level (jump targets -> +call -> all > -> cycle thru)\n" > "s Toggle source code view\n" > "t Circulate percent, total period, samples view\n" > + "c Show max/min cycle\n" > "/ Search string\n" > "k Toggle line numbers\n" > "P Print to [symbol_name].annotation file.\n" > @@ -791,6 +792,13 @@ static int annotate_browser__run(struct annotate_browser > *browser, > notes->options->show_total_period = true; > annotation__update_column_widths(notes); > continue; > + case 'c': > + if (notes->options->show_maxmin_cycle) > + notes->options->show_maxmin_cycle = false; > + else > + notes->options->show_maxmin_cycle = true; > + annotation__update_column_widths(notes); > + continue; > case K_LEFT: > case K_ESC: > case 'q': > diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c > index 934a172..17fff6f 100644 > --- a/tools/perf/util/annotate.c > +++ b/tools/perf/util/annotate.c > @@ -2495,13 +2495,38 @@ static void __annotation_line__write(struct > annotation_line *al, struct annotati > else > obj__printf(obj, "%*s ", ANNOTATION__IPC_WIDTH - 1, > "IPC"); > > - if (al->cycles) > - obj__printf(obj, "%*" PRIu64 " ", > + if (!notes->options->show_maxmin_cycle) { > + if (al->cycles) > + obj__printf(obj, "%*" PRIu64 " ", > ANNOTATION__CYCLES_WIDTH - 1, > al->cycles); > - else if (!show_title) > - obj__printf(obj, "%*s", ANNOTATION__CYCLES_WIDTH, " "); > - else > - obj__printf(obj, "%*s ", ANNOTATION__CYCLES_WIDTH - 1, > "Cycle"); > + else if (!show_title) > + obj__printf(obj, "%*s", > + ANNOTATION__CYCLES_WIDTH, " "); > + else > + obj__printf(obj, "%*s ", > + ANNOTATION__CYCLES_WIDTH - 1, > + "Cycle"); > + } else { > + if (al->cycles) { > + char str[32]; > + > + scnprintf(str, sizeof(str), > + "%" PRIu64 "(%" PRIu64 "/%" PRIu64 ")", > + al->cycles, al->cycles_max, > + al->cycles_min); > + > + obj__printf(obj, "%*s ", > + ANNOTATION__MAXMIN_CYCLES_WIDTH - 1, > + str); > + } else if (!show_title) > + obj__printf(obj, "%*s", > + ANNOTATION__MAXMIN_CYCLES_WIDTH, > + " "); > + else > + obj__printf(obj, "%*s ", > + ANNOTATION__MAXMIN_CYCLES_WIDTH - 1, > + "Cycle(max/min)"); > + } > } > > obj__printf(obj, " "); > diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h > index d50363d..4cafd63 100644 > --- a/tools/perf/util/annotate.h > +++ b/tools/perf/util/annotate.h > @@ -61,6 +61,7 @@ bool ins__is_fused(struct arch *arch, const char *ins1, > const char *ins2); > > #define ANNOTATION__IPC_WIDTH 6 > #define ANNOTATION__CYCLES_WIDTH 6 > +#define ANNOTATION__MAXMIN_CYCLES_WIDTH 19 > > struct annotation_options { > bool hide_src_code, > @@ -69,7 +70,8 @@ struct annotation_options { > show_linenr, > show_nr_jumps, > show_nr_samples, > - show_total_period; > + show_total_period, > + show_maxmin_cycle; > u8 offset_level; > }; > > @@ -243,6 +245,9 @@ struct annotation { > > static inline int annotation__cycles_width(struct annotation *notes) > { > + if (notes->have_cycles && notes->options->show_maxmin_cycle) > + return ANNOTATION__IPC_WIDTH + ANNOTATION__MAXMIN_CYCLES_WIDTH; > + > return notes->have_cycles ? ANNOTATION__IPC_WIDTH + > ANNOTATION__CYCLES_WIDTH : 0; > } > > -- > 2.7.4