• Jin Yao's avatar
    perf annotate: Remove hist__account_cycles() from callback · bdd1666b
    Jin Yao authored
    The hist__account_cycles() function is executed when the
    hist_iter__branch_callback() is called.
    
    But it looks it's not necessary.  In hist__account_cycles, it already
    walks on all branch entries.
    
    This patch moves the hist__account_cycles out of callback, now the data
    processing is much faster than before.
    
    Previous code has an issue that the ch[offset].num++ (in
    __symbol__account_cycles) is executed repeatedly since
    hist__account_cycles is called in each hist_iter__branch_callback, so
    the counting of ch[offset].num is not correct (too big).
    
    With this patch, the issue is fixed. And we don't need the code of
    "ch->reset >= ch->num / 2" to check if there are too many overlaps (in
    annotation__count_and_fill), otherwise some data would be hidden.
    
    Now, we can try, for example:
    
      perf record -b ...
      perf annotate or perf report -s symbol
    
    The before/after output should be no change.
    
     v3:
     ---
     Fix the crash in stdio mode.
     Like previous code, it needs the checking of ui__has_annotation()
     before hist__account_cycles()
    
     v2:
     ---
     1. Cover the similar perf report
     2. Remove the checking code "ch->reset >= ch->num / 2"
    Signed-off-by: default avatarJin Yao <yao.jin@linux.intel.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Jin Yao <yao.jin@intel.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/1552684577-29041-1-git-send-email-yao.jin@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    bdd1666b
builtin-annotate.c 16.5 KB