Commit 828887b6 authored by Keith Packard's avatar Keith Packard

ephyr: Process only the last expose or configure available from the server

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's avatarKeith Packard <keithp@keithp.com>
Reviewed-by: Adam Jackson's avatarAdam Jackson <ajax@redhat.com>
parent c17a4179
......@@ -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);
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment