summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Jackson <ajax@redhat.com>2014-07-02 12:09:52 -0400
committerJasper St. Pierre <jstpierre@mecheye.net>2014-09-11 23:40:30 -0600
commitd3427717f2c6a473dc3d20631dff653e4e37228e (patch)
treed32036f74b9a2588d6c488a34affc3e7a5ddbe62
parent5ecc0315a2b9bea44ace886f5706a7a3f5cbc4f6 (diff)
xwayland: Snap damage reports to the bounding box
Instead of sending every little rect. Lets x11perf run to completion, makes 'while true; do gtkperf -a; done' take longer to crash. This is effectively a resend of the same logic against the old xfree86+xwayland branch: http://lists.x.org/archives/xorg-devel/2013-October/038453.html Reviewed-by: Daniel Stone <daniel@fooishbar.org> Reviewed-by: Kristian Høgsberg <krh@bitplanet.net> Signed-off-by: Adam Jackson <ajax@redhat.com>
-rw-r--r--hw/xwayland/xwayland.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
index e0ae2a957..913296947 100644
--- a/hw/xwayland/xwayland.c
+++ b/hw/xwayland/xwayland.c
@@ -342,7 +342,6 @@ xwl_screen_post_damage(struct xwl_screen *xwl_screen)
struct xwl_window *xwl_window, *next_xwl_window;
RegionPtr region;
BoxPtr box;
- int count, i;
struct wl_buffer *buffer;
PixmapPtr pixmap;
@@ -354,8 +353,6 @@ xwl_screen_post_damage(struct xwl_screen *xwl_screen)
continue;
region = DamageRegion(xwl_window->damage);
- count = RegionNumRects(region);
-
pixmap = (*xwl_screen->screen->GetWindowPixmap) (xwl_window->window);
#if GLAMOR_HAS_GBM
@@ -366,12 +363,10 @@ xwl_screen_post_damage(struct xwl_screen *xwl_screen)
buffer = xwl_shm_pixmap_get_wl_buffer(pixmap);
wl_surface_attach(xwl_window->surface, buffer, 0, 0);
- for (i = 0; i < count; i++) {
- box = &RegionRects(region)[i];
- wl_surface_damage(xwl_window->surface,
- box->x1, box->y1,
- box->x2 - box->x1, box->y2 - box->y1);
- }
+
+ box = RegionExtents(region);
+ wl_surface_damage(xwl_window->surface, box->x1, box->y1,
+ box->x2 - box->x1, box->y2 - box->y1);
xwl_window->frame_callback = wl_surface_frame(xwl_window->surface);
wl_callback_add_listener(xwl_window->frame_callback, &frame_listener, xwl_window);