xf86-video-intel: 3 commits - src/sna/sna_damage.c

Chris Wilson ickle at kemper.freedesktop.org
Tue Jun 12 14:55:14 PDT 2012


 src/sna/sna_damage.c |   71 +++++++++++++++++++++++++++++++++------------------
 1 file changed, 47 insertions(+), 24 deletions(-)

New commits:
commit 572745eb243a96819c8fa248f4ffdd703ed13b0f
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Jun 12 22:49:05 2012 +0100

    sna/damage: Remove unused return value
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_damage.c b/src/sna/sna_damage.c
index e563db2..1ea9e3c 100644
--- a/src/sna/sna_damage.c
+++ b/src/sna/sna_damage.c
@@ -154,7 +154,7 @@ static const char *_debug_describe_damage(char *buf, int max,
 
 #endif
 
-static struct sna_damage_box *
+static void
 reset_embedded_box(struct sna_damage *damage)
 {
 	damage->dirty = false;
@@ -162,8 +162,6 @@ reset_embedded_box(struct sna_damage *damage)
 	damage->embedded_box.size =
 		damage->remain = ARRAY_SIZE(damage->embedded_box.box);
 	list_init(&damage->embedded_box.list);
-
-	return (struct sna_damage_box *)&damage->embedded_box;
 }
 
 static struct sna_damage *_sna_damage_create(void)
commit aefc0417dde8b2137a787459a69d91c14902f22b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Jun 12 22:47:41 2012 +0100

    sna/damage: Simplify initialisation of damage extents
    
    Just use the already computed region->extents when adding the first box.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_damage.c b/src/sna/sna_damage.c
index 1cdfe22..e563db2 100644
--- a/src/sna/sna_damage.c
+++ b/src/sna/sna_damage.c
@@ -251,7 +251,7 @@ _sna_damage_create_elt(struct sna_damage *damage,
 	}
 	assert(damage->remain >= 0);
 
-	 return damage;
+	return damage;
 }
 
 static struct sna_damage *
@@ -530,7 +530,12 @@ done:
 
 static void damage_union(struct sna_damage *damage, const BoxRec *box)
 {
-	assert(box->x2 > box->x1 && box->y2 > box>y1);
+	DBG(("%s: extending damage (%d, %d), (%d, %d) by (%d, %d), (%d, %d)\n",
+	     __FUNCTION__,
+	     damage->extents.x1, damage->extents.y1,
+	     damage->extents.x2, damage->extents.y2,
+	     box->x1, box->y1, box->x2, box->y2));
+	assert(box->x2 > box->x1 && box->y2 > box->y1);
 	if (damage->extents.x2 < damage->extents.x1) {
 		damage->extents = *box;
 	} else {
@@ -574,11 +579,11 @@ static struct sna_damage *__sna_damage_add_box(struct sna_damage *damage,
 	switch (REGION_NUM_RECTS(&damage->region)) {
 	case 0:
 		pixman_region_init_rects(&damage->region, box, 1);
-		damage_union(damage, box);
+		damage->extents = *box;
 		return damage;
 	case 1:
 		_pixman_region_union_box(&damage->region, box);
-		damage_union(damage, box);
+		damage->extents = damage->region.extents;
 		return damage;
 	}
 
@@ -613,7 +618,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_union(damage, &region->extents);
+		damage->extents = damage->region.extents;
 		return damage;
 	}
 
commit 78a96e812b912c5b25a02670f603f455f93e9d00
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Jun 12 21:43:31 2012 +0100

    sna: Refresh the damage self-tests
    
    They had bitrotted with the revamp and needed some massaging to update
    to the new interfaces.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_damage.c b/src/sna/sna_damage.c
index dd67364..1cdfe22 100644
--- a/src/sna/sna_damage.c
+++ b/src/sna/sna_damage.c
@@ -236,7 +236,7 @@ _sna_damage_create_elt(struct sna_damage *damage,
 		damage->box += n;
 		damage->remain -= n;
 
-		count -=n;
+		count -= n;
 		boxes += n;
 		if (count == 0)
 			return damage;
@@ -249,6 +249,7 @@ _sna_damage_create_elt(struct sna_damage *damage,
 		damage->box += count;
 		damage->remain -= count;
 	}
+	assert(damage->remain >= 0);
 
 	 return damage;
 }
@@ -276,7 +277,7 @@ _sna_damage_create_elt_from_boxes(struct sna_damage *damage,
 		damage->box += n;
 		damage->remain -= n;
 
-		count -=n;
+		count -= n;
 		boxes += n;
 		if (count == 0)
 			return damage;
@@ -295,6 +296,7 @@ _sna_damage_create_elt_from_boxes(struct sna_damage *damage,
 	}
 	damage->box += count;
 	damage->remain -= count;
+	assert(damage->remain >= 0);
 
 	return damage;
 }
@@ -323,7 +325,7 @@ _sna_damage_create_elt_from_rectangles(struct sna_damage *damage,
 		damage->box += n;
 		damage->remain -= n;
 
-		count -=n;
+		count -= n;
 		r += n;
 		if (count == 0)
 			return damage;
@@ -342,6 +344,7 @@ _sna_damage_create_elt_from_rectangles(struct sna_damage *damage,
 	}
 	damage->box += count;
 	damage->remain -= count;
+	assert(damage->remain >= 0);
 
 	return damage;
 }
@@ -370,7 +373,7 @@ _sna_damage_create_elt_from_points(struct sna_damage *damage,
 		damage->box += n;
 		damage->remain -= n;
 
-		count -=n;
+		count -= n;
 		p += n;
 		if (count == 0)
 			return damage;
@@ -389,6 +392,7 @@ _sna_damage_create_elt_from_points(struct sna_damage *damage,
 	}
 	damage->box += count;
 	damage->remain -= count;
+	assert(damage->remain >= 0);
 
 	return damage;
 }
@@ -526,6 +530,7 @@ done:
 
 static void damage_union(struct sna_damage *damage, const BoxRec *box)
 {
+	assert(box->x2 > box->x1 && box->y2 > box>y1);
 	if (damage->extents.x2 < damage->extents.x1) {
 		damage->extents = *box;
 	} else {
@@ -1004,7 +1009,6 @@ static struct sna_damage *__sna_damage_subtract(struct sna_damage *damage,
 	if (!sna_damage_overlaps_box(damage, &region->extents))
 		return damage;
 
-
 	if (region_is_singular(region) &&
 	    box_contains(&region->extents, &damage->extents)) {
 		__sna_damage_destroy(damage);
@@ -1481,7 +1485,8 @@ static void st_damage_add(struct sna_damage_selftest *test,
 
 	st_damage_init_random_region1(test, &tmp);
 
-	sna_damage_add(damage, &tmp);
+	if (!DAMAGE_IS_ALL(*damage))
+		sna_damage_add(damage, &tmp);
 	pixman_region_union(region, region, &tmp);
 }
 
@@ -1489,15 +1494,14 @@ static void st_damage_add_box(struct sna_damage_selftest *test,
 			      struct sna_damage **damage,
 			      pixman_region16_t *region)
 {
-	BoxRec box;
+	RegionRec r;
 
-	st_damage_init_random_box(test, &box);
+	st_damage_init_random_box(test, &r.extents);
+	r.data = NULL;
 
-	sna_damage_add_box(damage, &box);
-	pixman_region_union_rectangle(region, region,
-				      box.x1, box.y2,
-				      box.x2 - box.x1,
-				      box.y2 - box.y1);
+	if (!DAMAGE_IS_ALL(*damage))
+		sna_damage_add_box(damage, &r.extents);
+	pixman_region_union(region, region, &r);
 }
 
 static void st_damage_subtract(struct sna_damage_selftest *test,
@@ -1512,6 +1516,19 @@ static void st_damage_subtract(struct sna_damage_selftest *test,
 	pixman_region_subtract(region, region, &tmp);
 }
 
+static void st_damage_subtract_box(struct sna_damage_selftest *test,
+				   struct sna_damage **damage,
+				   pixman_region16_t *region)
+{
+	RegionRec r;
+
+	st_damage_init_random_box(test, &r.extents);
+	r.data = NULL;
+
+	sna_damage_subtract_box(damage, &r.extents);
+	pixman_region_subtract(region, region, &r);
+}
+
 static void st_damage_all(struct sna_damage_selftest *test,
 			  struct sna_damage **damage,
 			  pixman_region16_t *region)
@@ -1520,7 +1537,8 @@ static void st_damage_all(struct sna_damage_selftest *test,
 
 	pixman_region_init_rect(&tmp, 0, 0, test->width, test->height);
 
-	sna_damage_all(damage, test->width, test->height);
+	if (!DAMAGE_IS_ALL(*damage))
+		sna_damage_all(damage, test->width, test->height);
 	pixman_region_union(region, region, &tmp);
 }
 
@@ -1531,7 +1549,7 @@ static bool st_check_equal(struct sna_damage_selftest *test,
 	int d_num, r_num;
 	BoxPtr d_boxes, r_boxes;
 
-	d_num = sna_damage_get_boxes(*damage, &d_boxes);
+	d_num = *damage ? sna_damage_get_boxes(*damage, &d_boxes) : 0;
 	r_boxes = pixman_region_rectangles(region, &r_num);
 
 	if (d_num != r_num) {
@@ -1557,6 +1575,7 @@ void sna_damage_selftest(void)
 		st_damage_add,
 		st_damage_add_box,
 		st_damage_subtract,
+		st_damage_subtract_box,
 		st_damage_all
 	};
 	bool (*const check[])(struct sna_damage_selftest *test,
@@ -1569,13 +1588,14 @@ void sna_damage_selftest(void)
 	char damage_buf[1000];
 	int pass;
 
-	for (pass = 0; pass < 1024; pass++) {
+	for (pass = 0; pass < 16384; pass++) {
 		struct sna_damage_selftest test;
 		struct sna_damage *damage;
 		pixman_region16_t ref;
 		int iter, i;
 
-		iter = rand() % 1024;
+		iter = 1 + rand() % (1 + (pass / 64));
+		ErrorF("%s: pass %d, iters=%d\n", __FUNCTION__, pass, iter);
 
 		test.width = 1 + rand() % 2048;
 		test.height = 1 + rand() % 2048;


More information about the xorg-commit mailing list