Log a message when the kernel event queue overflows and events are dropped. After 10 messages logging stops to avoid flooding the logs if the condition is persistent. --- src/evdev.c | 11 +++++++++++ src/evdev.h | 4 ++++ 2 files changed, 15 insertions(+)
diff --git a/src/evdev.c b/src/evdev.c index 1b4ce10..9026f5c 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -924,6 +924,17 @@ evdev_device_dispatch(void *data) rc = libevdev_next_event(device->evdev, LIBEVDEV_READ_FLAG_NORMAL, &ev); if (rc == LIBEVDEV_READ_STATUS_SYNC) { + if (device->syn_drops_received < 10) { + device->syn_drops_received++; + log_info(libinput, "SYN_DROPPED event from " + "\"%s\" - some input events have " + "been lost.\n", device->devname); + if (device->syn_drops_received == 10) + log_info(libinput, "No longer logging " + "SYN_DROPPED events for " + "\"%s\"\n", device->devname); + } + /* send one more sync event so we handle all currently pending events before we sync up to the current state */ diff --git a/src/evdev.h b/src/evdev.h index c0d6577..9e84623 100644 --- a/src/evdev.h +++ b/src/evdev.h @@ -135,6 +135,10 @@ struct evdev_device { /* Checks if buttons are down and commits the setting */ void (*change_to_left_handed)(struct evdev_device *device); } buttons; + + /* The number of times libevdev processes a SYN_DROPPED, so we can + * stop logging them to avoid flooding the logs. */ + int syn_drops_received; }; #define EVDEV_UNHANDLED_DEVICE ((struct evdev_device *) 1) -- 2.1.1 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel