linux/tools/perf/ui
Namhyung Kim 59c624e239 perf hists browser: Fix percent display in callchains
When there's only a single callchain, perf doesn't print its percentage
in front of the symbols.  This is because it assumes that the percentage
is same as parents.  But if a percent limit is applied, it's possible
that there are actually a couple of child nodes but only one of them is
shown.  In this case it should display the percent to prevent
misunderstanding of its percentage is same as the parent's.

For example, let's see the following callchain.

  $ perf report --no-children --percent-limit 0.01 --tui
  ...
  -    0.06%  sleep    [kernel.vmlinux]    [k] kmem_cache_alloc_trace
       kmem_cache_alloc_trace
     - perf_event_mmap
        - 0.04% mmap_region
             do_mmap_pgoff
           - vm_mmap_pgoff
              + 0.02% sys_mmap_pgoff
              + 0.02% vm_mmap
           + 0.02% mprotect_fixup

Current code omits the percent if 'mmap_region' becomes the only node
when percent limit is set to 0.03%, its percent is not 0.06% but users
will assume it incorrectly.

Before:

  $ perf report --no-children --percent-limit 0.03 --tui
  ...
     0.06%  sleep    [kernel.vmlinux]    [k] kmem_cache_alloc_trace
       kmem_cache_alloc_trace
     - perf_event_mmap
        - mmap_region
          do_mmap_pgoff
          vm_mmap_pgoff

After:

  $ perf report --no-children --percent-limit 0.03 --tui
  ...
     0.06%  sleep    [kernel.vmlinux]    [k] kmem_cache_alloc_trace
       kmem_cache_alloc_trace
     - perf_event_mmap
        - 0.04% mmap_region
             do_mmap_pgoff
             vm_mmap_pgoff

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1453909257-26015-10-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2016-02-01 17:46:27 -03:00
..
browsers perf hists browser: Fix percent display in callchains 2016-02-01 17:46:27 -03:00
gtk perf tools: Skip dynamic fields not defined for current event 2016-01-06 20:11:12 -03:00
stdio perf report: Fix percent display in callchains on --stdio 2016-02-01 17:41:32 -03:00
tui perf ui tui: Register the error callbacks before initializing the widgets 2015-10-22 16:44:17 -03:00
browser.c perf annotate: Rename 'colors.code' to 'colors.jump_arrows' 2016-01-26 11:52:46 -03:00
browser.h perf annotate: Rename 'colors.code' to 'colors.jump_arrows' 2016-01-26 11:52:46 -03:00
Build perf build: Add slang objects building 2015-02-12 11:48:13 -03:00
helpline.c perf ui/helpline: Introduce ui_helpline__vshow() 2012-12-09 08:46:04 -03:00
helpline.h perf ui/helpline: Introduce ui_helpline__vshow() 2012-12-09 08:46:04 -03:00
hist.c perf tools: Add overhead/overhead_children keys defaults via string 2016-01-08 12:58:58 -03:00
keysyms.h perf hists browser: Add option for runtime switching perf data file 2013-02-06 18:09:24 -03:00
libslang.h perf ui browser: Introduce ui_browser__printf() 2015-08-12 10:27:05 -03:00
progress.c perf ui progress: Per progress bar state 2013-10-23 15:40:38 -03:00
progress.h perf tools: Remove EOL whitespaces 2015-01-21 13:24:31 -03:00
setup.c perf tools: Call perf_hpp__init() before setting up GUI browsers 2014-05-21 11:45:35 +02:00
ui.h perf tools: Separate out GTK codes to libperf-gtk.so 2013-10-09 15:55:25 -03:00
util.c perf evsel: Introduce perf_evsel__open_strerror method 2013-01-24 16:40:09 -03:00
util.h perf ui: Introduce struct perf_error_ops 2012-06-19 13:06:18 -03:00