• Namhyung Kim's avatar
    perf report: Fix some option handling on --stdio · 4fd113b5
    Namhyung Kim authored
    There's a bug that perf report sometimes ignore some options on --stdio
    output.  This bug is triggered only if a related config variable is set.
    For example, let's assume we have a following config file.
    
      $ cat ~/.perfconfig
      [call-graph]
        print-type = graph
      [hist]
        percentage = absolute
    
    Then, following perf config will not honor some options.
    
      $ perf record -ag sleep 1
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 0.199 MB perf.data (77 samples) ]
    
      $ perf report -g none --stdio
      # To display the perf.data header info, please use --header/--header-only options.
      #
      # Samples: 77  of event 'cycles'
      # Event count (approx.): 25425383
      #
      # Overhead  Command          Shared Object            Symbol
      # ........  ...............  .......................  ..............
      #
          16.34%  swapper          [kernel.vmlinux]         [k] intel_idle
                          |
                          ---intel_idle
                             cpuidle_enter_state
                             cpuidle_enter
                             cpu_startup_entry
       ...
    
    With '-g none' option, it should not show callchains, but it still shows
    callchains.  However it works as expected on --tui output.
    
    Similarly, '--percentage relative' option is not work and still shows a
    absolute percentage values.
    
    Looking at the source, I found that those setting were overwritten by
    config variables when setup_pager() called.  The setup_pager() is to
    start a pager process so that it can manage long lines of output on the
    stdio mode.  But as it calls the perf_config() after parsing arguments,
    the settings were overwritten regardless of command line options.
    
    The reason it calls perf_config() is to find the 'pager_program' which
    might be set by a config variable, I guess.  However current perf code
    does not provide the config variable for it, so it's just meaningless
    IMHO.  Eliminating the call makes the option working as expected.
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Taeung Song <treeze.taeung@gmail.com>
    Link: http://lkml.kernel.org/r/1431529406-6762-1-git-send-email-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    4fd113b5
environment.c 229 Bytes