From: "Gerd Möllmann" <gerd.moellmann@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 45898@debbugs.gnu.org
Subject: bug#45898: 27.1; wedged in redisplay again
Date: Sat, 25 Jun 2022 06:54:19 +0200 [thread overview]
Message-ID: <0B5FE52E-BC81-4A05-86F1-91C6AFCB6F7D@gmail.com> (raw)
In-Reply-To: <83o7yicx3p.fsf@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 3702 bytes --]
> On 2022-06-24,, at 9:57 , Eli Zaretskii <eliz@gnu.org> wrote:
>
>
> Gerd, your comments will be most appreciated, TIA.
>
I didn’t read the whole thread in the bug report, but i think I understand the gist of the matter, from our recent conversation, and from reading the change set.
I think it helps me in the following when I briefly describe the model of Emacs’ internals I have in my head. That way, I can write about things in terms in which I think. So, let me try. When I think of Emacs' design, I think of functions and categories they belong to. Categories in the sense of animal, dog, human, plant. A bit like modules, but not quite, but if it’s helpful, just think of modules instead.
The categories I'd like to use here, are lisp, redisplay, iterator, update, regexp. I leave the rest out. Here is what I group under these categories:
Lisp
Eval, funcall
API for buffers, windows, etc
...
Iterator
Walk over text in display order (including bidi, display strings)
Determine current character, image
Keep track of pixel (x y w h)
(x y) <-> text position computation
Redisplay
Produce desired glyphs
Produce as few as possible (optimizations)
Update
Bring desired glyphs to the screen
Regexp
Matching and searching support
That’s why I’m sometimes slow when redisplay is used for what I call iterator.
If -> denotes "uses", or "calls into", we have
Lisp
-> iterator in (x y) <-> text pos
-> regexp
-> redisplay (I think, Fredisplay?)
Redisplay
-> iterator
-> lisp (hooks)
Iterator
-> Lisp (eval funcall hooks)
Update
-> maybe hook, I don’t remember
Regexp
-> lisp, I’ve heard
Very roughly, and much too long, sorry for that.
What I so far understand about your design, and i haven't looked at details:
One of the first things that came to my mind is a new category "time fuse" (in German Zeitzünder), something counting ticks, and detonating (signaling) at some point. I admit that I find the names you used with redisplay in them confusing. Especially in the regexp code and so.
Functionality-wise, Iterator now signals an error that redisplay catches.
The error is signaled when a global tick counter exceeds a max value. Each movement of an iterator increments the global tick counter. The counter is global because you want to sum up all the ticks that occur between a given start point where the tick counter is set to 0, and the point where the ticks exceed the maximum, regardless of iterator -> lisp -> iterator nesting.
The global tick counter is also incremented from regexp. I think font-lock plays a role here. One scenario is redisplay or lisp -> iterator, iterator needs font-lock to run (-> lisp), font-lock matches a regexp (lisp -> regexp), and we get stuck on a long line. Likewise with other stuff, like syntax.
Good.
(BTW, the call to update the tick in regexp can lead to a GC when the error is signaled, in the same way as in bug 56108 with maybe_quit. So we might need that, too.)
Maybe we could disable the calls cheaply when max-ticks is 0? I mean, something that inlines
if (max_ticks > 0)
update_ticks(...)
I would have a better gut feeling in that case, wrt older machines. Not that I notice a slowdown on my machine, but I'm building with ASan enabled, so everything is kinda slow anyway.
The meaning of display_working_on_window_p is not clear to me. I see what setting it does in the end, but I can't tell what this means:
/* True while some display-engine code is working on layout of some
window.
Probably good.
Do you want me to take a deeper look at specific places?
[-- Attachment #2: Type: text/html, Size: 16221 bytes --]
next prev parent reply other threads:[~2022-06-25 4:54 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
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 [this message]
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=0B5FE52E-BC81-4A05-86F1-91C6AFCB6F7D@gmail.com \
--to=gerd.moellmann@gmail.com \
--cc=45898@debbugs.gnu.org \
--cc=eliz@gnu.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.
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).