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

(Updated Feb. 23, 2012, 7:21 p.m.)


Review request for kdelibs, David Faure and Michael Pyne.


Changes
-------

Added a check for destination existence.


Description
-------

I was running KWin through callgrind to see where possible bottlenecks are. I 
wasn't expecting much since it improved greatly during the 4.8 dev cycle, 
however one stood out. The saving of PNG images was taking about 1/5th of the 
time in KWin that i could see directly. That looked like something i might be 
able to optimize.

What this patch is doing is storing the actual image bits to prevent saving a 
PNG image to the mmapped cache. That was a hot code path in time (cycles), not 
even in calls. I've also reduced the amount of memory copies to a bare minimum 
by adding a rawFind function to KSharedDataCache which fills a 
QByteArray::fromRawData thus preventing a expensive memory copy. The rawFind is 
used for looking up an image and fetching it's data without copying it. That is 
done because QImage seems to make a copy itself internally. I don't have any 
performance measurements, however, prior to this patch my kwin test was using 
up ~5.000.000.000 cycles. After this patch it's using up 1.370.000.000. I don't 
have raw performance numbers to see if the cache itself is actually faster, it 
certainly has become a lot cheaper to use the cache. Logic wise i would say 
creating a QImage from the cached data should be way faster now since there is 
no step involved anymore in decoding the image. Storing is certainly an order 
of magnitude faster.

Special thanks go to David Faure for helping me a great deal with this.


Diffs (updated)
-----

  kdecore/util/kshareddatacache.h 339cecc 
  kdecore/util/kshareddatacache.cpp 9fe3995 
  kdeui/tests/CMakeLists.txt 63788f6 
  kdeui/tests/kimagecachetests.h PRE-CREATION 
  kdeui/tests/kimagecachetests.cpp PRE-CREATION 
  kdeui/util/kimagecache.cpp a5bbbe1 

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


Testing
-------

I've also written a bunch of test cases (greatly improved by David Faure) to 
see if i didn't break anything. According to the test (which is also comparing 
the actual image bits) it's all passing just fine.


Thanks,

Mark Gaiser

Reply via email to