perf report: Fix no branch type statistics report issue
authorJin Yao <yao.jin@linux.intel.com>
Fri, 13 Mar 2020 13:46:07 +0000 (21:46 +0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 17 Mar 2020 21:01:40 +0000 (18:01 -0300)
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>
tools/perf/builtin-report.c

index d7c905f..5f4045d 100644 (file)
@@ -186,24 +186,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 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;
 }