[Pixman] Performance regression with pixman 0.40

Ludovic.Desroches at microchip.com Ludovic.Desroches at microchip.com
Fri Jun 4 07:08:29 UTC 2021


Hi,

We are developping a graphics framework called EGT dedicated to Microchip parts:
https://github.com/linux4sam/egt

We are using Cairo, and so Pixman, for the drawing part. Updating our
distribution, we noticed a performance decrease in our benchmark suite, in
the worst case our fps decrease from 200 to 60.

We have identified the move from Pixman 0.38.4 to 0.40 as the cause. I did a
bisect to find which commit impacts us and it's this one:

commit 6fe0131394fb029d2fccaee6b8edcb108840ad8a (refs/bisect/bad)
Author: Federico Mena Quintero <federico at gnome.org>
Date:   Wed Mar 18 18:49:30 2020 -0600

    Initialize temporary buffers in general_composite_rect()
    
    Otherwise, Valgrind shows things like "conditional jump or move
    depends on uninitialised values" errors much later in calling code.
    For example, see https://gitlab.gnome.org/GNOME/librsvg/issues/572
    
    Fixes https://gitlab.freedesktop.org/pixman/pixman/issues/9

diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
index 7d74f98..7e5a0d0 100644
--- a/pixman/pixman-general.c
+++ b/pixman/pixman-general.c
@@ -165,6 +165,12 @@ general_composite_rect  (pixman_implementation_t *imp,
 
        if (!scanline_buffer)
            return;
+
+       memset (scanline_buffer, 0, width * Bpp * 3 + 15 * 3);
+    }
+    else
+    {
+       memset (stack_scanline_buffer, 0, sizeof (stack_scanline_buffer));
     }
 
     src_buffer = ALIGN (scanline_buffer);


I don't know which drawing paths are impacted by this change, I can dig further
if needed. We have 2 benches with small performance decrease for all our
devices: armv5 and armv7. And one bench with huge performance decrease on our
armv5 device. This bench is about drawing circles with alpha blending. Other
benches which draw squares, squares with alpha blending, and circles are not
impacted.

For sure, having an extra memset in the path can explain the performance
decrease.

Do we have to consider that the new scores we get are the valid ones or can we
find an alternative?

Thanks

Regards,
Ludovic


More information about the Pixman mailing list