mirror of
https://github.com/Ryujinx/SDL.git
synced 2025-01-11 07:05:38 +00:00
Added a macro SDL_TICKS_PASSED() to correctly compare two 32-bit tick values.
Went through the code and used the macro and fixed a couple places that were using incorrect timestamp comparisons.
This commit is contained in:
parent
04e170ceb7
commit
f5fa492e26
|
@ -44,6 +44,17 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void);
|
extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Compare SDL ticks values, and return true if A has passed B
|
||||||
|
*
|
||||||
|
* e.g. if you want to wait 100 ms, you could do this:
|
||||||
|
* Uint32 timeout = SDL_GetTicks() + 100;
|
||||||
|
* while (!SDL_TICKS_PASSED(SDL_GetTicks(), timeout)) {
|
||||||
|
* ... do work until timeout has elapsed
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
#define SDL_TICKS_PASSED(A, B) ((Sint32)((B) - (A)) <= 0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Get the current value of the high resolution counter
|
* \brief Get the current value of the high resolution counter
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -220,7 +220,7 @@ static int
|
||||||
ARTS_Suspend(void)
|
ARTS_Suspend(void)
|
||||||
{
|
{
|
||||||
const Uint32 abortms = SDL_GetTicks() + 3000; /* give up after 3 secs */
|
const Uint32 abortms = SDL_GetTicks() + 3000; /* give up after 3 secs */
|
||||||
while ( (!SDL_NAME(arts_suspended)()) && (SDL_GetTicks() < abortms) ) {
|
while ( (!SDL_NAME(arts_suspended)()) && !SDL_TICKS_PASSED(SDL_GetTicks(), abortms) ) {
|
||||||
if ( SDL_NAME(arts_suspend)() ) {
|
if ( SDL_NAME(arts_suspend)() ) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -125,9 +125,7 @@ BSDAUDIO_WaitDevice(_THIS)
|
||||||
/* Use timer for general audio synchronization */
|
/* Use timer for general audio synchronization */
|
||||||
Sint32 ticks;
|
Sint32 ticks;
|
||||||
|
|
||||||
ticks =
|
ticks = ((Sint32) (this->hidden->next_frame - SDL_GetTicks())) - FUDGE_TICKS;
|
||||||
((Sint32) (this->hidden->next_frame - SDL_GetTicks())) -
|
|
||||||
FUDGE_TICKS;
|
|
||||||
if (ticks > 0) {
|
if (ticks > 0) {
|
||||||
SDL_Delay(ticks);
|
SDL_Delay(ticks);
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,8 +135,7 @@ ESD_WaitDevice(_THIS)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Use timer for general audio synchronization */
|
/* Use timer for general audio synchronization */
|
||||||
ticks =
|
ticks = ((Sint32) (this->hidden->next_frame - SDL_GetTicks())) - FUDGE_TICKS;
|
||||||
((Sint32) (this->hidden->next_frame - SDL_GetTicks())) - FUDGE_TICKS;
|
|
||||||
if (ticks > 0) {
|
if (ticks > 0) {
|
||||||
SDL_Delay(ticks);
|
SDL_Delay(ticks);
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,9 +133,7 @@ PAUDIO_WaitDevice(_THIS)
|
||||||
/* Use timer for general audio synchronization */
|
/* Use timer for general audio synchronization */
|
||||||
Sint32 ticks;
|
Sint32 ticks;
|
||||||
|
|
||||||
ticks =
|
ticks = ((Sint32) (this->hidden->next_frame - SDL_GetTicks())) - FUDGE_TICKS;
|
||||||
((Sint32) (this->hidden->next_frame - SDL_GetTicks())) -
|
|
||||||
FUDGE_TICKS;
|
|
||||||
if (ticks > 0) {
|
if (ticks > 0) {
|
||||||
SDL_Delay(ticks);
|
SDL_Delay(ticks);
|
||||||
}
|
}
|
||||||
|
|
|
@ -443,7 +443,7 @@ SDL_WaitEventTimeout(SDL_Event * event, int timeout)
|
||||||
/* Polling and no events, just return */
|
/* Polling and no events, just return */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (timeout > 0 && ((int) (SDL_GetTicks() - expiration) >= 0)) {
|
if (timeout > 0 && SDL_TICKS_PASSED(SDL_GetTicks(), expiration)) {
|
||||||
/* Timeout expired and no events */
|
/* Timeout expired and no events */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1567,7 +1567,7 @@ SDL_RunXInputHaptic(void *arg)
|
||||||
SDL_LockMutex(hwdata->mutex);
|
SDL_LockMutex(hwdata->mutex);
|
||||||
/* If we're currently running and need to stop... */
|
/* If we're currently running and need to stop... */
|
||||||
if (hwdata->stopTicks) {
|
if (hwdata->stopTicks) {
|
||||||
if ((hwdata->stopTicks != SDL_HAPTIC_INFINITY) && (hwdata->stopTicks < SDL_GetTicks())) {
|
if ((hwdata->stopTicks != SDL_HAPTIC_INFINITY) && SDL_TIMESTAMP_PASSED(SDL_GetTicks(), hwdata->stopTicks)) {
|
||||||
XINPUT_VIBRATION vibration = { 0, 0 };
|
XINPUT_VIBRATION vibration = { 0, 0 };
|
||||||
hwdata->stopTicks = 0;
|
hwdata->stopTicks = 0;
|
||||||
XINPUTSETSTATE(hwdata->userid, &vibration);
|
XINPUTSETSTATE(hwdata->userid, &vibration);
|
||||||
|
|
|
@ -38,11 +38,7 @@ void
|
||||||
SDL_UIKit_UpdateBatteryMonitoring(void)
|
SDL_UIKit_UpdateBatteryMonitoring(void)
|
||||||
{
|
{
|
||||||
if (SDL_UIKitLastPowerInfoQuery) {
|
if (SDL_UIKitLastPowerInfoQuery) {
|
||||||
const Uint32 prev = SDL_UIKitLastPowerInfoQuery;
|
if (SDL_TICKS_PASSED(SDL_GetTicks(), SDL_UIKitLastPowerInfoQuery + BATTERY_MONITORING_TIMEOUT)) {
|
||||||
const UInt32 now = SDL_GetTicks();
|
|
||||||
const UInt32 ticks = now - prev;
|
|
||||||
/* if timer wrapped (now < prev), shut down, too. */
|
|
||||||
if ((now < prev) || (ticks >= BATTERY_MONITORING_TIMEOUT)) {
|
|
||||||
UIDevice *uidev = [UIDevice currentDevice];
|
UIDevice *uidev = [UIDevice currentDevice];
|
||||||
SDL_assert([uidev isBatteryMonitoringEnabled] == YES);
|
SDL_assert([uidev isBatteryMonitoringEnabled] == YES);
|
||||||
[uidev setBatteryMonitoringEnabled:NO];
|
[uidev setBatteryMonitoringEnabled:NO];
|
||||||
|
|
|
@ -156,7 +156,7 @@ SDL_SemWaitTimeout(SDL_sem * sem, Uint32 timeout)
|
||||||
#else
|
#else
|
||||||
end = SDL_GetTicks() + timeout;
|
end = SDL_GetTicks() + timeout;
|
||||||
while ((retval = SDL_SemTryWait(sem)) == SDL_MUTEX_TIMEDOUT) {
|
while ((retval = SDL_SemTryWait(sem)) == SDL_MUTEX_TIMEDOUT) {
|
||||||
if ((Sint32)(SDL_GetTicks() - end) >= 0) {
|
if (SDL_TICKS_PASSED(SDL_GetTicks(), end)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
SDL_Delay(1);
|
SDL_Delay(1);
|
||||||
|
|
|
@ -271,7 +271,7 @@ Cocoa_PumpEvents(_THIS)
|
||||||
SDL_VideoData *data = (SDL_VideoData *)_this->driverdata;
|
SDL_VideoData *data = (SDL_VideoData *)_this->driverdata;
|
||||||
Uint32 now = SDL_GetTicks();
|
Uint32 now = SDL_GetTicks();
|
||||||
if (!data->screensaver_activity ||
|
if (!data->screensaver_activity ||
|
||||||
(int)(now-data->screensaver_activity) >= 30000) {
|
SDL_TICKS_PASSED(now, data->screensaver_activity + 30000)) {
|
||||||
UpdateSystemActivity(UsrActivity);
|
UpdateSystemActivity(UsrActivity);
|
||||||
data->screensaver_activity = now;
|
data->screensaver_activity = now;
|
||||||
}
|
}
|
||||||
|
|
|
@ -909,7 +909,7 @@ X11_HandleFocusChanges(_THIS)
|
||||||
SDL_WindowData *data = videodata->windowlist[i];
|
SDL_WindowData *data = videodata->windowlist[i];
|
||||||
if (data && data->pending_focus != PENDING_FOCUS_NONE) {
|
if (data && data->pending_focus != PENDING_FOCUS_NONE) {
|
||||||
Uint32 now = SDL_GetTicks();
|
Uint32 now = SDL_GetTicks();
|
||||||
if ( (int)(data->pending_focus_time-now) <= 0 ) {
|
if (SDL_TICKS_PASSED(now, data->pending_focus_time)) {
|
||||||
if ( data->pending_focus == PENDING_FOCUS_IN ) {
|
if ( data->pending_focus == PENDING_FOCUS_IN ) {
|
||||||
X11_DispatchFocusIn(data);
|
X11_DispatchFocusIn(data);
|
||||||
} else {
|
} else {
|
||||||
|
@ -963,7 +963,7 @@ X11_PumpEvents(_THIS)
|
||||||
if (_this->suspend_screensaver) {
|
if (_this->suspend_screensaver) {
|
||||||
Uint32 now = SDL_GetTicks();
|
Uint32 now = SDL_GetTicks();
|
||||||
if (!data->screensaver_activity ||
|
if (!data->screensaver_activity ||
|
||||||
(int) (now - data->screensaver_activity) >= 30000) {
|
SDL_TICKS_PASSED(now, data->screensaver_activity + 30000)) {
|
||||||
X11_XResetScreenSaver(data->display);
|
X11_XResetScreenSaver(data->display);
|
||||||
|
|
||||||
#if SDL_USE_LIBDBUS
|
#if SDL_USE_LIBDBUS
|
||||||
|
|
|
@ -66,7 +66,7 @@ X11_XIfEventTimeout(Display *display, XEvent *event_return, Bool (*predicate)(),
|
||||||
Uint32 start = SDL_GetTicks();
|
Uint32 start = SDL_GetTicks();
|
||||||
|
|
||||||
while (!X11_XCheckIfEvent(display, event_return, predicate, arg)) {
|
while (!X11_XCheckIfEvent(display, event_return, predicate, arg)) {
|
||||||
if ((SDL_GetTicks() - start) >= timeoutMS) {
|
if (SDL_TICKS_PASSED(SDL_GetTicks(), start + timeoutMS)) {
|
||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue