• Patrick Palka's avatar
    perf ui tui progress: Don't force a refresh during progress update · d53e57d0
    Patrick Palka authored
    Each call to tui_progress__update() would forcibly refresh the entire
    screen.  This is somewhat inefficient and causes noticable flickering
    during the startup of perf-report, especially on large/slow terminals.
    
    It looks like the force-refresh in tui_progress__update() serves no
    purpose other than to clear the screen so that the progress bar of a
    previous operation does not subsume that of a subsequent operation.  But
    we can do just that in a much more efficient manner by clearing only the
    region that a previous progress bar may have occupied before repainting
    the new progress bar.  Then the force-refresh could be removed with no
    change in visuals.
    
    This patch disables the slow force-refresh in tui_progress__update() and
    instead calls SLsmg_fill_region() on the entire area that the progress
    bar may occupy before repainting it.  This change makes the startup of
    perf-report much faster and appear much "smoother".
    
    It turns out that this was a big bottleneck in the startup speed of
    perf-report -- with this patch, perf-report starts up ~2x faster (1.1s
    vs 0.55s) on my machines.  (These numbers were measured by running "time
    perf report" on an 8MB perf.data and pressing 'q' immediately.)
    Signed-off-by: default avatarPatrick Palka <patrick@parcs.ath.cx>
    Acked-by: default avatarIngo Molnar <mingo@kernel.org>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/r/1382747149-9716-1-git-send-email-patrick@parcs.ath.cxSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    d53e57d0
progress.c 1 KB