Re: Speeding up thumbnail generation (like multi threaded). Thoughts please.
- From: Mark <markg85 gmail com>
- To: "Dr. Michael J. Chudobiak" <mjc avtechpulse com>
- Cc: gtk-devel-list gnome org
- Subject: Re: Speeding up thumbnail generation (like multi threaded). Thoughts please.
- Date: Tue, 29 Sep 2009 18:00:27 +0200
On Mon, Aug 31, 2009 at 4:06 PM, Dr. Michael J. Chudobiak
<mjc avtechpulse com> wrote:
> On 08/31/2009 09:03 AM, jcupitt gmail com wrote:
>>>>
>>>> a very quick load-at-1/8th-size read where it just decompresses enough
>>>> to be able to get the DC component of each 8x8 block. If you use
>>>> libjpeg like this you can expect around a 100x speedup of the
>>>> decompress step.
>>>
>>> The gdk-pixbuf jpeg loader does this already.
>>
>> That's good, but I wonder if this feature is being used? I tried this
>> tiny program:
>
> I believe this is where it happens:
>
> http://git.gnome.org/cgit/gtk+/tree/gdk-pixbuf/io-jpeg.c#n924
>
>
> - Mike
>
I've done some more testing.
The following test results are still with the same 1927 images.
## Thumbnails generated the nautilus way from:
gnome_desktop_thumbnail_factory_generate_thumbnail() and that function
runs: gnome_desktop_thumbnail_scale_down_pixbuf and not
gdk_pixbuf_scale_simple which is odd to say the least
real 2m43.595s
user 2m42.433s
sys 0m0.950s
Lets say this is our current 100%. for the rest of the benchmarks 100%
is the base.
## With the function: gdk_pixbuf_scale_simple
real 2m19.266s
user 2m17.914s
sys 0m1.077s
Note: 117% faster then gnome_desktop_thumbnail_scale_down_pixbuf
## With the function: gdk_pixbuf_new_from_file_at_scale
real 1m14.422s
user 1m13.605s
sys 0m0.787s
Note: 220% faster then gnome_desktop_thumbnail_scale_down_pixbuf
Note 2: 187% faster then gdk_pixbuf_scale_simple
So, the current way: gnome_desktop_thumbnail_scale_down_pixbuf is the
slowest possible way to go out of the available functions to scale a
image down.
Now i'm wondering why that function
gnome_desktop_thumbnail_scale_down_pixbuf has been made in the forst
place.. the comments above it state:
/**
* gnome_thumbnail_scale_down_pixbuf:
* @pixbuf: a #GdkPixbuf
* @dest_width: the desired new width
* @dest_height: the desired new height
*
* Scales the pixbuf to the desired size. This function
* is a lot faster than gdk-pixbuf when scaling down by
* large amounts.
*
* Return value: a scaled pixbuf
*
* Since: 2.2
**/
Well, the benchmarks ran above are resizing 1927 wallpaper sized
images to a max width or height of 200 and that function clearly
loses.
The solution to this is extremely simple. Grab this file:
http://git.gnome.org/cgit/gnome-desktop/tree/libgnome-desktop/gnome-desktop-thumbnail.c
and replace the line:
scaled = gnome_desktop_thumbnail_scale_down_pixbuf (pixbuf,
floor (width * scale + 0.5),
floor (height * scale + 0.5));
with a function that is (a lot) faster.
Now i already did more benchmarking with the last function
(gdk_pixbuf_new_from_file_at_scale) only then threaded and that adds a
major speed boost! with me the time for thumbnailing 1927 images
dropped to 31 seconds (552% faster then the current nautilus way) !
but more on that in a later post.
So, how do we proceed from this point?
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]