[PATCH xserver 5/5] ephyr: Process only the last expose or configure available from the server

Keith Packard keithp at keithp.com
Tue Jun 14 21:02:51 UTC 2016


Delay expose or configure processing until the event queue is empty so
that we don't end up processing a long series of events one at a
time. Expose events already have a check waiting for the last in a
series, this further improves that by discarding multiple
series of events.

Signed-off-by: Keith Packard <keithp at keithp.com>
---
 hw/kdrive/ephyr/ephyr.c | 27 ++++++++++++++++++++++-----
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c
index 015aef5..d7948e8 100644
--- a/hw/kdrive/ephyr/ephyr.c
+++ b/hw/kdrive/ephyr/ephyr.c
@@ -1141,6 +1141,7 @@ static void
 ephyrXcbProcessEvents(Bool queued_only)
 {
     xcb_connection_t *conn = hostx_get_xcbconn();
+    xcb_generic_event_t *expose = NULL, *configure = NULL;
 
     while (TRUE) {
         xcb_generic_event_t *xev = hostx_get_event(queued_only);
@@ -1164,7 +1165,9 @@ ephyrXcbProcessEvents(Bool queued_only)
             break;
 
         case XCB_EXPOSE:
-            ephyrProcessExpose(xev);
+            free(expose);
+            expose = xev;
+            xev = NULL;
             break;
 
         case XCB_MOTION_NOTIFY:
@@ -1188,14 +1191,28 @@ ephyrXcbProcessEvents(Bool queued_only)
             break;
 
         case XCB_CONFIGURE_NOTIFY:
-            ephyrProcessConfigureNotify(xev);
+            free(configure);
+            configure = xev;
+            xev = NULL;
             break;
         }
 
-        if (ephyr_glamor)
-            ephyr_glamor_process_event(xev);
+        if (xev) {
+            if (ephyr_glamor)
+                ephyr_glamor_process_event(xev);
+
+            free(xev);
+        }
+    }
+
+    if (configure) {
+        ephyrProcessConfigureNotify(configure);
+        free(configure);
+    }
 
-        free(xev);
+    if (expose) {
+        ephyrProcessExpose(expose);
+        free(expose);
     }
 }
 
-- 
2.8.1



More information about the xorg-devel mailing list