Mimetype optimization
David Faure
faure at kde.org
Tue Apr 22 22:36:09 CEST 2008
On Tuesday 22 April 2008, Jakub Stachowski wrote:
> Hello,
>
> profiling dolphin while opening /usr/bin shows that about 35% of time is spent
> in QRegExp matching called by kmimefactory.cpp: matchFileName. This function
> already contains optimizations: for some simple (but popular) patterns like
> *.something or something* it uses direct comparision instead of QRegExp big
> gun. It looks like:
> if (pattern like *.something && filename long enough to match the pattern)
> compare directly;.
> However for short names (lots of them in /usr/bin) it often falls back to slow
> path. Attached patch changes is to:
> if (pattern like *.something) {
> if (filename not long enough to match) return false;
> else compare directly;
> }
>
> and detects patterns without wildcards (is checking for *,? and ] enough?)
>
> Results (measured by callgrind):
> Unpatched, for 179 calls to KMimeTypeFactory::findFromFileName
> - 5554 calls to QRegExp::exactMatch, which accounts for 35% of CPU time
>
> Patched, for 150 calls to KMimeTypeFactory::findFromFileName
> - QRegExp matched 13 times. findFromFileName takes 0.67% of CPU time
Wow, excellent. Great find.
If the kdecore/tests/kmimetypetest unit test still passes, please commit :)
--
David Faure, faure at kde.org, sponsored by Trolltech to work on KDE,
Konqueror (http://www.konqueror.org), and KOffice (http://www.koffice.org).
More information about the Kde-optimize
mailing list