• Namhyung Kim's avatar
    perf report: Fix percent display in callchains on --stdio · 7ed5d6e2
    Namhyung Kim authored
    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 -s comm --percent-limit 0.01 --stdio
      ...
         9.95%  swapper
                |
                |--7.57%--intel_idle
                |          cpuidle_enter_state
                |          cpuidle_enter
                |          call_cpuidle
                |          cpu_startup_entry
                |          |
                |          |--4.89%--start_secondary
                |          |
                |           --2.68%--rest_init
                |                     start_kernel
                |                     x86_64_start_reservations
                |                     x86_64_start_kernel
    	    |
    	    |--0.15%--__schedule
    	    |          |
    	    |          |--0.13%--schedule
    	    |          |          schedule_preempt_disable
    	    |          |          cpu_startup_entry
                |          |          |
                |          |          |--0.09%--start_secondary
                |          |          |
                |          |           --0.04%--rest_init
                |          |                     start_kernel
                |          |                     x86_64_start_reservations
                |          |                     x86_64_start_kernel
                |          |
                |           --0.01%--schedule_preempt_disabled
                |                     cpu_startup_entry
      ...
    
    Current code omits the percent if 'intel_idle' becomes the only node
    when percent limit is set to 0.5%, its percent is not 9.95% but users
    will assume it incorrectly.
    
    Before:
    
      $ perf report --percent-limit 0.5 --stdio
      ...
         9.95%  swapper
                |
                ---intel_idle
                   cpuidle_enter_state
                   cpuidle_enter
                   call_cpuidle
                   cpu_startup_entry
                   |
                   |--4.89%--start_secondary
                   |
                    --2.68%--rest_init
                              start_kernel
                              x86_64_start_reservations
                              x86_64_start_kernel
    
    After:
    
      $ perf report --percent-limit 0.5 --stdio
      ...
         9.95%  swapper
                |
                 --7.57%--intel_idle
                           cpuidle_enter_state
                           cpuidle_enter
                           call_cpuidle
                           cpu_startup_entry
                           |
                           |--4.89%--start_secondary
                           |
                            --2.68%--rest_init
                                      start_kernel
                                      x86_64_start_reservations
                                      x86_64_start_kernel
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    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-7-git-send-email-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    7ed5d6e2
hist.c 13.1 KB