From deb09d769ae4fc55cde595c170f417692284b3e8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Tue, 19 Jun 2007 12:41:21 -0400 Subject: [PATCH] Add a cache of images to reduce malloc/free time --- pixman/pixman-image.c | 31 +++++++++++++++++++++++++++++-- pixman/pixman-private.h | 1 + 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/pixman/pixman-image.c b/pixman/pixman-image.c index 2bc3ef6..bd50705 100644 --- a/pixman/pixman-image.c +++ b/pixman/pixman-image.c @@ -69,10 +69,37 @@ color_to_uint32 (const pixman_color_t *color) (color->blue >> 8); } +static pixman_image_t *image_cache; + +static pixman_image_t * +new_image (void) +{ + pixman_image_t *image; + + if (image_cache) + { + image = image_cache; + image_cache = image->next; + } + else + { + image = malloc (sizeof (pixman_image_t)); + } + + return image; +} + +static void +delete_image (pixman_image_t *image) +{ + image->next = image_cache; + image_cache = image; +} + static pixman_image_t * allocate_image (void) { - pixman_image_t *image = malloc (sizeof (pixman_image_t)); + pixman_image_t *image = new_image(); if (image) { @@ -145,7 +172,7 @@ pixman_image_unref (pixman_image_t *image) if (image->type == BITS && image->bits.free_me) free (image->bits.free_me); - free (image); + delete_image (image); } } diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h index 9b89dee..d10d7ad 100644 --- a/pixman/pixman-private.h +++ b/pixman/pixman-private.h @@ -260,6 +260,7 @@ union pixman_image conical_gradient_t conical; radial_gradient_t radial; solid_fill_t solid; + pixman_image_t *next; /* Used in the image cache */ }; #define LOG2_BITMAP_PAD 5 -- 2.7.4