Messages in this thread | | | Subject | Re: [PATCH v2] perf diff: Report noisy for cycles diff | From | "Jin, Yao" <> | Date | Tue, 6 Aug 2019 19:32:27 +0800 |
| |
On 8/6/2019 4:34 PM, Jiri Olsa wrote: > On Thu, Jul 25, 2019 at 06:14:32AM +0800, Jin Yao wrote: > > SNIP > >> static int cycles_printf(struct hist_entry *he, struct hist_entry *pair, >> - struct perf_hpp *hpp, int width) >> + struct perf_hpp *hpp, int width __maybe_unused) >> { >> struct block_hist *bh = container_of(he, struct block_hist, he); >> struct block_hist *bh_pair = container_of(pair, struct block_hist, he); >> struct hist_entry *block_he; >> struct block_info *bi; >> - char buf[128]; >> + char buf[128], spark[32]; >> char *start_line, *end_line; >> + int ret = 0, pad; >> + char pfmt[20] = " "; >> + double d; >> >> block_he = hists__get_entry(&bh_pair->block_hists, bh->block_idx); >> if (!block_he) { >> @@ -1350,18 +1375,56 @@ static int cycles_printf(struct hist_entry *he, struct hist_entry *pair, >> end_line = map__srcline(he->ms.map, bi->sym->start + bi->end, >> he->ms.sym); >> >> - if ((start_line != SRCLINE_UNKNOWN) && (end_line != SRCLINE_UNKNOWN)) { >> - scnprintf(buf, sizeof(buf), "[%s -> %s] %4ld", >> - start_line, end_line, block_he->diff.cycles); >> + if (show_noisy) { >> + ret = print_stat_spark(spark, sizeof(spark), >> + &block_he->diff.stats); >> + d = rel_stddev_stats(stddev_stats(&block_he->diff.stats), >> + avg_stats(&block_he->diff.stats)); >> + >> + if ((start_line != SRCLINE_UNKNOWN) && >> + (end_line != SRCLINE_UNKNOWN)) { >> + scnprintf(buf, sizeof(buf), >> + "[%s -> %s] %4ld %s%5.1f%% %s", >> + start_line, end_line, block_he->diff.cycles, >> + "\u00B1", d, spark); >> + } else { >> + scnprintf(buf, sizeof(buf), >> + "[%7lx -> %7lx] %4ld %s%5.1f%% %s", >> + bi->start, bi->end, block_he->diff.cycles, >> + "\u00B1", d, spark); >> + } >> + >> + if (ret > 0) { >> + pad = 8 - ((ret - 1) / 3); >> + scnprintf(pfmt, 20, "%%%ds", >> + 81 + (2 * ((ret - 1) / 3)) - pad); >> + ret = scnprintf(hpp->buf, hpp->size, pfmt, buf); >> + if (pad > 0) { >> + ret += scnprintf(hpp->buf + ret, >> + hpp->size - ret, >> + "%-*s", pad, " "); >> + } >> + } else { >> + ret = scnprintf(hpp->buf, hpp->size, "%73s", buf); >> + ret += scnprintf(hpp->buf + ret, hpp->size - ret, >> + "%-*s", 8, " "); >> + } > > > hum, why isn't the histogram in the separate column? > looks like there's lot of duplicated code in here > > thanks, > jirka >
Yes, it'd better add the histogram in a separate column. But it's not very easy to add that. Anyway let me double check if I can find a less complicated method for that.
Thanks Jin Yao
>> } else { >> - scnprintf(buf, sizeof(buf), "[%7lx -> %7lx] %4ld", >> - bi->start, bi->end, block_he->diff.cycles); >> + if ((start_line != SRCLINE_UNKNOWN) && >> + (end_line != SRCLINE_UNKNOWN)) { >> + scnprintf(buf, sizeof(buf), "[%s -> %s] %4ld", >> + start_line, end_line, block_he->diff.cycles); >> + } else { >> + scnprintf(buf, sizeof(buf), "[%7lx -> %7lx] %4ld", >> + bi->start, bi->end, block_he->diff.cycles); >> + } >> + >> + ret = scnprintf(hpp->buf, hpp->size, "%*s", width, buf); >> } >> >> free_srcline(start_line); >> free_srcline(end_line); >> - >> - return scnprintf(hpp->buf, hpp->size, "%*s", width, buf); >> + return ret; >> } > > SNIP >
| |