From: Eli Zaretskii <eliz@gnu.org>
To: Lars Ingebrigtsen <larsi@gnus.org>, Phil Sainty <psainty@orcon.net.nz>
Cc: Emacs-hacker2018@jovi.net, 45898@debbugs.gnu.org
Subject: bug#45898: 27.1; wedged in redisplay again
Date: Mon, 13 Jun 2022 15:57:59 +0300 [thread overview]
Message-ID: <83zgigu3e0.fsf@gnu.org> (raw)
In-Reply-To: <877d5kojbo.fsf@gnus.org> (message from Lars Ingebrigtsen on Mon, 13 Jun 2022 14:10:19 +0200)
> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: Emacs-hacker2018@jovi.net, 45898@debbugs.gnu.org
> Date: Mon, 13 Jun 2022 14:10:19 +0200
>
> Eli Zaretskii <eliz@gnu.org> writes:
>
> > Here's the first cut. It still needs polishing and some testing, but
> > let me know what you think:
>
> [...]
>
> > +/* Update the redisplay-tick count for a window, and signal an error
> > + if the tick count is above some threshold, indicating that
> > + redisplay of the window takes "too long".
>
> Ah, instead of measuring the time elapsed, we use the number of iterator
> "executions" as a proxy. That sounds promising.
Yes. That idea came up while discussing this with Gerd Möllmann, btw.
It's much simpler than measuring time (which would require
high-resolution timing, which is much less portable and more tricky to
get right, what with modern systems constantly adjusting their time).
> One problem that occurs to me is if you're, say, only displaying a shell
> buffer, and it's outputting data -- then I don't think we'll be changing
> windows, but just accruing ticks? But I think that should be easy
> enough to fix, since we'll be returning to command_loop and we could
> just have that nixing out the tick count, too. Probably.
Yes, zeroing out the count when redisplay is done is probably a good
idea. It's on my todo, probably in mark_window_display_accurate_1 or
thereabouts. The only consideration here is that a successful
redisplay of a window could be followed by something like
vertical-motion across the same window, which could take "too long",
and we perhaps want the counters to be accumulated. Hmm...
(Actually, output in a shell buffer is not a problem, because comint
calls 'recenter' very frequently, at least by default, and 'recenter'
resets the ticks count. But maybe there are other situations where
this isn't guaranteed to happen. So yeah, maybe command_loop is a
better place.)
> A different problem is when we don't have many ticks, but each tick
> takes a long time to execute. The classic problem here is when we have
> a font-locking regexp that's very complicated (with lots of
> backtracking). Then we don't update anything on the screen much -- we
> spend (virtually) all the time in the regexp matcher. I don't see an
> easy fix to that using this scheme...
That's why update_redisplay_ticks accepts its first argument, instead
of always adding 1: I thought about some potentially expensive
operations that could be either more or less expensive than just
processing a single character. E.g., font-lock calls regexp matching,
so we should try to come up with some measure of its "expensiveness"
based on...something. This will need some tuning, but all we need is
some coarse correlation.
> > For testing purposes, is it possible to have examples of files that
> > could benefit from this feature, i.e. files where Emacs becomes not
> > responsive enough? I'm not sure the few examples I have cover all the
> > popular reasons for the slowness, as I think there are more than one
> > or two.
>
> I don't have anything handy... anybody else have a setup that will
> freeze Emacs redisplay that we can test with?
"Freeze" is not actually a requirement; it's enough if Emacs's
responses become very slow. For now, I used the file described here:
https://lists.gnu.org/archive/html/help-gnu-emacs/2022-05/msg00070.html
But it is only one kind of such files. Perhaps Phil could point me to
additional examples; added to CC.
next prev parent reply other threads:[~2022-06-13 12:57 UTC|newest]
Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-15 18:13 bug#45898: 27.1; wedged in redisplay again Devon Sean McCullough
2022-06-07 13:37 ` Lars Ingebrigtsen
2022-06-07 14:00 ` Eli Zaretskii
[not found] ` <b7f81bfc-bbfb-83bc-3660-d0b1474498f7@jovi.net>
2022-06-07 15:53 ` Eli Zaretskii
2022-06-08 11:47 ` Lars Ingebrigtsen
2022-06-08 14:08 ` Eli Zaretskii
2022-06-08 15:58 ` Eli Zaretskii
2022-06-09 10:30 ` Lars Ingebrigtsen
2022-06-09 10:45 ` Eli Zaretskii
2022-06-09 11:04 ` Lars Ingebrigtsen
2022-06-09 13:09 ` Eli Zaretskii
2022-06-09 13:36 ` Lars Ingebrigtsen
2022-06-09 15:56 ` Eli Zaretskii
2022-06-10 9:02 ` Lars Ingebrigtsen
2022-06-12 9:48 ` Eli Zaretskii
2022-06-12 10:23 ` Lars Ingebrigtsen
2022-06-12 14:23 ` Eli Zaretskii
2022-06-12 18:02 ` Eli Zaretskii
2022-06-13 12:10 ` Lars Ingebrigtsen
2022-06-13 12:57 ` Eli Zaretskii [this message]
2022-06-13 22:40 ` Phil Sainty
2022-06-14 12:45 ` Eli Zaretskii
2022-06-18 8:01 ` Eli Zaretskii
2022-06-20 11:58 ` Eli Zaretskii
2022-06-20 19:11 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-06-21 10:14 ` Eli Zaretskii
2022-06-21 20:38 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-06-22 2:33 ` Eli Zaretskii
2022-06-22 23:39 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-06-23 6:08 ` Eli Zaretskii
2022-06-23 21:14 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-06-24 7:57 ` Eli Zaretskii
2022-06-25 4:54 ` Gerd Möllmann
2022-06-25 6:29 ` Eli Zaretskii
2022-06-25 7:47 ` Eli Zaretskii
2022-06-25 8:18 ` Gerd Möllmann
2022-06-25 9:49 ` Gerd Möllmann
2022-06-25 9:57 ` Eli Zaretskii
2022-06-25 11:10 ` Gerd Möllmann
2022-06-25 11:29 ` Eli Zaretskii
2022-06-25 12:20 ` Gerd Möllmann
2022-06-25 12:54 ` Eli Zaretskii
2022-06-25 12:57 ` Gerd Möllmann
2022-06-29 16:18 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-06-29 19:07 ` Eli Zaretskii
2022-06-29 21:07 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-06-30 5:14 ` Eli Zaretskii
2022-06-30 17:22 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-06-30 18:35 ` Eli Zaretskii
2022-06-30 19:56 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-07-01 4:42 ` Gerd Möllmann
2022-07-01 6:04 ` Eli Zaretskii
2022-07-01 8:49 ` Gerd Möllmann
2022-07-01 10:31 ` Eli Zaretskii
2022-07-01 11:04 ` Gerd Möllmann
2022-07-01 11:12 ` Eli Zaretskii
2022-07-01 11:33 ` Gerd Möllmann
2022-07-01 11:44 ` Gerd Möllmann
2022-07-01 12:35 ` Gerd Möllmann
2022-07-01 12:56 ` Eli Zaretskii
2022-07-01 12:39 ` Eli Zaretskii
2022-07-01 5:27 ` Eli Zaretskii
2022-07-01 12:14 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-07-01 12:51 ` Eli Zaretskii
2022-07-01 14:38 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-07-01 15:43 ` Eli Zaretskii
2022-06-14 12:00 ` Lars Ingebrigtsen
2022-06-14 13:00 ` Eli Zaretskii
2022-06-09 10:25 ` Lars Ingebrigtsen
2022-06-09 10:40 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-06-09 10:41 ` Eli Zaretskii
2022-06-09 10:48 ` Lars Ingebrigtsen
2022-06-09 13:06 ` Eli Zaretskii
[not found] <165605725704.24125.17210424600068379407@vcs2.savannah.gnu.org>
[not found] ` <20220624075417.BFA82C0169C@vcs2.savannah.gnu.org>
[not found] ` <87wnd6v34k.fsf@gnus.org>
[not found] ` <83mte2coqg.fsf@gnu.org>
[not found] ` <87fsjuqpzi.fsf@gnus.org>
[not found] ` <83k096clsx.fsf@gnu.org>
[not found] ` <8735fup5oh.fsf@gnus.org>
[not found] ` <83a6a2cher.fsf@gnu.org>
[not found] ` <874k09nau4.fsf@gnus.org>
2022-06-25 7:17 ` Eli Zaretskii
2022-06-25 10:10 ` Lars Ingebrigtsen
2022-06-25 11:21 ` 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=83zgigu3e0.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=45898@debbugs.gnu.org \
--cc=Emacs-hacker2018@jovi.net \
--cc=larsi@gnus.org \
--cc=psainty@orcon.net.nz \
/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).