perf block-info: Support color ops to print block percents in color
[linux-2.6-microblaze.git] / tools / perf / util / block-info.c
index debb8b1..423ec69 100644 (file)
@@ -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,
@@ -345,7 +350,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;
@@ -353,7 +358,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;