[KPhotoAlbum] More on thumbnails
Robert Krawitz
rlk at alum.mit.edu
Fri May 18 12:52:27 BST 2018
On Fri, 18 May 2018 06:58:33 +0200, Tobias Leupold wrote:
> Nice work :-) Don't forget to create a branch and push your changes
> from time to time!
What are the testing etc. expectations?
> Am Freitag, 18. Mai 2018, 03:20:31 CEST schrieb Robert Krawitz:
>> There are some really serious problems in the thumbnail cache code:
>>
>> 1) It misuses timers. Timers can only be started and stopped in the
>> same thread. Even putting them all in the same function is not
>> good enough, if that function can be called from different threads;
>> with the multi-threaded nature of thumbnail building, calling
>> ThumbnailCache::save() directly means it can be called from
>> multiple threads.
>>
>> The practical impact is that the 1-second timer for thumbnail
>> saving accomplished nothing, because the timer was seldom getting
>> started (or stopped).
>>
>> The solution is to never call save() directly; always call it
>> indirectly through emitting a signal.
>>
>> 2) The thumbnail cache itself is saved very inefficiently; it's
>> written in full to a temporary file, which is then copied (yes,
>> copied, not renamed) to the real file. Even with a big database,
>> such as my own (270,303 images) that's probably not killing me with
>> I/O, but it's a lot of work to be doing every 100 images.
>>
>> I'm changing it to do an incremental save where possible. That
>> technically violates the intent of the file format, which stores
>> the most recently written file and offset as well as the image
>> count, but those can be reconstituted on cache reload easily
>> enough.
>>
>> Also, in order to do that, I had to add an additional list of
>> unsaved files (auto-save list). And there's no good reason for the
>> data structure to be a QMap; a QHash is faster, and ordering
>> doesn't matter in the cache.
>>
>> 3) The save() routine wasn't protected by a mutex; with multiple
>> threads processing thumbnails, I'm not sure how we didn't get a lot
>> of data corruption in the index cache.
>>
>> I'm working on all of these problems.
--
Robert Krawitz <rlk at alum.mit.edu>
*** MIT Engineers A Proud Tradition http://mitathletics.com ***
Member of the League for Programming Freedom -- http://ProgFree.org
Project lead for Gutenprint -- http://gimp-print.sourceforge.net
"Linux doesn't dictate how I work, I dictate how Linux works."
--Eric Crampton
More information about the Kphotoalbum
mailing list