[Pixman] Performance regression with pixman 0.40
Matt Turner
mattst88 at gmail.com
Tue Jun 15 18:17:48 UTC 2021
Cc'ing the patch author, since I don't think he's subscribed.
On Fri, Jun 4, 2021 at 12:15 AM <Ludovic.Desroches at microchip.com> wrote:
>
> 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
> _______________________________________________
> Pixman mailing list
> Pixman at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/pixman
More information about the Pixman
mailing list