diff --git a/src/core/linux/SDL_evdev.c b/src/core/linux/SDL_evdev.c index a8e96cfaef..92907075e6 100644 --- a/src/core/linux/SDL_evdev.c +++ b/src/core/linux/SDL_evdev.c @@ -38,7 +38,6 @@ #include #include -#include "../../timer/SDL_timer_c.h" #include "../../events/SDL_events_c.h" #include "../../events/SDL_scancode_tables_c.h" #include "../../core/linux/SDL_evdev_capabilities.h" @@ -876,7 +875,9 @@ static int SDL_EVDEV_device_removed(const char *dev_path) Uint64 SDL_EVDEV_GetEventTimestamp(struct input_event *event) { + static Uint64 timestamp_offset; Uint64 timestamp; + Uint64 now = SDL_GetTicksNS(); /* The kernel internally has nanosecond timestamps, but converts it to microseconds when delivering the events */ @@ -884,9 +885,15 @@ Uint64 SDL_EVDEV_GetEventTimestamp(struct input_event *event) timestamp *= SDL_NS_PER_SECOND; timestamp += SDL_US_TO_NS(event->time.tv_usec); - /* Let's assume for now that we're using the same time base */ - timestamp -= SDL_GetTickStartNS(); + if (!timestamp_offset) { + timestamp_offset = (now - timestamp); + } + timestamp += timestamp_offset; + if (timestamp > now) { + timestamp_offset -= (timestamp - now); + timestamp = now; + } return timestamp; } diff --git a/src/timer/SDL_timer.c b/src/timer/SDL_timer.c index 01704ca603..7a49276d91 100644 --- a/src/timer/SDL_timer.c +++ b/src/timer/SDL_timer.c @@ -565,22 +565,6 @@ void SDL_TicksQuit(void) tick_start = 0; } -Uint64 -SDL_GetTickStartNS(void) -{ - Uint64 starting_value, value; - - if (!tick_start) { - SDL_TicksInit(); - } - - starting_value = tick_start; - value = (starting_value * tick_numerator_ns); - SDL_assert(value >= starting_value); - value /= tick_denominator_ns; - return value; -} - Uint64 SDL_GetTicksNS(void) { diff --git a/src/timer/SDL_timer_c.h b/src/timer/SDL_timer_c.h index c69717c8e5..05e530db87 100644 --- a/src/timer/SDL_timer_c.h +++ b/src/timer/SDL_timer_c.h @@ -33,7 +33,6 @@ extern void SDL_TicksInit(void); extern void SDL_TicksQuit(void); extern int SDL_TimerInit(void); extern void SDL_TimerQuit(void); -extern Uint64 SDL_GetTickStartNS(void); #endif /* SDL_timer_c_h_ */