Currently the percentages of perf-annotate are calculated with number of samples, not the sample period. So fix it to correspond with perf-report using the sample period for the calculation.
Cc: Namhyung Kim <[email protected]> Cc: Jiri Olsa <[email protected]> Signed-off-by: Taeung Song <[email protected]> --- tools/perf/util/annotate.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index d9bdedf..28a6d11 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c @@ -988,7 +988,7 @@ double disasm__calc_percent(struct annotation *notes, int evidx, s64 offset, if (h->total_samples) { sample->nr_samples = hits; sample->period = p; - percent = 100.0 * hits / h->total_samples; + percent = 100.0 * p / h->total_period; } } @@ -1730,8 +1730,9 @@ static int symbol__get_source_line(struct symbol *sym, struct map *map, start = map__rip_2objdump(map, sym->start); for (i = 0; i < len; i++) { - u64 offset, nr_samples; + u64 offset; double percent_max = 0.0; + struct sym_hist_entry sample; src_line->nr_pcnt = nr_pcnt; @@ -1739,15 +1740,15 @@ static int symbol__get_source_line(struct symbol *sym, struct map *map, double percent = 0.0; h = annotation__histogram(notes, evidx + k); - nr_samples = h->addr[i].nr_samples; + sample = h->addr[i]; if (h->total_samples) - percent = 100.0 * nr_samples / h->total_samples; + percent = 100.0 * sample.period / h->total_period; if (percent > percent_max) percent_max = percent; src_line->samples[k].percent = percent; - src_line->samples[k].nr = nr_samples; + src_line->samples[k].nr = sample.nr_samples; } if (percent_max <= 0.5) -- 2.7.4

