[Pixman] [PATCH 1/1] Disable implementations mentioned in the PIXMAN_DISABLE environment variable.
Matt Turner
mattst88 at gmail.com
Sun Feb 26 07:12:47 PST 2012
On Sat, Feb 25, 2012 at 9:39 PM, Søren Sandmann <sandmann at cs.au.dk> wrote:
> From: Søren Sandmann Pedersen <ssp at redhat.com>
>
> With this, it becomes possible to do
>
> PIXMAN_DISABLE="sse2 mmx" some_app
>
> which will run some_app without SSE2 and MMX enabled. This is useful
> for benchmarking, testing and narrowing down bugs.
> ---
> pixman/pixman-cpu.c | 44 ++++++++++++++++++++++++++++++++------------
> 1 files changed, 32 insertions(+), 12 deletions(-)
>
> diff --git a/pixman/pixman-cpu.c b/pixman/pixman-cpu.c
> index fcf591a..ba89df5 100644
> --- a/pixman/pixman-cpu.c
> +++ b/pixman/pixman-cpu.c
> @@ -24,6 +24,7 @@
> #endif
>
> #include <string.h>
> +#include <stdlib.h>
>
> #if defined(USE_ARM_SIMD) && defined(_MSC_VER)
> /* Needed for EXCEPTION_ILLEGAL_INSTRUCTION */
> @@ -328,7 +329,6 @@ pixman_arm_read_auxv_or_cpu_features ()
>
> #elif defined (__linux__) /* linux ELF */
>
> -#include <stdlib.h>
> #include <unistd.h>
> #include <sys/types.h>
> #include <sys/stat.h>
> @@ -711,51 +711,71 @@ pixman_have_sse2 (void)
> #endif /* __amd64__ */
> #endif
>
> +static pixman_bool_t
> +disabled (const char *name)
> +{
> + const char *e;
> +
> + if ((e = getenv ("PIXMAN_DISABLE")))
> + {
> + if (strstr (e, name))
> + {
> + printf ("pixman: disabled %s implementation\n", name);
> + return TRUE;
> + }
> + }
> +
> + return FALSE;
> +}
> +
> pixman_implementation_t *
> _pixman_choose_implementation (void)
> {
> pixman_implementation_t *imp;
>
> imp = _pixman_implementation_create_general();
> - imp = _pixman_implementation_create_fast_path (imp);
> -
> +
> + if (!disabled ("fast"))
> + imp = _pixman_implementation_create_fast_path (imp);
> +
> #ifdef USE_X86_MMX
> - if (pixman_have_mmx ())
> + if (pixman_have_mmx () && !disabled ("mmx"))
> imp = _pixman_implementation_create_mmx (imp);
> #endif
>
> #ifdef USE_SSE2
> - if (pixman_have_sse2 ())
> + if (pixman_have_sse2 () && !disabled ("sse2"))
> imp = _pixman_implementation_create_sse2 (imp);
> #endif
>
> #ifdef USE_ARM_SIMD
> - if (pixman_have_arm_simd ())
> + if (pixman_have_arm_simd () && !disabled ("arm-simd"))
> imp = _pixman_implementation_create_arm_simd (imp);
> #endif
>
> #ifdef USE_ARM_IWMMXT
> - if (pixman_have_arm_iwmmxt ())
> + if (pixman_have_arm_iwmmxt () && !disabled ("arm-iwmmxt"))
> imp = _pixman_implementation_create_mmx (imp);
> #endif
>
> #ifdef USE_ARM_NEON
> - if (pixman_have_arm_neon ())
> + if (pixman_have_arm_neon () && !disabled ("arm-neon"))
> imp = _pixman_implementation_create_arm_neon (imp);
> #endif
>
> #ifdef USE_MIPS_DSPR2
> - if (pixman_have_mips_dspr2 ())
> + if (pixman_have_mips_dspr2 () && !disabled ("mips-dspr2"))
> imp = _pixman_implementation_create_mips_dspr2 (imp);
> #endif
>
> #ifdef USE_VMX
> - if (pixman_have_vmx ())
> + if (pixman_have_vmx () && !disabled ("vmx"))
> imp = _pixman_implementation_create_vmx (imp);
> #endif
>
> - imp = _pixman_implementation_create_noop (imp);
> -
> + if (!disabled ("noop"))
> + imp = _pixman_implementation_create_noop (imp);
> +
> return imp;
> }
>
> --
> 1.6.0.6
Indeed, this is very useful.
I often seen if (!disabled(envvar) && supported()) where the disabling
check is first in the if-statement. That's the only suggestion I have.
Otherwise, this looks like a good change.
Reviewed-by: Matt Turner <mattst88 at gmail.com>
More information about the Pixman
mailing list