mirror of
https://github.com/Ryujinx/SDL.git
synced 2024-12-22 19:15:29 +00:00
Move check for SDL_Delay upper bounds to testtimer
(cherry picked from commit f45761908aa88c61cf7f2b7cb2e663abee06eed0)
This commit is contained in:
parent
1737340978
commit
41fc398114
|
@ -94,7 +94,10 @@ int timer_delayAndGetTicks(void *arg)
|
||||||
SDLTest_AssertCheck(result2 > 0, "Check result value, expected: >0, got: %" SDL_PRIu32, result2);
|
SDLTest_AssertCheck(result2 > 0, "Check result value, expected: >0, got: %" SDL_PRIu32, result2);
|
||||||
difference = result2 - result;
|
difference = result2 - result;
|
||||||
SDLTest_AssertCheck(difference > (testDelay - marginOfError), "Check difference, expected: >%" SDL_PRIu32 ", got: %" SDL_PRIu32, testDelay - marginOfError, difference);
|
SDLTest_AssertCheck(difference > (testDelay - marginOfError), "Check difference, expected: >%" SDL_PRIu32 ", got: %" SDL_PRIu32, testDelay - marginOfError, difference);
|
||||||
|
#if 0
|
||||||
|
/* Disabled because this might fail on non-interactive systems. Moved to testtimer. */
|
||||||
SDLTest_AssertCheck(difference < (testDelay + marginOfError), "Check difference, expected: <%" SDL_PRIu32 ", got: %" SDL_PRIu32, testDelay + marginOfError, difference);
|
SDLTest_AssertCheck(difference < (testDelay + marginOfError), "Check difference, expected: <%" SDL_PRIu32 ", got: %" SDL_PRIu32, testDelay + marginOfError, difference);
|
||||||
|
#endif
|
||||||
|
|
||||||
return TEST_COMPLETED;
|
return TEST_COMPLETED;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,9 +18,38 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "SDL.h"
|
#include "SDL.h"
|
||||||
|
#include "SDL_test.h"
|
||||||
|
|
||||||
#define DEFAULT_RESOLUTION 1
|
#define DEFAULT_RESOLUTION 1
|
||||||
|
|
||||||
|
static int test_sdl_delay_within_bounds(void) {
|
||||||
|
const int testDelay = 100;
|
||||||
|
const int marginOfError = 25;
|
||||||
|
Uint64 result;
|
||||||
|
Uint64 result2;
|
||||||
|
Sint64 difference;
|
||||||
|
|
||||||
|
SDLTest_ResetAssertSummary();
|
||||||
|
|
||||||
|
/* Get ticks count - should be non-zero by now */
|
||||||
|
result = SDL_GetTicks();
|
||||||
|
SDLTest_AssertPass("Call to SDL_GetTicks()");
|
||||||
|
SDLTest_AssertCheck(result > 0, "Check result value, expected: >0, got: %" SDL_PRIu64, result);
|
||||||
|
|
||||||
|
/* Delay a bit longer and measure ticks and verify difference */
|
||||||
|
SDL_Delay(testDelay);
|
||||||
|
SDLTest_AssertPass("Call to SDL_Delay(%d)", testDelay);
|
||||||
|
result2 = SDL_GetTicks();
|
||||||
|
SDLTest_AssertPass("Call to SDL_GetTicks()");
|
||||||
|
SDLTest_AssertCheck(result2 > 0, "Check result value, expected: >0, got: %" SDL_PRIu64, result2);
|
||||||
|
difference = result2 - result;
|
||||||
|
SDLTest_AssertCheck(difference > (testDelay - marginOfError), "Check difference, expected: >%d, got: %" SDL_PRIu64, testDelay - marginOfError, difference);
|
||||||
|
/* Disabled because this might fail on non-interactive systems. */
|
||||||
|
SDLTest_AssertCheck(difference < (testDelay + marginOfError), "Check difference, expected: <%d, got: %" SDL_PRIu64, testDelay + marginOfError, difference);
|
||||||
|
|
||||||
|
return SDLTest_AssertSummaryToTestResult() == TEST_RESULT_PASSED ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int ticks = 0;
|
static int ticks = 0;
|
||||||
|
|
||||||
static Uint32 SDLCALL
|
static Uint32 SDLCALL
|
||||||
|
@ -39,15 +68,43 @@ callback(Uint32 interval, void *param)
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int i, desired;
|
int i;
|
||||||
|
int desired = -1;
|
||||||
SDL_TimerID t1, t2, t3;
|
SDL_TimerID t1, t2, t3;
|
||||||
Uint64 start64, now64;
|
Uint64 start64, now64;
|
||||||
Uint32 start32, now32;
|
Uint32 start32, now32;
|
||||||
Uint64 start, now;
|
Uint64 start, now;
|
||||||
|
SDL_bool run_interactive_tests = SDL_FALSE;
|
||||||
|
int return_code = 0;
|
||||||
|
|
||||||
/* Enable standard application logging */
|
/* Enable standard application logging */
|
||||||
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
|
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
|
||||||
|
|
||||||
|
/* Parse commandline */
|
||||||
|
for (i = 1; i < argc;) {
|
||||||
|
int consumed = 0;
|
||||||
|
|
||||||
|
if (!consumed) {
|
||||||
|
if (SDL_strcmp(argv[i], "--interactive") == 0) {
|
||||||
|
run_interactive_tests = SDL_TRUE;
|
||||||
|
consumed = 1;
|
||||||
|
} else if (desired < 0) {
|
||||||
|
char *endptr;
|
||||||
|
|
||||||
|
desired = SDL_strtoul(argv[i], &endptr, 0);
|
||||||
|
if (desired != 0 && endptr != argv[i] && *endptr == '\0') {
|
||||||
|
consumed = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (consumed <= 0) {
|
||||||
|
SDL_Log("Usage: %s [--interactive] [interval]", argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
i += consumed;
|
||||||
|
}
|
||||||
|
|
||||||
if (SDL_Init(SDL_INIT_TIMER) < 0) {
|
if (SDL_Init(SDL_INIT_TIMER) < 0) {
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
|
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -74,14 +131,11 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Start the timer */
|
if (desired < 0) {
|
||||||
desired = 0;
|
|
||||||
if (argv[1]) {
|
|
||||||
desired = SDL_atoi(argv[1]);
|
|
||||||
}
|
|
||||||
if (desired == 0) {
|
|
||||||
desired = DEFAULT_RESOLUTION;
|
desired = DEFAULT_RESOLUTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Start the timer */
|
||||||
t1 = SDL_AddTimer(desired, ticktock, NULL);
|
t1 = SDL_AddTimer(desired, ticktock, NULL);
|
||||||
|
|
||||||
/* Wait 10 seconds */
|
/* Wait 10 seconds */
|
||||||
|
@ -102,14 +156,17 @@ int main(int argc, char *argv[])
|
||||||
t1 = SDL_AddTimer(100, callback, (void *)1);
|
t1 = SDL_AddTimer(100, callback, (void *)1);
|
||||||
if (!t1) {
|
if (!t1) {
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not create timer 1: %s\n", SDL_GetError());
|
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not create timer 1: %s\n", SDL_GetError());
|
||||||
|
return_code = 1;
|
||||||
}
|
}
|
||||||
t2 = SDL_AddTimer(50, callback, (void *)2);
|
t2 = SDL_AddTimer(50, callback, (void *)2);
|
||||||
if (!t2) {
|
if (!t2) {
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not create timer 2: %s\n", SDL_GetError());
|
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not create timer 2: %s\n", SDL_GetError());
|
||||||
|
return_code = 1;
|
||||||
}
|
}
|
||||||
t3 = SDL_AddTimer(233, callback, (void *)3);
|
t3 = SDL_AddTimer(233, callback, (void *)3);
|
||||||
if (!t3) {
|
if (!t3) {
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not create timer 3: %s\n", SDL_GetError());
|
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not create timer 3: %s\n", SDL_GetError());
|
||||||
|
return_code = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Wait 10 seconds */
|
/* Wait 10 seconds */
|
||||||
|
@ -141,8 +198,11 @@ int main(int argc, char *argv[])
|
||||||
now32 = SDL_GetTicks();
|
now32 = SDL_GetTicks();
|
||||||
SDL_Log("Delay 1 second = %d ms in ticks, %d ms in ticks64, %f ms according to performance counter\n", (int)(now32 - start32), (int)(now64 - start64), (double)((now - start) * 1000) / SDL_GetPerformanceFrequency());
|
SDL_Log("Delay 1 second = %d ms in ticks, %d ms in ticks64, %f ms according to performance counter\n", (int)(now32 - start32), (int)(now64 - start64), (double)((now - start) * 1000) / SDL_GetPerformanceFrequency());
|
||||||
|
|
||||||
|
if (run_interactive_tests) {
|
||||||
|
return_code |= test_sdl_delay_within_bounds();
|
||||||
|
}
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
return 0;
|
return return_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* vi: set ts=4 sw=4 expandtab: */
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
|
|
Loading…
Reference in a new issue