Hi everybody,
I've updated and fixed the feature branch and I'm confident enough to
merge it :-)
Last build is almost successful
(http://ci.libreoffice.org/job/lo_gerrit/1836/), except that I had three
JUnit failures on Windows for my last three builds, which I couldn't
reproduce locally.
I'll just quote my mail from last month.
Am 16.09.2016 um 23:49 schrieb Jan-Marek Glogowski:
This fixes my mail merge performance problem since the 5.0 merge of idle
job handling.
It completely drops the idea of separated idle and timer handling and
drops a lot of special handling and workarounds for problems in the
original code, but keeps the Idle class for convenience. I tried to list
all the revert commit ids and started to test the original bugs.
Everything is just scheduled by priority and Idles now get a very low
one per default, while they previously had the same one then timers.
Additionally it drops the 1ms lag for tasks, which actually adds up, as
idle tasks weren't instantly scheduled.
I already fixed the two most obvious busy loop bugs in Writer with
workarounds for the general idle job handler and the statistics
collector. Instead of polling for work I would like to switch these to
be enabled on demand, but that'll definitely take more work. Currently
they are converted to timers, which check for work every few seconds,
then should switch to idle - ok 0ms timeouts, until all work is processed.
The last patch is just a hack. Quite probably setting the document to
the busy state should "simply" disable the DocumentTimerManager, also in
regard to SwLayIdle::DoIdleJob / SwLayIdle::SwLayIdle /
SwViewShell::LayoutIdle. This feels duplicated, but seems quite hard to
untangle.
I tried to simplify the priority groups to make it easier to select the
correct one. There are still some suspicions HIGHEST ones. I had to guess
the new dependencies from the original priority of the idles, but I'm
quite sure there is some missing stuff. I would like to get some kind of
annotations to be able to build a priority tree of all of them for a
better overview.
It would be great to get feedback from people of all other platforms /
VCL backends.
Thanks for your comments and feedback
Jan-Marek
P.S. it adds a VCL python GDB script, which can be used to dump the list
of currently scheduled tasks.
P.P.S. naming is sill a mess. Sometimes it's task, sometimes event. The
scheduler class is actually the base class for the timers and idles and
should be renamed Event or Task.
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.