Skip to content

Latest commit

 

History

History
122 lines (97 loc) · 3.35 KB

testtimer.c

File metadata and controls

122 lines (97 loc) · 3.35 KB
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/*
Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
*/
/* Test program to check the resolution of the SDL timer on the current
platform
*/
#include <stdlib.h>
#include <stdio.h>
#include "SDL.h"
#define DEFAULT_RESOLUTION 1
static int ticks = 0;
static Uint32 SDLCALL
ticktock(Uint32 interval, void *param)
{
++ticks;
return (interval);
}
static Uint32 SDLCALL
callback(Uint32 interval, void *param)
{
Aug 15, 2013
Aug 15, 2013
36
SDL_Log("Timer %d : param = %d\n", interval, (int) (uintptr_t) param);
37
38
39
40
41
42
43
44
45
46
47
return interval;
}
int
main(int argc, char *argv[])
{
int i, desired;
SDL_TimerID t1, t2, t3;
Uint32 start32, now32;
Uint64 start, now;
Aug 15, 2013
Aug 15, 2013
48
49
50
/* Enable standard application logging */
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
51
if (SDL_Init(SDL_INIT_TIMER) < 0) {
Aug 15, 2013
Aug 15, 2013
52
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
53
54
55
56
57
58
59
60
61
62
63
64
65
66
return (1);
}
/* Start the timer */
desired = 0;
if (argv[1]) {
desired = atoi(argv[1]);
}
if (desired == 0) {
desired = DEFAULT_RESOLUTION;
}
t1 = SDL_AddTimer(desired, ticktock, NULL);
/* Wait 10 seconds */
Aug 15, 2013
Aug 15, 2013
67
SDL_Log("Waiting 10 seconds\n");
68
69
70
71
72
73
74
SDL_Delay(10 * 1000);
/* Stop the timer */
SDL_RemoveTimer(t1);
/* Print the results */
if (ticks) {
Aug 15, 2013
Aug 15, 2013
75
SDL_Log("Timer resolution: desired = %d ms, actual = %f ms\n",
76
77
78
79
desired, (double) (10 * 1000) / ticks);
}
/* Test multiple timers */
Aug 15, 2013
Aug 15, 2013
80
SDL_Log("Testing multiple timers...\n");
81
82
t1 = SDL_AddTimer(100, callback, (void *) 1);
if (!t1)
Aug 15, 2013
Aug 15, 2013
83
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,"Could not create timer 1: %s\n", SDL_GetError());
84
85
t2 = SDL_AddTimer(50, callback, (void *) 2);
if (!t2)
Aug 15, 2013
Aug 15, 2013
86
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,"Could not create timer 2: %s\n", SDL_GetError());
87
88
t3 = SDL_AddTimer(233, callback, (void *) 3);
if (!t3)
Aug 15, 2013
Aug 15, 2013
89
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,"Could not create timer 3: %s\n", SDL_GetError());
90
91
/* Wait 10 seconds */
Aug 15, 2013
Aug 15, 2013
92
SDL_Log("Waiting 10 seconds\n");
93
94
SDL_Delay(10 * 1000);
Aug 15, 2013
Aug 15, 2013
95
SDL_Log("Removing timer 1 and waiting 5 more seconds\n");
96
97
98
99
100
101
102
103
104
105
106
107
SDL_RemoveTimer(t1);
SDL_Delay(5 * 1000);
SDL_RemoveTimer(t2);
SDL_RemoveTimer(t3);
start = SDL_GetPerformanceCounter();
for (i = 0; i < 1000000; ++i) {
ticktock(0, NULL);
}
now = SDL_GetPerformanceCounter();
Aug 15, 2013
Aug 15, 2013
108
SDL_Log("1 million iterations of ticktock took %f ms\n", (double)((now - start)*1000) / SDL_GetPerformanceFrequency());
Aug 15, 2013
Aug 15, 2013
110
SDL_Log("Performance counter frequency: %llu\n", (unsigned long long) SDL_GetPerformanceFrequency());
111
112
113
114
115
start32 = SDL_GetTicks();
start = SDL_GetPerformanceCounter();
SDL_Delay(1000);
now = SDL_GetPerformanceCounter();
now32 = SDL_GetTicks();
Aug 15, 2013
Aug 15, 2013
116
SDL_Log("Delay 1 second = %d ms in ticks, %f ms according to performance counter\n", (now32-start32), (double)((now - start)*1000) / SDL_GetPerformanceFrequency());
117
118
119
120
121
122
SDL_Quit();
return (0);
}
/* vi: set ts=4 sw=4 expandtab: */