[GSOC] ODS Styles Import Performance Work Update

Daniel Bankston daniel.dev.libreoffice at gmail.com
Fri Aug 17 14:50:59 PDT 2012


Hi, Kohei,

 From what I understand, ScXMLImport::SetStyleToRanges was being called 
for each row.  For each of it's calls, the result was multiple calls to 
where the time was being spent in ScMarkArray::SetMarkArea and 
ScMarkArray::Search.  This is from the call chain of 
ScXMLImport::SetStyleToRanges's use of 
XMLTabelStyleContext::FillPropertySet.

My first goal was to try to reduce the number of 
XMLTabelStyleContext::FillPropertySet calls by only calling it if the 
current style name was different from the previous style name. This way, 
if several rows have the same style, we can just keep saving the ranges 
and then make one call to apply styles for all of those rows.

Unfortunately, that didn't improve performance.  As far as I can tell, 
it just pushed the amount of time that would have been spent on each row 
into one call that took approximately the sum of all of the rows' times.

Ok, I admit I haven't tried to figure out the inner workings of 
ScMarkData and ScMarkArray, but I decided maybe changing what methods we 
use from those classes would help. ScCellRangesBase::GetMarkData uses 
ScMarkData::MarkRangeList where we iterate through an ScRangeList that 
ScCellRangesBase maintains. Each iteration causes multiple calls to 
ScMarkArray::SetMarkArea and Search.

So I used ScRangeList::Combine to create an ScRange and use that range 
with ScMarkData::SetMarkArea.  This combined with my first goal did 
improve import time by 2 or 3 seconds, but I was expecting much more!

With these code changes, callgrind output reveals to me that we are no 
longer spending lots of time in ScMarkData/Array methods (or ScRangeList 
for that matter).  Although we were already spending time in malloc's 
and free's, after these changes, we seem to spend just a little bit more 
time there now.

So I wonder if this means that styles wasn't necessary this file's 
biggest slow down.  No doubt that converting sc style UNO calls would 
help performance at least a bit.  I wonder if the biggest problem now 
for a file like this is xmloff because it's methods are all pretty high 
up there still as far as callgrind time is concerned.   (Strings, 
lookups, etc.)


Respectfully,
Daniel Bankston


More information about the LibreOffice mailing list