[KPhotoAlbum] More on thumbnails
tobias.leupold at gmx.de
Fri May 18 05:58:33 BST 2018
Nice work :-) Don't forget to create a branch and push your changes from time
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
> 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.
More information about the Kphotoalbum