Add a helper function for clock_gettime
authorPeter Hutterer <peter.hutterer@who-t.net>
Mon, 1 Sep 2014 06:47:28 +0000 (16:47 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Thu, 18 Sep 2014 01:30:15 +0000 (11:30 +1000)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
src/evdev.c
src/libinput-private.h
src/libinput-util.h
src/timer.c

index e24e2680695703d0d5af7ada1153518e188cc105..721238f856d1084e9c5e0b74422c3201c624e985 100644 (file)
@@ -1135,16 +1135,11 @@ static void
 release_pressed_keys(struct evdev_device *device)
 {
        struct libinput *libinput = device->base.seat->libinput;
-       struct timespec ts;
        uint64_t time;
        int code;
 
-       if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) {
-               log_bug_libinput(libinput, "clock_gettime: %s\n", strerror(errno));
+       if ((time = libinput_now(libinput)) == 0)
                return;
-       }
-
-       time = ts.tv_sec * 1000ULL + ts.tv_nsec / 1000000;
 
        for (code = 0; code < KEY_CNT; code++) {
                if (get_key_down_count(device, code) > 0) {
index 9e084dd7c61ff30a0d98e00ce51d2b09acb81f63..cb90a1589616539cae343d67014f9588bcba8efe 100644 (file)
@@ -23,6 +23,8 @@
 #ifndef LIBINPUT_PRIVATE_H
 #define LIBINPUT_PRIVATE_H
 
+#include <errno.h>
+
 #include "linux/input.h"
 
 #include "libinput.h"
@@ -229,4 +231,17 @@ touch_notify_touch_up(struct libinput_device *device,
 void
 touch_notify_frame(struct libinput_device *device,
                   uint32_t time);
+
+static inline uint64_t
+libinput_now(struct libinput *libinput)
+{
+       struct timespec ts = { 0, 0 };
+
+       if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) {
+               log_error(libinput, "clock_gettime failed: %s\n", strerror(errno));
+               return 0;
+       }
+
+       return ts.tv_sec * 1000ULL + ts.tv_nsec / 1000000;
+}
 #endif /* LIBINPUT_PRIVATE_H */
index f8072108d8f3f5aa8b7795e1858abbce008d44e6..51759e87f51f065ae6d85772f39636b4dc387e07 100644 (file)
@@ -26,6 +26,7 @@
 #include <unistd.h>
 #include <math.h>
 #include <string.h>
+#include <time.h>
 
 #include "libinput.h"
 
index ad0fd7c811ff8f4b47b1b0944bcb297f2af4ee62..f6c8e427679be2ef347e8abda1837dc7cb2ff45b 100644 (file)
@@ -67,19 +67,12 @@ void
 libinput_timer_set(struct libinput_timer *timer, uint64_t expire)
 {
 #ifndef NDEBUG
-       struct timespec ts;
-
-       if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
-               uint64_t now = ts.tv_sec * 1000ULL + ts.tv_nsec / 1000000;
-               if (abs(expire - now) > 5000)
-                       log_bug_libinput(timer->libinput,
-                                        "timer offset more than 5s, now %"
-                                        PRIu64 " expire %" PRIu64 "\n",
-                                        now, expire);
-       } else {
-               log_error(timer->libinput,
-                         "clock_gettime error: %s\n", strerror(errno));
-       }
+       uint64_t now = libinput_now(timer->libinput);
+       if (abs(expire - now) > 5000)
+               log_bug_libinput(timer->libinput,
+                                "timer offset more than 5s, now %"
+                                PRIu64 " expire %" PRIu64 "\n",
+                                now, expire);
 #endif
 
        assert(expire);
@@ -107,17 +100,11 @@ libinput_timer_handler(void *data)
 {
        struct libinput *libinput = data;
        struct libinput_timer *timer, *tmp;
-       struct timespec ts;
        uint64_t now;
-       int r;
 
-       r = clock_gettime(CLOCK_MONOTONIC, &ts);
-       if (r) {
-               log_error(libinput, "clock_gettime error: %s\n", strerror(errno));
+       now = libinput_now(libinput);
+       if (now == 0)
                return;
-       }
-
-       now = ts.tv_sec * 1000ULL + ts.tv_nsec / 1000000;
 
        list_for_each_safe(timer, tmp, &libinput->timer.list, link) {
                if (timer->expire <= now) {