[PATCH libinput 01/17] Add a helper function for clock_gettime

Peter Hutterer peter.hutterer at who-t.net
Tue Sep 2 19:02:52 PDT 2014


Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 src/evdev.c            |  7 +------
 src/libinput-private.h | 15 +++++++++++++++
 src/libinput-util.h    |  1 +
 src/timer.c            | 29 ++++++++---------------------
 4 files changed, 25 insertions(+), 27 deletions(-)

diff --git a/src/evdev.c b/src/evdev.c
index e24e268..721238f 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -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) {
diff --git a/src/libinput-private.h b/src/libinput-private.h
index 9e084dd..cb90a15 100644
--- a/src/libinput-private.h
+++ b/src/libinput-private.h
@@ -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 */
diff --git a/src/libinput-util.h b/src/libinput-util.h
index f807210..51759e8 100644
--- a/src/libinput-util.h
+++ b/src/libinput-util.h
@@ -26,6 +26,7 @@
 #include <unistd.h>
 #include <math.h>
 #include <string.h>
+#include <time.h>
 
 #include "libinput.h"
 
diff --git a/src/timer.c b/src/timer.c
index ad0fd7c..f6c8e42 100644
--- a/src/timer.c
+++ b/src/timer.c
@@ -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) {
-- 
1.9.3



More information about the wayland-devel mailing list