All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@kernel.org>
To: Patrick Palka <patrick@parcs.ath.cx>
Cc: linux-kernel@vger.kernel.org,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Paul Mackerras <paulus@samba.org>, Ingo Molnar <mingo@redhat.com>
Subject: Re: [PATCH] perf/ui/tui: don't force a refresh during progress update
Date: Fri, 25 Oct 2013 12:34:32 +0200	[thread overview]
Message-ID: <20131025103432.GA4363@gmail.com> (raw)
In-Reply-To: <1382565562-15108-1-git-send-email-patrick@parcs.ath.cx>


* Patrick Palka <patrick@parcs.ath.cx> wrote:

> 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 with 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 ~1.6x faster (0.8s
> vs 0.5s) on my machines.  (These numbers were measured by running "time
> perf report" on an 8MB perf.data and pressing 'q' immediately.)
> 
> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> Cc: Paul Mackerras <paulus@samba.org>
> Cc: Ingo Molnar <mingo@redhat.com>
> Signed-off-by: Patrick Palka <patrick@parcs.ath.cx>
> ---
>  tools/perf/ui/tui/progress.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/perf/ui/tui/progress.c b/tools/perf/ui/tui/progress.c
> index 6c2184d..641049a 100644
> --- a/tools/perf/ui/tui/progress.c
> +++ b/tools/perf/ui/tui/progress.c
> @@ -17,13 +17,14 @@ static void tui_progress__update(u64 curr, u64 total, const char *title)
>  	if (total == 0)
>  		return;
>  
> -	ui__refresh_dimensions(true);
> +	ui__refresh_dimensions(false);
>  	pthread_mutex_lock(&ui__lock);
>  	y = SLtt_Screen_Rows / 2 - 2;
>  	SLsmg_set_color(0);
>  	SLsmg_draw_box(y, 0, 3, SLtt_Screen_Cols);
>  	SLsmg_gotorc(y++, 1);
>  	SLsmg_write_string((char *)title);
> +	SLsmg_fill_region(y, 1, 1, SLtt_Screen_Cols - 2, ' ');
>  	SLsmg_set_color(HE_COLORSET_SELECTED);
>  	bar = ((SLtt_Screen_Cols - 2) * curr) / total;
>  	SLsmg_fill_region(y, 1, 1, bar, ' ');

Nice! This is something I noticed as well, never figured out the 
root cause of it.

Acked-by: Ingo Molnar <mingo@kernel.org>

Thanks,

	Ingo

  reply	other threads:[~2013-10-25 10:34 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-23 21:59 [PATCH] perf/ui/tui: don't force a refresh during progress update Patrick Palka
2013-10-25 10:34 ` Ingo Molnar [this message]
2013-10-26  0:25 ` [PATCH rebase] " Patrick Palka
2013-10-28  5:52   ` Namhyung Kim
2013-11-12 21:54   ` [tip:perf/urgent] perf ui tui progress: Don' t " tip-bot for Patrick Palka

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20131025103432.GA4363@gmail.com \
    --to=mingo@kernel.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=patrick@parcs.ath.cx \
    --cc=paulus@samba.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.