Snap wayland damage reports to the bounding box

This commit is contained in:
Adam Jackson 2013-10-09 13:57:22 -04:00
parent b147e318f9
commit 75e761ff34
2 changed files with 64 additions and 1 deletions

View File

@ -0,0 +1,59 @@
From a655c446880613e17c3b91e66a7f7ac125f62228 Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax@redhat.com>
Date: Tue, 8 Oct 2013 13:54:27 -0400
Subject: [PATCH] xwayland: Just send the bounding box of the damage
... instead of every rect. Most window updates are going to be CopyArea
in from offscreen, with plenty of time to get back around to
BlockHandler in between, so this is no change there. However for
pathological apps like x11perf that draw complicated primitives directly
to the window you can end up with massive numbers of damage rects, and
you can run out of space in the write buffer and crash.
This obviously isn't a complete fix, and it would be nice to handle this
more gracefully in the wayland client code, but this at least lets
x11perf -all run to completion.
While we're in the area, rearrange attach to be before damage, not
after, since the spec says that's the correct order.
Signed-off-by: Adam Jackson <ajax@redhat.com>
---
hw/xfree86/xwayland/xwayland.c | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/hw/xfree86/xwayland/xwayland.c b/hw/xfree86/xwayland/xwayland.c
index c70a52d..c10a213 100644
--- a/hw/xfree86/xwayland/xwayland.c
+++ b/hw/xfree86/xwayland/xwayland.c
@@ -333,22 +333,18 @@ void xwl_screen_post_damage(struct xwl_screen *xwl_screen)
struct xwl_window *xwl_window;
RegionPtr region;
BoxPtr box;
- int count, i;
xorg_list_for_each_entry(xwl_window, &xwl_screen->damage_window_list,
link_damage) {
region = DamageRegion(xwl_window->damage);
- count = RegionNumRects(region);
- 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);
- }
wl_surface_attach(xwl_window->surface,
xwl_window->buffer,
0, 0);
+ box = &region->extents;
+ wl_surface_damage(xwl_window->surface,
+ box->x1, box->y1,
+ box->x2 - box->x1,
+ box->y2 - box->y1);
wl_surface_commit(xwl_window->surface);
DamageEmpty(xwl_window->damage);
}
--
1.8.3.1

View File

@ -42,7 +42,7 @@
Summary: X.Org X11 X server
Name: xorg-x11-server
Version: 1.14.3
Release: 4%{?gitdate:.%{gitdate}}%{dist}
Release: 5%{?gitdate:.%{gitdate}}%{dist}
URL: http://www.x.org
License: MIT
Group: User Interface/X
@ -153,6 +153,7 @@ Patch9028: 0028-os-Also-define-ListenOnOpenFD-and-AddClientOnOpenFD-.patch
Patch9029: 0029-xwayland-Remove-unused-variables.patch
Patch9030: 0030-xwayland-Use-a-per-screen-private-key-for-cursor-pri.patch
Patch9031: 0001-xfree86-Only-look-at-wayland-capable-drivers-when-wa.patch
Patch9032: 0001-xwayland-Just-send-the-bounding-box-of-the-damage.patch
%global moduledir %{_libdir}/xorg/modules
%global drimoduledir %{_libdir}/dri
@ -632,6 +633,9 @@ rm -rf $RPM_BUILD_ROOT
%{xserver_source_dir}
%changelog
* Tue Oct 08 2013 Adam Jackson <ajax@redhat.com> 1.14.3-5
- Snap wayland damage reports to the bounding box
* Thu Oct 03 2013 Adam Jackson <ajax@redhat.com> 1.14.3-4
- Fix up fixing up the driver list after filtering out non-wayland