From 06d7574d7da047a6314be5af27f4ac47ccd5a350 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 20 Oct 2011 21:38:30 +0100 Subject: sna/damage: Stash the last freed damage for quick reallocation Signed-off-by: Chris Wilson --- src/sna/sna_damage.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/sna/sna_damage.c b/src/sna/sna_damage.c index 0194f5ca..7a97c373 100644 --- a/src/sna/sna_damage.c +++ b/src/sna/sna_damage.c @@ -48,6 +48,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * cheapy discard no-ops. */ +static struct sna_damage *__freed_damage; + #if DEBUG_DAMAGE #undef DBG #define DBG(x) ErrorF x @@ -146,7 +148,11 @@ static struct sna_damage *_sna_damage_create(void) { struct sna_damage *damage; - damage = malloc(sizeof(*damage)); + if (__freed_damage) { + damage = __freed_damage; + __freed_damage = NULL; + } else + damage = malloc(sizeof(*damage)); damage->n = 0; damage->size = 16; damage->elts = malloc(sizeof(*damage->elts) * damage->size); @@ -958,7 +964,10 @@ void __sna_damage_destroy(struct sna_damage *damage) free_list(&damage->boxes); pixman_region_fini(&damage->region); - free(damage); + if (__freed_damage == NULL) + __freed_damage = damage; + else + free(damage); } #if DEBUG_DAMAGE && TEST_DAMAGE -- cgit v1.2.3