summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2021-12-07 11:18:07 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2021-12-07 11:54:08 +1000
commita1e9150210abda0d3dd41127330cd7985d29957d (patch)
tree875bfc039de760eb70c8a375427b05dee005a264
parent64a49d18b948a5b8ac88da9207689af356a081cf (diff)
downloadlibinput-a1e9150210abda0d3dd41127330cd7985d29957d.tar.gz
timer: only warn about timer expiry issues when we're more than 20ms behind
The most common trigger for this is the debouncing timer which is a mere 12ms and is effectively unavoidable, virtually every caller will trigger those messages at some point. Let's add a grace period of 20ms below which we don't log this message to avoid logspam. And in the process, bump the equivalent warning message up to 20ms as well. Related #711 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--src/evdev.c2
-rw-r--r--src/timer.c5
-rw-r--r--test/test-misc.c2
3 files changed, 6 insertions, 3 deletions
diff --git a/src/evdev.c b/src/evdev.c
index cf0a2846..860f69df 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1113,7 +1113,7 @@ evdev_note_time_delay(struct evdev_device *device,
return;
tdelta = us2ms(libinput->dispatch_time - eventtime);
- if (tdelta > 10) {
+ if (tdelta > 20) {
evdev_log_bug_client_ratelimit(device,
&device->delay_warning_limit,
"event processing lagging behind by %dms, your system is too slow\n",
diff --git a/src/timer.c b/src/timer.c
index e1d8dd60..da3f5931 100644
--- a/src/timer.c
+++ b/src/timer.c
@@ -92,9 +92,12 @@ libinput_timer_set_flags(struct libinput_timer *timer,
uint32_t flags)
{
#ifndef NDEBUG
+ /* We only warn if we're more than 20ms behind */
+ const uint64_t timer_warning_limit = ms2us(20);
uint64_t now = libinput_now(timer->libinput);
if (expire < now) {
- if ((flags & TIMER_FLAG_ALLOW_NEGATIVE) == 0)
+ if ((flags & TIMER_FLAG_ALLOW_NEGATIVE) == 0 &&
+ now - expire > timer_warning_limit)
log_bug_client_ratelimit(timer->libinput,
&timer->libinput->timer.expiry_in_past_limit,
"timer %s: scheduled expiry is in the past (-%dms), your system is too slow\n",
diff --git a/test/test-misc.c b/test/test-misc.c
index 732cb12e..5f98d326 100644
--- a/test/test-misc.c
+++ b/test/test-misc.c
@@ -721,7 +721,7 @@ START_TEST(timer_delay_bug_warning)
for (int i = 0; i < 20; i++) {
litest_event(dev, EV_REL, REL_X, -1);
litest_event(dev, EV_SYN, SYN_REPORT, 0);
- msleep(11);
+ msleep(21);
libinput_dispatch(li);
}