[PATCH libinput] Add log_*_ratelimit wrappers
Hans de Goede
hdegoede at redhat.com
Wed Aug 19 06:25:13 PDT 2015
Hi,
On 19-08-15 07:26, Peter Hutterer wrote:
> Don't open-code the rate-limited log messages, use a simple wrapper instead.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
Looks good to me:
Reviewed-by: Hans de Goede <hdegoede at redhat.com>
Regards,
Hans
> ---
> src/evdev.c | 37 ++++++++-----------------------------
> src/libinput-private.h | 14 ++++++++++++++
> src/libinput.c | 25 +++++++++++++++++++++++++
> 3 files changed, 47 insertions(+), 29 deletions(-)
>
> diff --git a/src/evdev.c b/src/evdev.c
> index 97c007c..303e447 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -647,21 +647,10 @@ evdev_reject_relative(struct evdev_device *device,
>
> if ((e->code == REL_X || e->code == REL_Y) &&
> (device->seat_caps & EVDEV_DEVICE_POINTER) == 0) {
> - switch (ratelimit_test(&device->nonpointer_rel_limit)) {
> - case RATELIMIT_PASS:
> - log_bug_libinput(libinput,
> - "REL_X/Y from device '%s', but this device is not a pointer\n",
> - device->devname);
> - break;
> - case RATELIMIT_THRESHOLD:
> - log_bug_libinput(libinput,
> - "REL_X/Y event flood from '%s'\n",
> - device->devname);
> - break;
> - case RATELIMIT_EXCEEDED:
> - break;
> - }
> -
> + log_bug_libinput_ratelimit(libinput,
> + &device->nonpointer_rel_limit,
> + "REL_X/Y from device '%s', but this device is not a pointer\n",
> + device->devname);
> return true;
> }
>
> @@ -1371,20 +1360,10 @@ evdev_device_dispatch(void *data)
> rc = libevdev_next_event(device->evdev,
> LIBEVDEV_READ_FLAG_NORMAL, &ev);
> if (rc == LIBEVDEV_READ_STATUS_SYNC) {
> - switch (ratelimit_test(&device->syn_drop_limit)) {
> - case RATELIMIT_PASS:
> - log_info(libinput, "SYN_DROPPED event from "
> - "\"%s\" - some input events have "
> - "been lost.\n", device->devname);
> - break;
> - case RATELIMIT_THRESHOLD:
> - log_info(libinput, "SYN_DROPPED flood "
> - "from \"%s\"\n",
> - device->devname);
> - break;
> - case RATELIMIT_EXCEEDED:
> - break;
> - }
> + log_info_ratelimit(libinput,
> + &device->syn_drop_limit,
> + "SYN_DROPPED event from \"%s\" - some input events have been lost.\n",
> + device->devname);
>
> /* send one more sync event so we handle all
> currently pending events before we sync up
> diff --git a/src/libinput-private.h b/src/libinput-private.h
> index 5d0826d..8b161cc 100644
> --- a/src/libinput-private.h
> +++ b/src/libinput-private.h
> @@ -256,6 +256,20 @@ typedef void (*libinput_source_dispatch_t)(void *data);
> #define log_bug_libinput(li_, ...) log_msg((li_), LIBINPUT_LOG_PRIORITY_ERROR, "libinput bug: " __VA_ARGS__)
> #define log_bug_client(li_, ...) log_msg((li_), LIBINPUT_LOG_PRIORITY_ERROR, "client bug: " __VA_ARGS__)
>
> +#define log_debug_ratelimit(li_, r_, ...) log_msg_ratelimit((li_), (r_), LIBINPUT_LOG_PRIORITY_DEBUG, __VA_ARGS__)
> +#define log_info_ratelimit(li_, r_, ...) log_msg_ratelimit((li_), (r_), LIBINPUT_LOG_PRIORITY_INFO, __VA_ARGS__)
> +#define log_error_ratelimit(li_, r_, ...) log_msg_ratelimit((li_), (r_), LIBINPUT_LOG_PRIORITY_ERROR, __VA_ARGS__)
> +#define log_bug_kernel_ratelimit(li_, r_, ...) log_msg_ratelimit((li_), (r_), LIBINPUT_LOG_PRIORITY_ERROR, "kernel bug: " __VA_ARGS__)
> +#define log_bug_libinput_ratelimit(li_, r_, ...) log_msg_ratelimit((li_), (r_), LIBINPUT_LOG_PRIORITY_ERROR, "libinput bug: " __VA_ARGS__)
> +#define log_bug_client_ratelimit(li_, r_, ...) log_msg_ratelimit((li_), (r_), LIBINPUT_LOG_PRIORITY_ERROR, "client bug: " __VA_ARGS__)
> +
> +void
> +log_msg_ratelimit(struct libinput *libinput,
> + struct ratelimit *ratelimit,
> + enum libinput_log_priority priority,
> + const char *format, ...)
> + LIBINPUT_ATTRIBUTE_PRINTF(4, 5);
> +
> void
> log_msg(struct libinput *libinput,
> enum libinput_log_priority priority,
> diff --git a/src/libinput.c b/src/libinput.c
> index 4673073..e564571 100644
> --- a/src/libinput.c
> +++ b/src/libinput.c
> @@ -166,6 +166,31 @@ log_msg(struct libinput *libinput,
> va_end(args);
> }
>
> +void
> +log_msg_ratelimit(struct libinput *libinput,
> + struct ratelimit *ratelimit,
> + enum libinput_log_priority priority,
> + const char *format, ...)
> +{
> + va_list args;
> + enum ratelimit_state state;
> +
> + state = ratelimit_test(ratelimit);
> + if (state == RATELIMIT_EXCEEDED)
> + return;
> +
> + va_start(args, format);
> + log_msg_va(libinput, priority, format, args);
> + va_end(args);
> +
> + if (state == RATELIMIT_THRESHOLD)
> + log_msg(libinput,
> + priority,
> + "WARNING: log rate limit exceeded (%d msgs per %dms). Discarding future messages.\n",
> + ratelimit->burst,
> + us2ms(ratelimit->interval));
> +}
> +
> LIBINPUT_EXPORT void
> libinput_log_set_priority(struct libinput *libinput,
> enum libinput_log_priority priority)
>
More information about the wayland-devel
mailing list