• Home
  • Raw
  • Download

Lines Matching full:timer

33 #include "timer.h"
36 libinput_timer_init(struct libinput_timer *timer, in libinput_timer_init() argument
42 timer->libinput = libinput; in libinput_timer_init()
43 timer->timer_name = safe_strdup(timer_name); in libinput_timer_init()
44 timer->timer_func = timer_func; in libinput_timer_init()
45 timer->timer_func_data = timer_func_data; in libinput_timer_init()
47 ratelimit_init(&libinput->timer.expiry_in_past_limit, in libinput_timer_init()
52 libinput_timer_destroy(struct libinput_timer *timer) in libinput_timer_destroy() argument
54 if (timer->link.prev != NULL && timer->link.next != NULL && in libinput_timer_destroy()
55 !list_empty(&timer->link)) { in libinput_timer_destroy()
56 log_bug_libinput(timer->libinput, in libinput_timer_destroy()
57 "timer: %s has not been cancelled\n", in libinput_timer_destroy()
58 timer->timer_name); in libinput_timer_destroy()
59 assert(!"timer not cancelled"); in libinput_timer_destroy()
61 free(timer->timer_name); in libinput_timer_destroy()
68 struct libinput_timer *timer; in libinput_timer_arm_timer_fd() local
72 list_for_each(timer, &libinput->timer.list, link) { in libinput_timer_arm_timer_fd()
73 if (timer->expire < earliest_expire) in libinput_timer_arm_timer_fd()
74 earliest_expire = timer->expire; in libinput_timer_arm_timer_fd()
82 r = timerfd_settime(libinput->timer.fd, TFD_TIMER_ABSTIME, &its, NULL); in libinput_timer_arm_timer_fd()
84 log_error(libinput, "timer: timerfd_settime error: %s\n", strerror(errno)); in libinput_timer_arm_timer_fd()
86 libinput->timer.next_expiry = earliest_expire; in libinput_timer_arm_timer_fd()
90 libinput_timer_set_flags(struct libinput_timer *timer, in libinput_timer_set_flags() argument
97 uint64_t now = libinput_now(timer->libinput); in libinput_timer_set_flags()
101 log_bug_client_ratelimit(timer->libinput, in libinput_timer_set_flags()
102 &timer->libinput->timer.expiry_in_past_limit, in libinput_timer_set_flags()
103 "timer %s: scheduled expiry is in the past (-%dms), your system is too slow\n", in libinput_timer_set_flags()
104 timer->timer_name, in libinput_timer_set_flags()
107 log_bug_libinput(timer->libinput, in libinput_timer_set_flags()
108 "timer %s: offset more than 5s, now %d expire %d\n", in libinput_timer_set_flags()
109 timer->timer_name, in libinput_timer_set_flags()
116 if (!timer->expire) in libinput_timer_set_flags()
117 list_insert(&timer->libinput->timer.list, &timer->link); in libinput_timer_set_flags()
119 timer->expire = expire; in libinput_timer_set_flags()
120 libinput_timer_arm_timer_fd(timer->libinput); in libinput_timer_set_flags()
124 libinput_timer_set(struct libinput_timer *timer, uint64_t expire) in libinput_timer_set() argument
126 libinput_timer_set_flags(timer, expire, TIMER_FLAG_NONE); in libinput_timer_set()
130 libinput_timer_cancel(struct libinput_timer *timer) in libinput_timer_cancel() argument
132 if (!timer->expire) in libinput_timer_cancel()
135 timer->expire = 0; in libinput_timer_cancel()
136 list_remove(&timer->link); in libinput_timer_cancel()
137 libinput_timer_arm_timer_fd(timer->libinput); in libinput_timer_cancel()
143 struct libinput_timer *timer; in libinput_timer_handler() local
146 list_for_each_safe(timer, &libinput->timer.list, link) { in libinput_timer_handler()
147 if (timer->expire == 0) in libinput_timer_handler()
150 if (timer->expire <= now) { in libinput_timer_handler()
151 /* Clear the timer before calling timer_func, in libinput_timer_handler()
153 libinput_timer_cancel(timer); in libinput_timer_handler()
154 timer->timer_func(now, timer->timer_func_data); in libinput_timer_handler()
159 * allows removing one (our) timer per timer_func. in libinput_timer_handler()
160 * But the timer func may trigger another unrelated in libinput_timer_handler()
161 * timer to be cancelled and removed, causing a in libinput_timer_handler()
177 r = read(libinput->timer.fd, &discard, sizeof(discard)); in libinput_timer_dispatch()
180 "timer: error %d reading from timerfd (%s)", in libinput_timer_dispatch()
194 libinput->timer.fd = timerfd_create(CLOCK_MONOTONIC, in libinput_timer_subsys_init()
196 if (libinput->timer.fd < 0) in libinput_timer_subsys_init()
199 list_init(&libinput->timer.list); in libinput_timer_subsys_init()
201 libinput->timer.source = libinput_add_fd(libinput, in libinput_timer_subsys_init()
202 libinput->timer.fd, in libinput_timer_subsys_init()
205 if (!libinput->timer.source) { in libinput_timer_subsys_init()
206 close(libinput->timer.fd); in libinput_timer_subsys_init()
217 if (!list_empty(&libinput->timer.list)) { in libinput_timer_subsys_destroy()
220 list_for_each(t, &libinput->timer.list, link) { in libinput_timer_subsys_destroy()
222 "timer: %s still present on shutdown\n", in libinput_timer_subsys_destroy()
228 /* All timer users should have destroyed their timers now */ in libinput_timer_subsys_destroy()
229 assert(list_empty(&libinput->timer.list)); in libinput_timer_subsys_destroy()
231 libinput_remove_source(libinput, libinput->timer.source); in libinput_timer_subsys_destroy()
232 close(libinput->timer.fd); in libinput_timer_subsys_destroy()
237 * timer expiry *and* a later input event waiting in the pipe. We cannot
238 * guarantee that we read the timer expiry first, so this hook exists to
241 * Assume 'now' is the current time check if there is a current timer expiry
242 * before this time. If so, trigger the timer func.
247 if (libinput->timer.next_expiry == 0 || in libinput_timer_flush()
248 libinput->timer.next_expiry > now) in libinput_timer_flush()