mirror of
https://github.com/yawut/SDL.git
synced 2026-08-24 17:55:17 -05:00
Windows: Always set the system timer resolution to 1ms by default.
An existing hint lets apps that don't need the timer resolution changed avoid this, to save battery, etc, but this fixes several problems in timing, audio callbacks not firing fast enough, etc. Fixes Bugzilla #2944.
This commit is contained in:
@@ -43,7 +43,7 @@ static LARGE_INTEGER hires_ticks_per_second;
|
||||
|
||||
#ifndef __WINRT__
|
||||
static void
|
||||
timeSetPeriod(UINT uPeriod)
|
||||
timeSetPeriod(const UINT uPeriod)
|
||||
{
|
||||
static UINT timer_period = 0;
|
||||
|
||||
@@ -87,6 +87,11 @@ SDL_TicksInit(void)
|
||||
}
|
||||
ticks_started = SDL_TRUE;
|
||||
|
||||
/* if we didn't set a precision, set it high. This affects lots of things
|
||||
on Windows besides the SDL timers, like audio callbacks, etc. */
|
||||
SDL_AddHintCallback(SDL_HINT_TIMER_RESOLUTION,
|
||||
SDL_TimerResolutionChanged, NULL);
|
||||
|
||||
/* Set first ticks value */
|
||||
#ifdef USE_GETTICKCOUNT
|
||||
start = GetTickCount();
|
||||
@@ -102,11 +107,7 @@ SDL_TicksInit(void)
|
||||
#ifdef __WINRT__
|
||||
start = 0; /* the timer failed to start! */
|
||||
#else
|
||||
timeSetPeriod(1); /* use 1 ms timer precision */
|
||||
start = timeGetTime();
|
||||
|
||||
SDL_AddHintCallback(SDL_HINT_TIMER_RESOLUTION,
|
||||
SDL_TimerResolutionChanged, NULL);
|
||||
#endif /* __WINRT__ */
|
||||
}
|
||||
#endif /* USE_GETTICKCOUNT */
|
||||
@@ -120,12 +121,14 @@ SDL_TicksQuit(void)
|
||||
#ifndef __WINRT__
|
||||
SDL_DelHintCallback(SDL_HINT_TIMER_RESOLUTION,
|
||||
SDL_TimerResolutionChanged, NULL);
|
||||
|
||||
timeSetPeriod(0);
|
||||
#endif /* __WINRT__ */
|
||||
}
|
||||
#endif /* USE_GETTICKCOUNT */
|
||||
|
||||
#ifndef __WINRT__
|
||||
timeSetPeriod(0); /* always release our timer resolution request. */
|
||||
#endif
|
||||
|
||||
ticks_started = SDL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user