From 221534abe2dc04fae8b8fc332104bca275d4863b Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 13 Jun 2012 22:48:43 +0100 Subject: [PATCH] sna: Only reduce damage addition to a region operation if clean Some paths bypass operating upon the region as they do not have an YX-banded set of boxes and so prefer to defer the costly construction of the region till later. As a result, we have to be careful not to overwrite any existing information if we do operate on the region after setting the dirty boxes. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=50744 Reported-by: Zdenek Kabelac Signed-off-by: Chris Wilson --- src/sna/sna_damage.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/sna/sna_damage.c b/src/sna/sna_damage.c index 1ea9e3c0..6149be7f 100644 --- a/src/sna/sna_damage.c +++ b/src/sna/sna_damage.c @@ -574,14 +574,9 @@ static struct sna_damage *__sna_damage_add_box(struct sna_damage *damage, break; } - switch (REGION_NUM_RECTS(&damage->region)) { - case 0: - pixman_region_init_rects(&damage->region, box, 1); - damage->extents = *box; - return damage; - case 1: + if (REGION_NUM_RECTS(&damage->region) <= 1) { _pixman_region_union_box(&damage->region, box); - damage->extents = damage->region.extents; + damage_union(damage, box); return damage; } @@ -616,7 +611,7 @@ inline static struct sna_damage *__sna_damage_add(struct sna_damage *damage, if (REGION_NUM_RECTS(&damage->region) <= 1) { pixman_region_union(&damage->region, &damage->region, region); - damage->extents = damage->region.extents; + damage_union(damage, ®ion->extents); return damage; }