aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTudor Brindus <me@tbrindus.ca>2020-06-05 17:44:30 -0400
committerSimon Ser <contact@emersion.fr>2020-06-06 00:09:19 +0200
commitdc13bb827d6b7dd40d76ff6f7f3f06688e7d58a0 (patch)
treeae31558d2104b50ba592f2ade2accfa2a1ed9828
parentdcae6f1431dcf8deab1545cf3a251dd1a668ab21 (diff)
util: fix and move `get_current_time_msec` into a util file
This commit makes `get_current_time_msec` correctly return milliseconds as opposed to microseconds. It also considers the value of `tv_sec`, so we don't lose occasionally go back in time by one second. Finally, the function is moved into `util/time.cc` so that it can be reused elsewhere without having to consider these pitfalls.
-rw-r--r--backend/wayland/seat.c7
-rw-r--r--backend/wayland/tablet_v2.c7
-rw-r--r--include/util/time.h9
-rw-r--r--util/meson.build1
-rw-r--r--util/time.c11
5 files changed, 23 insertions, 12 deletions
diff --git a/backend/wayland/seat.c b/backend/wayland/seat.c
index b995dbe5..1fcb93e5 100644
--- a/backend/wayland/seat.c
+++ b/backend/wayland/seat.c
@@ -20,6 +20,7 @@
#include "relative-pointer-unstable-v1-client-protocol.h"
#include "backend/wayland.h"
#include "util/signal.h"
+#include "util/time.h"
static struct wlr_wl_pointer *output_get_pointer(struct wlr_wl_output *output) {
struct wlr_input_device *wlr_dev;
@@ -197,12 +198,6 @@ static void keyboard_handle_keymap(void *data, struct wl_keyboard *wl_keyboard,
close(fd);
}
-static uint32_t get_current_time_msec(void) {
- struct timespec now;
- clock_gettime(CLOCK_MONOTONIC, &now);
- return now.tv_nsec / 1000;
-}
-
static void keyboard_handle_enter(void *data, struct wl_keyboard *wl_keyboard,
uint32_t serial, struct wl_surface *surface, struct wl_array *keys) {
struct wlr_input_device *dev = data;
diff --git a/backend/wayland/tablet_v2.c b/backend/wayland/tablet_v2.c
index 26e2d32a..826c36ba 100644
--- a/backend/wayland/tablet_v2.c
+++ b/backend/wayland/tablet_v2.c
@@ -13,6 +13,7 @@
#include <wlr/interfaces/wlr_input_device.h>
#include "util/signal.h"
+#include "util/time.h"
#include "wlr/util/log.h"
#include "tablet-unstable-v2-client-protocol.h"
@@ -84,12 +85,6 @@ struct wlr_wl_tablet_pad_group {
struct wl_list strips; // wlr_wl_tablet_pad_strips::link
};
-static uint32_t get_current_time_msec(void) {
- struct timespec now;
- clock_gettime(CLOCK_MONOTONIC, &now);
- return now.tv_nsec / (1000 * 1000) + now.tv_sec * 1000;
-}
-
static void handle_tablet_pad_ring_source(void *data,
struct zwp_tablet_pad_ring_v2 *zwp_tablet_pad_ring_v2,
uint32_t source) {
diff --git a/include/util/time.h b/include/util/time.h
new file mode 100644
index 00000000..a24656a9
--- /dev/null
+++ b/include/util/time.h
@@ -0,0 +1,9 @@
+#ifndef UTIL_TIME_H
+#define UTIL_TIME_H
+
+/**
+ * Get the current time, in milliseconds.
+ */
+uint32_t get_current_time_msec(void);
+
+#endif
diff --git a/util/meson.build b/util/meson.build
index 8bdd7a74..14cd59c5 100644
--- a/util/meson.build
+++ b/util/meson.build
@@ -5,4 +5,5 @@ wlr_files += files(
'region.c',
'shm.c',
'signal.c',
+ 'time.c',
)
diff --git a/util/time.c b/util/time.c
new file mode 100644
index 00000000..b2333921
--- /dev/null
+++ b/util/time.c
@@ -0,0 +1,11 @@
+#define _POSIX_C_SOURCE 200809L
+#include <stdint.h>
+#include <time.h>
+
+#include "util/time.h"
+
+uint32_t get_current_time_msec(void) {
+ struct timespec now;
+ clock_gettime(CLOCK_MONOTONIC, &now);
+ return now.tv_sec * 1000 + now.tv_nsec / 1000000;
+}