<html>
<head>
<base href="https://bugs.documentfoundation.org/">
</head>
<body>
<p>
<div>
<b><a class="bz_bug_link
bz_status_REOPENED "
title="REOPENED - FILEOPEN: slow loading in minutes of .ods and .xlsx with >1000 of conditional formats, also dump"
href="https://bugs.documentfoundation.org/show_bug.cgi?id=81765#c28">Comment # 28</a>
on <a class="bz_bug_link
bz_status_REOPENED "
title="REOPENED - FILEOPEN: slow loading in minutes of .ods and .xlsx with >1000 of conditional formats, also dump"
href="https://bugs.documentfoundation.org/show_bug.cgi?id=81765">bug 81765</a>
from <span class="vcard"><a class="email" href="mailto:noelgrandin@gmail.com" title="Noel Grandin <noelgrandin@gmail.com>"> <span class="fn">Noel Grandin</span></a>
</span></b>
<pre>Attaching the IRC discussion of this problem
May 02 14:10:15 <noelgrandin> so of the items we stick into pools we modify
all over the place
May 02 14:10:20 <noelgrandin> s/so/some
May 02 14:10:39 <mst___> noelgrandin, that sounds very wrong
May 02 14:11:44 <noelgrandin> mst___, ScPatternAttr
May 02 14:12:17 <noelgrandin> and of course there are the SvxFieldItem things
that editeng likes to modify
May 02 14:12:29 * mst___ is surprised that such horrible abuse of
interface contract is in sc, not sw...
May 02 14:13:12 <noelgrandin> I think its a case of (a)busing the
de-duplicate functionality they have
May 02 14:13:25 <erAck> noelgrandin: where does that modify items in the pool?
May 02 14:14:27 <noelgrandin> erAck, ScPatternAttr ends up in a pool, and
ScPatternAttr extends SfxSetItem, and lots of places (1500+ lines) call
GetItemSet() on it and modify stuff inside it, and it's operator== is dependant
on it's contents
May 02 14:17:00 <noelgrandin> which was not a problem when the code would
always scan all the ScPatternAttr's in a pool to find a match, but as soon as I
tried to make the scanning smarter...
May 02 14:19:21 * erAck doesn't quite understand.. and doesn't have time
to spend hours to dig into it now
May 02 14:21:11 <noelgrandin> erAck, pool contain items, and when we add an
item, we attempt to match against an existing item (de-duplicate for memory
saving I guess). that process of matching becomes O(n^2) when loading certain
documents. I made the scanning faster by sorting the list. But that sorting
fails because various code likes to modify the ScPatternAttr that are inside a
pool, resulting in an unsorted list inside the pool
May 02 14:23:44 <mmeeks> noelgrandin: perhaps good to have some
stack-traces from a hardware watchpoint of the state being changed (?) =)
May 02 14:24:59 <noelgrandin> mmeeks, it gets changed from tons of places, I
have a 1500+ line patch where I tried to move the changing inside the class so
I could trigger a manual re-sort of the cached items in the pool.
May 02 14:25:02 <erAck> noelgrandin: so what you call a pool is actually the
SfxItemSet?
May 02 14:25:20 <noelgrandin> erAck, no, the SfxItemSet is itself also an
item in a pool
May 02 14:25:41 <noelgrandin> erAck, sorry, that should be SfxSetItem (which
contains an SfxItemSet)
May 02 14:25:53 <noelgrandin> all rather confusing
May 02 14:27:10 <noelgrandin> anyhow, just a load-time perf improvement,
backing it out no big deal</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are the assignee for the bug.</li>
</ul>
</body>
</html>