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.hutte...@who-t.net>

Looks good to me:

Reviewed-by: Hans de Goede <hdego...@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)

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

Reply via email to