emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Image transforms as a benchmark?


From: Alan Third
Subject: Re: Image transforms as a benchmark?
Date: Sun, 12 Sep 2021 13:12:04 +0100

On Sun, Sep 12, 2021 at 01:45:39PM +0200, Arthur Miller wrote:
> 
> I tried to make another little benchmark, I saw with optimization flags, that
> quite some loops have got unrolled and vectorized in image.c, so I wanted to 
> see
> if it matters when doing some transforms on images. I tested so far just with
> svg.
> 
> I wonder if image-rotate is handled completely by external libraries? I see
> no effect on performance, regardless of how many time I rotate some image. Is 
> it
> same situation for scaling down? I see big difference when scaling up images 
> so
> I guess that is handled by Emacs own code?

SVG is probably not a great example for testing image transforms, at
least if you're using the master branch.

Image scaling in SVG is handled at the time the image is rasterized,
so if you ask for the image to be doubled in size, the rasterizer
creates a bitmap that is twice the size.

A PNG, for example, is not scaled in this way. When we ask the
graphics toolkit to draw it, we ask for to draw it at twice the size.
Ideally this should be done in the graphics hardware, so Emacs only
ever handles the unscaled image data.

The same holds for rotation for both SVG and bitmap formats. The
toolkit is asked to perform the final rotation, ideally in hardware.

I say toolkit, but in X it's actually the X server itself we ask
through XRender, which as described above should hand that off to the
graphics hardware.

I'm unsure what loops might be unrolled within image.c, I'd guess it's
probably loops relating to creating images and image masks.

You could perhaps try stepping through the frames of an animated GIF.
Our rendering algorithm is rather... inefficient.
-- 
Alan Third



reply via email to

[Prev in Thread] Current Thread [Next in Thread]