From: Stefan Monnier <monnier@iro.umontreal.ca>
To: Ihor Radchenko <yantar92@posteo.net>
Cc: Eli Zaretskii <eliz@gnu.org>,
mattias.engdegard@gmail.com, emacs-devel@gnu.org,
gerd.moellmann@gmail.com
Subject: Re: Removing redisplay-dont-pause
Date: Sun, 01 Dec 2024 21:38:42 -0500 [thread overview]
Message-ID: <jwvzflevofl.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <871pyrqwyz.fsf@localhost> (Ihor Radchenko's message of "Sun, 01 Dec 2024 14:49:56 +0000")
>>> The problem with redisplay hangs keeps surfacing again and again, so I
>>> do expect that a number of people will try to use it as soon as they
>>> learn that such variable exists.
>>
>> The hangs you have in mind cannot be helped by this variable.
>
> I was replying about your example with scrolling. I also tested setting
> this variable when typing in an Org buffer with many large invisible
> regions, and setting the variable does help typing speed.
If you can come up with a reproducible recipe, I'd be interested to see
it, since in most cases, `redisplay-dont-pause == nil` tends to make
things worse, IME.
The way I think about it is as follows:
Assume the incoming events come every T seconds and take T1 seconds to
run, and the subsequent redisplay takes time T2+T3 (where T2 is the time
in the middle where `redisplay-dont-pause` is consulted).
Then you have the following scenarios:
- If T > T1+T2+T3, then all is well.
- If T < T1, then we plain and simply can't keep up at all, the
redisplay is just not run at all and incoming events keep accumulating
as we fall ever further behind the incoming events until the incoming
events stop (at which point Emacs will only refresh its redisplay
after it has finally caught up with the buffered input).
- If T1 < T < T1 + T2, then Emacs will keep up with the input (i.e. when
the events stop coming, the display is refreshed more or less
instantly) but with `redisplay-dont-pause` set to nil it will not
refresh the display at all until the incoming events stop because
every time it tries to redisplay it gets interrupted by some
new input.
If OTOH `redisplay-dont-pause` is set to t, then instead of aborting
the redisplay, we finish it which slows us down (gets us a bit further
behind the flow of input), but does give feedback to the user, and
for the next few inputs we'll simply perform no redisplay at all until
we caught up with the input, at which point we will again perform
a redisplay, so in the end we get a redisplay after every N events
where N = (T2 + T3) / (T - T1).
- If T1 + T2 < T < T1 + T2+ T3, the difference between the settings of
`redisplay-dont-pause` is smaller (in both cases, the display is
refreshed every once in a while), but there will still be fewer
redisplays when `redisplay-dont-pause` is nil because we waste time
starting some redisplays which we later abort.
Of course, reality is more complex (e.g. the time T2 is not a constant,
e.g. it can occasionally be proportional to the number of events since
the last redisplay), but at least in my tests where we scroll down
a buffer with a high repeat rate, the behavior matched that naïve model
closely enough.
Stefan
next prev parent reply other threads:[~2024-12-02 2:38 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-17 5:43 Removing redisplay-dont-pause Gerd Möllmann
2024-11-17 7:11 ` Eli Zaretskii
2024-11-30 9:58 ` Eli Zaretskii
2024-11-30 18:56 ` Stefan Monnier
2024-12-01 9:46 ` Mattias Engdegård
2024-12-01 10:08 ` Eli Zaretskii
2024-12-01 10:43 ` Ihor Radchenko
2024-12-01 14:40 ` Eli Zaretskii
2024-12-01 14:49 ` Ihor Radchenko
2024-12-01 15:20 ` Eli Zaretskii
2024-12-02 2:38 ` Stefan Monnier [this message]
2024-12-02 4:18 ` Gerd Möllmann
2024-12-02 23:50 ` Stefan Monnier
2024-12-03 4:55 ` Gerd Möllmann
2024-12-01 15:28 ` Gerd Möllmann
2024-12-01 15:57 ` Eli Zaretskii
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=jwvzflevofl.fsf-monnier+emacs@gnu.org \
--to=monnier@iro.umontreal.ca \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=gerd.moellmann@gmail.com \
--cc=mattias.engdegard@gmail.com \
--cc=yantar92@posteo.net \
/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.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).