How to "flush" Writer node changes into layouting?

Jan-Marek Glogowski glogow at fbihome.de
Sat Aug 13 00:10:15 UTC 2016


Hi

Since the merge of the time / idle work, interactivity of the KDE
backend is really slow, which also harms the mail merge performance at
~50% for larger documents.

I just pushed a branch private/jmux/fast-mm-5-0. It's my not-so-initial
work to get this fixed in our 5.0 branch and I want to port it to master
ASAP. The code has two purposes:

1. A major clean-up of the current VCL scheduler code.

I had a look at the Gtk+ priority classification and as a result changed
the default idle priority to be really idle, while the previous default
priority for idle tasks was the same then for timers (AKA HIGH). I also
dropped most of the special priority settings, which already boosts
interactivity a lot, i.e. Libre Office is still usable when doing a
merge job or displaying the walking cow from bug tdf#32861 presentation,
but there are still some bugs, where serialization is not correct.

2. Fix the layouting problem introduced by commit
60d34e1c840d2c317bb7d0a5b14f4602c22b3fcc

This also just happens for large MM documents with page bound frames.
Everything with 300+ pages is basically unbearable now. The commit is
correct, but previously the - now enabled - "fixup" code was just run at
the end of the SwPageFrm generation.

One of the bugs uncovered by the fix is fixed by "Use InsertPage in
AssertFlyPages", but for the second I just found the workaround done by
"Switch back to InsertPageBreak in SwDoc::AppendDoc".

I would like to get rid of this workaround, but before spending even
more time on the problem, I would like to know, if anyone knows - as
quoted from the patch:

+  // a magic call to sync with whatever, so AssertFlyPages
+  // sees the correct format AKA same as InsertPageBreak does

???

My workaround just works, because InsertPageBreak actually splits the
current content node, which moves the cursor to a now page, which isn't
generated. Now EndOfAction needs to fix the cursor and somehow something
in the stack is able to flush the cached data. Some comments in the code
of the backtrace mention an IdleCollector, but I guess that's code is
already done.

I've added most information to the commit message of "Switch back to
InsertPageBreak in SwDoc::AppendDoc"

Thanks for your comments

Jan-Marek


More information about the LibreOffice mailing list