| From e0cdd191fd62e11f8e52d3404a04d72b610d63f6 Mon Sep 17 00:00:00 2001 |
| From: Jin Yao <yao.jin@linux.intel.com> |
| Date: Fri, 13 Mar 2020 21:46:07 +0800 |
| Subject: [PATCH] perf report: Fix no branch type statistics report issue |
| |
| commit c3b10649a80e9da2892c1fd3038c53abd57588f6 upstream. |
| |
| Previously we could get the report of branch type statistics. |
| |
| For example: |
| |
| # perf record -j any,save_type ... |
| # t perf report --stdio |
| |
| # |
| # Branch Statistics: |
| # |
| COND_FWD: 40.6% |
| COND_BWD: 4.1% |
| CROSS_4K: 24.7% |
| CROSS_2M: 12.3% |
| COND: 44.7% |
| UNCOND: 0.0% |
| IND: 6.1% |
| CALL: 24.5% |
| RET: 24.7% |
| |
| But now for the recent perf, it can't report the branch type statistics. |
| |
| It's a regression issue caused by commit 40c39e304641 ("perf report: Fix |
| a no annotate browser displayed issue"), which only counts the branch |
| type statistics for browser mode. |
| |
| This patch moves the branch_type_count() outside of ui__has_annotation() |
| checking, then branch type statistics can work for stdio mode. |
| |
| Fixes: 40c39e304641 ("perf report: Fix a no annotate browser displayed issue") |
| Signed-off-by: Jin Yao <yao.jin@linux.intel.com> |
| Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> |
| Cc: Andi Kleen <ak@linux.intel.com> |
| Cc: Jiri Olsa <jolsa@kernel.org> |
| Cc: Kan Liang <kan.liang@linux.intel.com> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Link: http://lore.kernel.org/lkml/20200313134607.12873-1-yao.jin@linux.intel.com |
| Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c |
| index 1b63dc0d8257..3aaa1463ff75 100644 |
| --- a/tools/perf/builtin-report.c |
| +++ b/tools/perf/builtin-report.c |
| @@ -170,24 +170,23 @@ static int hist_iter__branch_callback(struct hist_entry_iter *iter, |
| { |
| struct hist_entry *he = iter->he; |
| struct report *rep = arg; |
| - struct branch_info *bi; |
| + struct branch_info *bi = he->branch_info; |
| struct perf_sample *sample = iter->sample; |
| struct perf_evsel *evsel = iter->evsel; |
| int err; |
| |
| + branch_type_count(&rep->brtype_stat, &bi->flags, |
| + bi->from.addr, bi->to.addr); |
| + |
| if (!ui__has_annotation() && !rep->symbol_ipc) |
| return 0; |
| |
| - bi = he->branch_info; |
| err = addr_map_symbol__inc_samples(&bi->from, sample, evsel); |
| if (err) |
| goto out; |
| |
| err = addr_map_symbol__inc_samples(&bi->to, sample, evsel); |
| |
| - branch_type_count(&rep->brtype_stat, &bi->flags, |
| - bi->from.addr, bi->to.addr); |
| - |
| out: |
| return err; |
| } |
| -- |
| 2.7.4 |
| |