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 | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/evdev.c b/src/evdev.c
index 1b4ce10..c786537 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -912,6 +912,7 @@ evdev_sync_device(struct evdev_device *device)
 static void
 evdev_device_dispatch(void *data)
 {
+       static int overflows = 0;
        struct evdev_device *device = data;
        struct libinput *libinput = device->base.seat->libinput;
        struct input_event ev;
@@ -924,6 +925,15 @@ evdev_device_dispatch(void *data)
                rc = libevdev_next_event(device->evdev,
                                         LIBEVDEV_READ_FLAG_NORMAL, &ev);
                if (rc == LIBEVDEV_READ_STATUS_SYNC) {
+                       if (overflows < 10) {
+                               overflows++;
+                               log_info(libinput, "Kernel evdev event queue "
+                                        "overflow for %s\n", device->devname);
+                               if (overflows == 10)
+                                       log_info(libinput, "No longer logging "
+                                                "evdev event queue 
overflows\n");
+                       }
+
                        /* send one more sync event so we handle all
                           currently pending events before we sync up
                           to the current state */
-- 
2.1.1

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to