emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: bug-reference-prog-mode slows down CC Mode's scrolling by ~7%


From: Alan Mackenzie
Subject: Re: bug-reference-prog-mode slows down CC Mode's scrolling by ~7%
Date: Fri, 3 Sep 2021 10:47:41 +0000

Hello, Eli.

On Fri, Sep 03, 2021 at 09:10:24 +0300, Eli Zaretskii wrote:
> > Date: Thu, 2 Sep 2021 19:24:51 +0000
> > From: Alan Mackenzie <acm@muc.de>
> > Cc: emacs-devel@gnu.org

> > In words (;-), only the first function on jit-lock-functions should be
> > able to expand the region which gets `fontified' text properties.  This
> > expanded region will then be supplied to the subsequent functions.

> > Given how little used the `jit-lock-bounds' mechanism is (there is one
> > function in Emacs, font-lock-default-fontify-region, which uses it, and
> > a web search revealed only a single other instance, in lsp-mode on
> > git-hub), this shouldn't cause problems.  In fact, I'm not sure the
> > lsp-mode use of it is even correct.

> Bother: this is not future-proof, and certainly isn't scalable.  If we
> are changing the protocol, can we instead come up with a more scalable
> change, so that functions won't "fight" in the future who gets to be
> "the first"?

I think we need to be clear about the current situation versus my
proposal.  If there is only one element (typically
font-lock-fontify-region) on jit-lock-functions, nothing changes.  With
several elements:

Current situation: The region marked with 'fontified text properties is
the _smallest_ returned by the jit-lock-functions functions.  If such a
function returns nil (which is usual), that region becomes precisely
(BEG END), and we lose all the benefit of jit-lock-bounds.

Proposed mechanism: The region marked with 'fontified is that supplied
by the first j-l-f function, typically font-lock-fontify-region.  This
is an enhancement.

Note that it is difficult to use the jit-lock-bounds returned by a
subsequent function, if they exceed the bounds returned by the first
function.  To do this safely, we would have to re-run all the previous
jit-lock-functions on the newly enlarged region.  This would be clumsy,
and wouldn't fit in well with our current scheme.

As for "fighting" to be the first function in j-l-f, I don't think that
should be a problem.  We can document the new &optional parameter to
jit-lock-register (not yet implemented) to say "don't use this unless
you really know what you're doing".

What we have isn't scalable in the sense you mean, and I don't think it
can be made scalable without massive changes in the jit-lock mechanism,
which might well reverse the benefits of using jit-lock-bounds (the 7%
saving in font locking time in CC Mode (and surely other modes, too)).

-- 
Alan Mackenzie (Nuremberg, Germany).



reply via email to

[Prev in Thread] Current Thread [Next in Thread]