early-access version 2281
This commit is contained in:
40
externals/SDL/src/timer/os2/SDL_systimer.c
vendored
40
externals/SDL/src/timer/os2/SDL_systimer.c
vendored
@@ -40,25 +40,26 @@
|
||||
typedef unsigned long long ULLONG;
|
||||
|
||||
static ULONG ulTmrFreq = 0;
|
||||
static ULLONG ullTmrStart;
|
||||
static ULLONG ullTmrStart = 0;
|
||||
|
||||
void
|
||||
SDL_TicksInit(void)
|
||||
{
|
||||
ULONG ulRC;
|
||||
|
||||
ulRC = DosTmrQueryFreq(&ulTmrFreq);
|
||||
ULONG ulTmrStart; /* for 32-bit fallback. */
|
||||
ULONG ulRC = DosTmrQueryFreq(&ulTmrFreq);
|
||||
if (ulRC != NO_ERROR) {
|
||||
debug_os2("DosTmrQueryFreq() failed, rc = %u", ulRC);
|
||||
} else {
|
||||
ulRC = DosTmrQueryTime((PQWORD)&ullTmrStart);
|
||||
if (ulRC == NO_ERROR)
|
||||
if (ulRC == NO_ERROR) {
|
||||
return;
|
||||
}
|
||||
debug_os2("DosTmrQueryTime() failed, rc = %u", ulRC);
|
||||
}
|
||||
|
||||
ulTmrFreq = 0; /* Error - use DosQuerySysInfo() for timer. */
|
||||
DosQuerySysInfo(QSV_MS_COUNT, QSV_MS_COUNT, (PULONG)&ullTmrStart, sizeof(ULONG));
|
||||
DosQuerySysInfo(QSV_MS_COUNT, QSV_MS_COUNT, &ulTmrStart, sizeof (ULONG));
|
||||
ullTmrStart = (ULLONG) ulTmrStart;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -66,24 +67,27 @@ SDL_TicksQuit(void)
|
||||
{
|
||||
}
|
||||
|
||||
Uint32
|
||||
SDL_GetTicks(void)
|
||||
Uint64
|
||||
SDL_GetTicks64(void)
|
||||
{
|
||||
ULONG ulResult;
|
||||
ULLONG ullTmrNow;
|
||||
Uint64 ui64Result;
|
||||
ULLONG ullTmrNow;
|
||||
|
||||
if (ulTmrFreq == 0) /* Was not initialized. */
|
||||
if (ulTmrFreq == 0) { /* Was not initialized. */
|
||||
SDL_TicksInit();
|
||||
}
|
||||
|
||||
if (ulTmrFreq != 0) {
|
||||
DosTmrQueryTime((PQWORD)&ullTmrNow);
|
||||
ulResult = (ullTmrNow - ullTmrStart) * 1000 / ulTmrFreq;
|
||||
ui64Result = (ullTmrNow - ullTmrStart) * 1000 / ulTmrFreq;
|
||||
} else {
|
||||
DosQuerySysInfo(QSV_MS_COUNT, QSV_MS_COUNT, (PULONG)&ullTmrNow, sizeof(ULONG));
|
||||
ulResult = (ULONG)ullTmrNow - (ULONG)ullTmrStart;
|
||||
/* note that this counter rolls over to 0 every ~49 days. Fix your system so DosTmrQueryTime works if you need to avoid this. */
|
||||
ULONG ulTmrNow;
|
||||
DosQuerySysInfo(QSV_MS_COUNT, QSV_MS_COUNT, &ulTmrNow, sizeof (ULONG));
|
||||
ui64Result = (((Uint64) ulTmrNow) - ullTmrStart);
|
||||
}
|
||||
|
||||
return ulResult;
|
||||
return ui64Result;
|
||||
}
|
||||
|
||||
Uint64
|
||||
@@ -91,9 +95,9 @@ SDL_GetPerformanceCounter(void)
|
||||
{
|
||||
QWORD qwTmrNow;
|
||||
|
||||
if (ulTmrFreq == 0 || (DosTmrQueryTime(&qwTmrNow) != NO_ERROR))
|
||||
return SDL_GetTicks();
|
||||
|
||||
if (ulTmrFreq == 0 || (DosTmrQueryTime(&qwTmrNow) != NO_ERROR)) {
|
||||
return SDL_GetTicks64();
|
||||
}
|
||||
return *((Uint64 *)&qwTmrNow);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user