[PATCH libinput] evdev: Pass along device overflow information

Peter Hutterer peter.hutterer at who-t.net
Sun Oct 26 21:11:54 PDT 2014


On Fri, Oct 24, 2014 at 01:18:06PM -0500, Derek Foreman wrote:
> Currently libinput users just see choppy input if the kernel event queue
> overflows.  This patch passes along an event so the caller can at least
> log it.

any reason you didn't just log it through libinput if that's all you want to
do?

not a big fan of having an event for what is essentially an implementation
detail in the public API.

Cheers,
   Peter

> ---
>  src/evdev.c            |  1 +
>  src/libinput-private.h |  3 +++
>  src/libinput.c         | 18 ++++++++++++++++++
>  src/libinput.h         |  5 +++++
>  4 files changed, 27 insertions(+)
> 
> diff --git a/src/evdev.c b/src/evdev.c
> index d8e3e5a..157bed7 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -929,6 +929,7 @@ evdev_device_dispatch(void *data)
>  			   to the current state */
>  			ev.code = SYN_REPORT;
>  			evdev_device_dispatch_one(device, &ev);
> +			notify_overflowed_device(&device->base);
>  
>  			rc = evdev_sync_device(device);
>  			if (rc == 0)
> diff --git a/src/libinput-private.h b/src/libinput-private.h
> index 5a975d9..4606565 100644
> --- a/src/libinput-private.h
> +++ b/src/libinput-private.h
> @@ -212,6 +212,9 @@ void
>  notify_removed_device(struct libinput_device *device);
>  
>  void
> +notify_overflowed_device(struct libinput_device *device);
> +
> +void
>  keyboard_notify_key(struct libinput_device *device,
>  		    uint32_t time,
>  		    uint32_t key,
> diff --git a/src/libinput.c b/src/libinput.c
> index 5780a92..81528b7 100644
> --- a/src/libinput.c
> +++ b/src/libinput.c
> @@ -171,6 +171,7 @@ libinput_event_get_pointer_event(struct libinput_event *event)
>  		abort(); /* not used as actual event type */
>  	case LIBINPUT_EVENT_DEVICE_ADDED:
>  	case LIBINPUT_EVENT_DEVICE_REMOVED:
> +	case LIBINPUT_EVENT_DEVICE_OVERFLOW:
>  	case LIBINPUT_EVENT_KEYBOARD_KEY:
>  		break;
>  	case LIBINPUT_EVENT_POINTER_MOTION:
> @@ -197,6 +198,7 @@ libinput_event_get_keyboard_event(struct libinput_event *event)
>  		abort(); /* not used as actual event type */
>  	case LIBINPUT_EVENT_DEVICE_ADDED:
>  	case LIBINPUT_EVENT_DEVICE_REMOVED:
> +	case LIBINPUT_EVENT_DEVICE_OVERFLOW:
>  		break;
>  	case LIBINPUT_EVENT_KEYBOARD_KEY:
>  		return (struct libinput_event_keyboard *) event;
> @@ -223,6 +225,7 @@ libinput_event_get_touch_event(struct libinput_event *event)
>  		abort(); /* not used as actual event type */
>  	case LIBINPUT_EVENT_DEVICE_ADDED:
>  	case LIBINPUT_EVENT_DEVICE_REMOVED:
> +	case LIBINPUT_EVENT_DEVICE_OVERFLOW:
>  	case LIBINPUT_EVENT_KEYBOARD_KEY:
>  	case LIBINPUT_EVENT_POINTER_MOTION:
>  	case LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE:
> @@ -248,6 +251,7 @@ libinput_event_get_device_notify_event(struct libinput_event *event)
>  		abort(); /* not used as actual event type */
>  	case LIBINPUT_EVENT_DEVICE_ADDED:
>  	case LIBINPUT_EVENT_DEVICE_REMOVED:
> +	case LIBINPUT_EVENT_DEVICE_OVERFLOW:
>  		return (struct libinput_event_device_notify *) event;
>  	case LIBINPUT_EVENT_KEYBOARD_KEY:
>  	case LIBINPUT_EVENT_POINTER_MOTION:
> @@ -831,6 +835,20 @@ notify_removed_device(struct libinput_device *device)
>  }
>  
>  void
> +notify_overflowed_device(struct libinput_device *device)
> +{
> +	struct libinput_event_device_notify *overflowed_device_event;
> +
> +	overflowed_device_event = zalloc(sizeof *overflowed_device_event);
> +	if (!overflowed_device_event)
> +		return;
> +
> +	post_base_event(device,
> +			LIBINPUT_EVENT_DEVICE_OVERFLOW,
> +			&overflowed_device_event->base);
> +}
> +
> +void
>  keyboard_notify_key(struct libinput_device *device,
>  		    uint32_t time,
>  		    uint32_t key,
> diff --git a/src/libinput.h b/src/libinput.h
> index 9cc6f52..39c9f92 100644
> --- a/src/libinput.h
> +++ b/src/libinput.h
> @@ -230,6 +230,11 @@ enum libinput_event_type {
>  	 */
>  	LIBINPUT_EVENT_DEVICE_REMOVED,
>  
> +	/**
> +	 * Signals that the kernel event queue for the device has overflowed.
> +	 */
> +	LIBINPUT_EVENT_DEVICE_OVERFLOW,
> +
>  	LIBINPUT_EVENT_KEYBOARD_KEY = 300,
>  
>  	LIBINPUT_EVENT_POINTER_MOTION = 400,
> -- 
> 2.1.1
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
> 


More information about the wayland-devel mailing list