GNU bug report logs -
#45320
27.1; diff-refine performance regression
Previous Next
Full log
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
In GNU Emacs 27.1 (build 1, x86_64-suse-linux-gnu, GTK+ Version 3.24.22, cairo version 1.16.0)
The following change is highly problematic:
--8<---------------cut here---------------start------------->8---
** Diff mode
*** Hunks are now automatically refined by font-lock.
To disable refinement, set the new user option 'diff-refine' to nil.
To get back the old behavior where hunks are refined as you navigate
through a diff, set 'diff-refine' to the symbol 'navigate'.
--8<---------------cut here---------------end--------------->8---
The refinement is run synchronously and can't be interrupted.
The used algorithm clearly has superlinear complexity with the size of
the diff hunk. I frequently use diff-mode for comparison of log files
from compilations, which routinely creates large hunks and sometimes
very large ones. In mild cases that stalls Emacs for a few seconds
upwards to a minute, but I'm encountering larger diff hunks regularly
that do not complete refinement after more than an hour of burning
through 100% CPU (and not a slow one) when I try. Due to the way this
is implemented, the refinement can not be stopped from within Emacs and
stopping it from the outside has a high propensity of killing Emacs and
taking all unsaved work with it.
Auto-refinement of diff hunks should
1. be stopped
a) after a customizable time threshold (personally I'd be OK with
something like 1s, but other folks may have less patience),
b) when the user tries to move point (even small delays are annoying
when you really just want to scroll through the file),
c) when C-g or the corresponding signal is issued.
2. not be attempted at all
a) when the hunk size exceeds a customizable threshold,
b) when the diff in question has run into one of the performance
thresholds multiple times already.
Regards,
Achim.
--
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+
SD adaptation for Waldorf Blofeld V1.15B11:
http://Synth.Stromeko.net/Downloads.html#WaldorfSDada
This bug report was last modified 2 years and 340 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.