[LyX features/biginset] Reduce metrics updates from 4 to 1 when loading file

Jean-Marc Lasgouttes lasgouttes at lyx.org
Sun Nov 26 21:07:22 UTC 2023


Le 24/11/2023 à 21:03, Scott Kostyshak a écrit :
>> Since such changes can lead to nasty bugs, my plan was to backport only part
>> of the biginset branch (or maybe by bit in different 2.4 releases). But if
>> we feel brave, we can put it all in the 2.4.x branch and see what works or
>> not before release.
>>
>> We have time for that any way, but everything that touches events is very
>> brittle.
> 
> Do I understand correctly that this patch is pretty small? And that it
> would be easy to revert? If so, it might indeed be nice to put it in
> 2.4.x so that it gets tested.

Note first that this change is much less jaw-dropping that the change 
that makes SinglePar update work in insets. I have been disappointed not 
to notice the difference in practice.

Some patches in the biginset branch make computation more efficient, and 
I am confident about them (or at least that bugs will be easy to fix).

Patches that avoid full metrics computation are different : these extra 
metrics computation steps have often been used as an easy (and robust 
but inefficient) way to fix real issues. Before removing these extra 
calls, one has to understand what bug they fix, and whether we can be 
convinced that the new code is immune to the bug.

For the patch above, it might happen that it does not work on Qt6 on 
macOS (random example), because the events are triggered in a slightly 
different way.

So each removal of a full metrics computation (Update::Force) is a risk. 
On my current TODO list I have currently:

* when the cursor enters a math equation, a math toolbar is toggled and 
create a resize event for the workarea
=> solution is to do a metrics computation only if the width has changed 
(DONE, seems to work)

* when the cursor enters a math equation, metrics may change if there 
was a preview, so that an unconditional metrics computation is done
=> solution is to do this only when there was actually a preview, and 
then only do a SinglePar update (TODO)

* when the cursor leaves the math equation, same as above

* when the cursor leaves the math equation and there is an error with 
the preview snippet, there is still a full metrics update
=> solution is to avoid the metrics update if the preview has not been 
loaded (to investigate)

* when clicking in a nested inset, there is a full metrics update (to 
investigate)


As you see there are tons of such situations, and it will not be 
possible to backport all the fixes for those to 2.4.x

JMarc


More information about the lyx-devel mailing list