• A
    perf ui: New hists tree widget · 0f0cbf7a
    Arnaldo Carvalho de Melo 提交于
    The stock newt checkbox tree widget we were using was not really
    suitable for hist entry + callchain browsing.
    
    The problems with it were manifold:
    
    - We needed to traverse the whole hist_entry rb_tree to add each entry +
      callchains beforehand.
    
    - No control over the colors used for each row
    
    So a new tree widget, based mostly on slang, was written.
    
    It extends the ui_browser class already used for annotate to allow the
    user to fold/unfold branches in the callchains tree, using extra fields
    in the symbol_map class that is embedded in hist_entry and
    callchain_node instances to store the folding state and when changing
    this state calculates the number of rows that are produced when showing
    a particular hist_entry instance.
    
    This greatly speeds up browsing as we don't have to upfront touch all
    the entries and only calculate callchain related operations when some
    callchain branch is actually unfolded.
    
    The memory footprint is also reduced as the data structure is not
    duplicated, just some extra fields for controling callchain state and to
    simplify the process of seeking thru entries (nr_rows, row_offset) were
    added.
    
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    LKML-Reference: <new-submission>
    Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    0f0cbf7a
newt.c 37.2 KB