From 4c185503d26374915942d1f64c02134e4a2c5a99 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Tue, 15 Sep 2009 01:14:41 -0400 Subject: [PATCH] Move get_image_info() out of the loop in do_composite The computation of image formats and flags is invariant to the loop, so it can all be moved out. --- pixman/pixman.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/pixman/pixman.c b/pixman/pixman.c index 25f773b..822d7f4 100644 --- a/pixman/pixman.c +++ b/pixman/pixman.c @@ -526,33 +526,34 @@ do_composite (pixman_implementation_t *imp, int width, int height) { + pixman_format_code_t src_format, mask_format, dest_format; + uint32_t src_flags, mask_flags, dest_flags; + + get_image_info (src, &src_format, &src_flags); + get_image_info (mask, &mask_format, &mask_flags); + get_image_info (dest, &dest_format, &dest_flags); + + /* Check for pixbufs */ + if ((mask_format == PIXMAN_a8r8g8b8 || mask_format == PIXMAN_a8b8g8r8) && + (src->type == BITS && src->bits.bits == mask->bits.bits) && + (src->common.repeat == mask->common.repeat) && + (src_x == mask_x && src_y == mask_y)) + { + if (src_format == PIXMAN_x8b8g8r8) + src_format = mask_format = PIXMAN_pixbuf; + else if (src_format == PIXMAN_x8r8g8b8) + src_format = mask_format = PIXMAN_rpixbuf; + } + while (imp) { { - pixman_format_code_t src_format, mask_format, dest_format; - uint32_t src_flags, mask_flags, dest_flags; pixman_composite_func_t func; const pixman_fast_path_t *info; pixman_bool_t result; pixman_region32_t region; pixman_box32_t *extents; - get_image_info (src, &src_format, &src_flags); - get_image_info (mask, &mask_format, &mask_flags); - get_image_info (dest, &dest_format, &dest_flags); - - /* Check for pixbufs */ - if ((mask_format == PIXMAN_a8r8g8b8 || mask_format == PIXMAN_a8b8g8r8) && - (src->type == BITS && src->bits.bits == mask->bits.bits) && - (src->common.repeat == mask->common.repeat) && - (src_x == mask_x && src_y == mask_y)) - { - if (src_format == PIXMAN_x8b8g8r8) - src_format = mask_format = PIXMAN_pixbuf; - else if (src_format == PIXMAN_x8r8g8b8) - src_format = mask_format = PIXMAN_rpixbuf; - } - pixman_region32_init (®ion); if (!pixman_compute_composite_region32 ( -- 2.7.4