-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/111050/
-----------------------------------------------------------

(Updated June 23, 2013, 6:12 p.m.)


Review request for kdelibs, David Faure and Frank Reininghaus.


Changes
-------

Updated the patch to reflect all comments.
The good news, it's still faster then the current fast mime detection. The bad 
news is that it's only 2x faster.

The tests pass just fine.

One note, the function: "KMimeTypePrivate::iconName" is now the one slowing 
everything down mostly because of the QHash. Removing it and returning the icon 
directly will make this patch 5x faster over the current code. That obviously 
isn't an option since that menas removing functionality (which i kinda missed 
the first time. Thanks David for pointing me to that).

As the code sits now it's just 2x faster. It certainly is a lot less intrusive 
now. It's up to you guys if i merge this or discard it.


Summary (updated)
-----------------

Fast mime detection speedup.


Description
-------

Hi,

I've recently seen Frank Reininghaus do his best in speeding up the rendering 
in dolphin with regards to the app icons. And trying to prevent icon flickering 
between "unknown" and the actual icon.

While reading his posts on the mailing list i was beginning to wonder: "is fast 
mime detection actually fast"? While it was certainly faster then "slow" mime 
detection, it still didn't really seem fast to me. A small benchmark app hat 
ran fast mime detection in /usr/bin took ~40ms to complete. That's for just 
2656 items.

After quite a bit of profiling i managed to to bring the duration down from 
~40ms to ~3ms sometimes ~4ms. That's well over 10x faster.
Mime detection by extension (like "file.tar.bz") is done as follows:

file.tar.bz
Loop - find first dot
- "tar.gz"
if that matches a mime type then it's returned if it doesn't then it proceeds 
on to the next dot:
- next dot: "gz"
if that matches.. return.
Otherwise it will return the default mime type.

I am getting an inconsistency. Using the unpatched fast mime detection on a 
file like: "test.tar.gz" gets detected as "application-x-compressed-tar" where 
the patched version detects it as "application-gzip". The slow and detailed 
mime detection detects the same file as "application-x-compressed-tar". What 
should it be? application-gzip or application-x-compressed-tar?

Note: This improved detection does expect folders to end with a "/". Otherwise 
they will be detected as application-octet-stream (the default). But i think 
this is common sense to let folders end with a "/". If any apps that don't do 
that, they should fix it i suppose.

Best thing, it's all internal and private api change. No public function is 
changed.

All feedback is welcome! If possible, i would like to put this in KDE 4.11.


Diffs (updated)
-----

  kdecore/services/kmimetype.h bc35bcf 
  kdecore/services/kmimetype.cpp d748523 
  kdecore/services/kmimetyperepository.cpp f56f48e 

Diff: http://git.reviewboard.kde.org/r/111050/diff/


Testing (updated)
-------

Tested this using just output comparison between the old version and the new 
implementation. It works just fine.
kurlmimetest output:
********* Start testing of KUrlMimeTest *********
Config: Using QTest library 4.8.4, Qt 4.8.4
PASS   : KUrlMimeTest::initTestCase()
PASS   : KUrlMimeTest::testURLList()
PASS   : KUrlMimeTest::testOneURL()
PASS   : KUrlMimeTest::testFromQUrl()
PASS   : KUrlMimeTest::testMostLocalUrlList()
PASS   : KUrlMimeTest::cleanupTestCase()
Totals: 6 passed, 0 failed, 0 skipped
********* Finished testing of KUrlMimeTest *********


Thanks,

Mark Gaiser

Reply via email to