• Arnaldo Carvalho de Melo's avatar
    perf diff: Fix support for all --sort combinations · 9c443dfd
    Arnaldo Carvalho de Melo authored
    When we finish creating the hist_entries we _already_ have them
    sorted "by name", in fact by what is in --sort, that is exactly
    how we can find the pairs in perf_session__match_hists as
    'comm', 'dso' & 'symbol' all are strings we need to find the
    matches in the baseline session.
    
    So only do the sort by hits followed by a resort by --sort if we
    need to find the position for shwowing the --displacement of
    hist entries.
    
    Now all these modes work correctly:
    
    Example is a simple 'perf record -f find / > /dev/null' ran
    twice then followed by the following commands:
    
      $ perf diff -f --sort comm
      # Baseline  Delta      Command
      # ........ ..........  .......
      #
           0.00%   +100.00%     find
      $ perf diff -f --sort dso
      # Baseline  Delta           Shared Object
      # ........ ..........  ..................
      #
          59.97%     -0.44%  [kernel]
          21.17%     +0.28%  libc-2.5.so
          18.49%     +0.16%  [ext3]
           0.37%             find
      $ perf diff -f --sort symbol | head -8
      # Baseline  Delta      Symbol
      # ........ ..........  ......
      #
           6.21%     +0.36%  [k] ext3fs_dirhash
           3.43%     +0.41%  [.] __GI_strlen
           3.53%     +0.16%  [k] __kmalloc
           3.17%     +0.49%  [k] system_call
           3.06%     +0.37%  [k] ext3_htree_store_dirent
      $ perf diff -f --sort dso,symbol | head -8
      # Baseline  Delta           Shared Object  Symbol
      # ........ ..........  ..................  ......
      #
           6.21%     +0.36%  [ext3]              [k] ext3fs_dirhash
           3.43%     +0.41%  libc-2.5.so         [.] __GI_strlen
           3.53%     +0.16%  [kernel]            [k] __kmalloc
           3.17%     +0.49%  [kernel]            [k] system_call
           3.06%     +0.37%  [ext3]              [k] ext3_htree_store_dirent
      $
    
    And we don't have to do two expensive resorts in the common, non
    --displacement case.
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Frédéric Weisbecker <fweisbec@gmail.com>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Paul Mackerras <paulus@samba.org>
    LKML-Reference: <1262047716-23171-5-git-send-email-acme@infradead.org>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    9c443dfd
builtin-diff.c 6.45 KB