Messages in this thread | | | From | Arnaldo Carvalho de Melo <> | Date | Mon, 9 Mar 2020 10:54:29 -0300 | Subject | Re: [PATCH v6 4/4] perf util: Support color ops to print block percents in color |
| |
Em Sun, Feb 02, 2020 at 10:16:55PM +0800, Jin Yao escreveu: > It would be nice to print the block percents with colors. > > This patch supports the 'Sampled Cycles%' and 'Avg Cycles%' > printed in colors. > > For example, > > perf record -b ... > perf report --total-cycles or perf report --total-cycles --stdio > > percent > 5%, colored in red > percent > 0.5%, colored in green > percent < 0.5%, default color > > v3/v4/v5/v6: > ------------ > No change
Thanks, tested the coloring, all works as advertised, thanks, applied to perf/core, should be in git.kernel.org soon.
- Arnaldo
> v2: > --- > No functional change > > Signed-off-by: Jin Yao <yao.jin@linux.intel.com> > --- > tools/perf/util/block-info.c | 25 +++++++++++++++---------- > 1 file changed, 15 insertions(+), 10 deletions(-) > > diff --git a/tools/perf/util/block-info.c b/tools/perf/util/block-info.c > index e0e56f30e6a6..4268c0ffb77a 100644 > --- a/tools/perf/util/block-info.c > +++ b/tools/perf/util/block-info.c > @@ -181,6 +181,17 @@ static int block_column_width(struct perf_hpp_fmt *fmt, > return block_fmt->width; > } > > +static int color_pct(struct perf_hpp *hpp, int width, double pct) > +{ > +#ifdef HAVE_SLANG_SUPPORT > + if (use_browser) { > + return __hpp__slsmg_color_printf(hpp, "%*.2f%%", > + width - 1, pct); > + } > +#endif > + return hpp_color_scnprintf(hpp, "%*.2f%%", width - 1, pct); > +} > + > static int block_total_cycles_pct_entry(struct perf_hpp_fmt *fmt, > struct perf_hpp *hpp, > struct hist_entry *he) > @@ -188,14 +199,11 @@ static int block_total_cycles_pct_entry(struct perf_hpp_fmt *fmt, > struct block_fmt *block_fmt = container_of(fmt, struct block_fmt, fmt); > struct block_info *bi = he->block_info; > double ratio = 0.0; > - char buf[16]; > > if (block_fmt->total_cycles) > ratio = (double)bi->cycles / (double)block_fmt->total_cycles; > > - sprintf(buf, "%.2f%%", 100.0 * ratio); > - > - return scnprintf(hpp->buf, hpp->size, "%*s", block_fmt->width, buf); > + return color_pct(hpp, block_fmt->width, 100.0 * ratio); > } > > static int64_t block_total_cycles_pct_sort(struct perf_hpp_fmt *fmt, > @@ -248,16 +256,13 @@ static int block_cycles_pct_entry(struct perf_hpp_fmt *fmt, > struct block_info *bi = he->block_info; > double ratio = 0.0; > u64 avg; > - char buf[16]; > > if (block_fmt->block_cycles && bi->num_aggr) { > avg = bi->cycles_aggr / bi->num_aggr; > ratio = (double)avg / (double)block_fmt->block_cycles; > } > > - sprintf(buf, "%.2f%%", 100.0 * ratio); > - > - return scnprintf(hpp->buf, hpp->size, "%*s", block_fmt->width, buf); > + return color_pct(hpp, block_fmt->width, 100.0 * ratio); > } > > static int block_avg_cycles_entry(struct perf_hpp_fmt *fmt, > @@ -344,7 +349,7 @@ static void hpp_register(struct block_fmt *block_fmt, int idx, > > switch (idx) { > case PERF_HPP_REPORT__BLOCK_TOTAL_CYCLES_PCT: > - fmt->entry = block_total_cycles_pct_entry; > + fmt->color = block_total_cycles_pct_entry; > fmt->cmp = block_info__cmp; > fmt->sort = block_total_cycles_pct_sort; > break; > @@ -352,7 +357,7 @@ static void hpp_register(struct block_fmt *block_fmt, int idx, > fmt->entry = block_cycles_lbr_entry; > break; > case PERF_HPP_REPORT__BLOCK_CYCLES_PCT: > - fmt->entry = block_cycles_pct_entry; > + fmt->color = block_cycles_pct_entry; > break; > case PERF_HPP_REPORT__BLOCK_AVG_CYCLES: > fmt->entry = block_avg_cycles_entry; > -- > 2.17.1 >
--
- Arnaldo
| |