|
From: | Herman |
Subject: | bug#62352: Very slow scroll-down-line with a lot of text properties |
Date: | Sat, 25 Mar 2023 14:41:04 +0100 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.1 |
On 3/25/23 13:42, Eli Zaretskii wrote:
I'm not saying that this is the solution. I just wanted to point out that emacs does unnecessary work. Note, even with this code commented out, composition still seems to work. Maybe it's buggy, of course. But the point is, it seems possible to fix this performance issue. Maybe it's a lot of work and it doesn't worth it. I understand that if this issue is closed because of this. But saying that this issue is not a (performance) bug is not correct, in my opinion. It is not unreasonable to expect that my example file can be scrolled without any problem.I analyzed the issue little bit, the root cause of the slowdown is composition handling (yet the composition feature is completely unused by this example). If I comment out these lines in composition_compute_stop_pos(), emacs works better ("normal" scrolling becomes completely fluid, scroll-down-line still freezes, but for a much shorter time): /* if (charpos < endpos */ /* && find_composition (charpos, endpos, &start, &end, &prop, string) */ /* && start >= charpos */ /* && composition_valid_p (start, end, prop)) */ /* { */ /* cmp_it->stop_pos = endpos = start; */ /* cmp_it->ch = -1; */ /* } */ It seems that emacs does a huge amount of redundant work by scanning approximately the same area over and over again for composition properties.This is a non-starter, unfortunately: the display engine _must_ support character composition, or else some scripts will display incorrectly, and some features (like prettify-symbols-mode) will stop working.
Maybe there is a 2x single-thread performance factor between my computer and a current fast consumer desktop PC. It is highly unlikely that getting a faster computer will solve this problem.Get a faster computer, or make your keyboard auto-repeat rate lower?
[Prev in Thread] | Current Thread | [Next in Thread] |