Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
111 lines (88 loc) · 2.67 KB

testtimer.c

File metadata and controls

111 lines (88 loc) · 2.67 KB
 
Apr 8, 2011
Apr 8, 2011
1
2
3
4
5
6
7
8
9
10
11
/*
Copyright (C) 1997-2011 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.
*/
Apr 26, 2001
Apr 26, 2001
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/* 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;
Jul 10, 2006
Jul 10, 2006
26
27
static Uint32 SDLCALL
ticktock(Uint32 interval)
Apr 26, 2001
Apr 26, 2001
28
{
Jul 10, 2006
Jul 10, 2006
29
30
++ticks;
return (interval);
Apr 26, 2001
Apr 26, 2001
31
32
}
Jul 10, 2006
Jul 10, 2006
33
34
static Uint32 SDLCALL
callback(Uint32 interval, void *param)
Apr 26, 2001
Apr 26, 2001
35
{
Jul 10, 2006
Jul 10, 2006
36
37
printf("Timer %d : param = %d\n", interval, (int) (uintptr_t) param);
return interval;
Apr 26, 2001
Apr 26, 2001
38
39
}
Jul 10, 2006
Jul 10, 2006
40
41
int
main(int argc, char *argv[])
Apr 26, 2001
Apr 26, 2001
42
{
Mar 25, 2011
Mar 25, 2011
43
int i, desired;
Jul 10, 2006
Jul 10, 2006
44
SDL_TimerID t1, t2, t3;
Mar 25, 2011
Mar 25, 2011
45
Uint64 start, now;
Jul 10, 2006
Jul 10, 2006
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
if (SDL_Init(SDL_INIT_TIMER) < 0) {
fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
return (1);
}
/* Start the timer */
desired = 0;
if (argv[1]) {
desired = atoi(argv[1]);
}
if (desired == 0) {
desired = DEFAULT_RESOLUTION;
}
SDL_SetTimer(desired, ticktock);
/* Wait 10 seconds */
printf("Waiting 10 seconds\n");
SDL_Delay(10 * 1000);
/* Stop the timer */
SDL_SetTimer(0, NULL);
/* Print the results */
if (ticks) {
fprintf(stderr,
"Timer resolution: desired = %d ms, actual = %f ms\n",
desired, (double) (10 * 1000) / ticks);
}
/* Test multiple timers */
printf("Testing multiple timers...\n");
t1 = SDL_AddTimer(100, callback, (void *) 1);
if (!t1)
fprintf(stderr, "Could not create timer 1: %s\n", SDL_GetError());
t2 = SDL_AddTimer(50, callback, (void *) 2);
if (!t2)
fprintf(stderr, "Could not create timer 2: %s\n", SDL_GetError());
t3 = SDL_AddTimer(233, callback, (void *) 3);
if (!t3)
fprintf(stderr, "Could not create timer 3: %s\n", SDL_GetError());
/* Wait 10 seconds */
printf("Waiting 10 seconds\n");
SDL_Delay(10 * 1000);
printf("Removing timer 1 and waiting 5 more seconds\n");
SDL_RemoveTimer(t1);
SDL_Delay(5 * 1000);
SDL_RemoveTimer(t2);
SDL_RemoveTimer(t3);
Mar 25, 2011
Mar 25, 2011
100
101
102
103
104
105
106
start = SDL_GetPerformanceCounter();
for (i = 0; i < 1000000; ++i) {
ticktock(0);
}
now = SDL_GetPerformanceCounter();
printf("1 million iterations of ticktock took %f ms\n", (double)((now - start)*1000) / SDL_GetPerformanceFrequency());
Jul 10, 2006
Jul 10, 2006
107
108
SDL_Quit();
return (0);
Apr 26, 2001
Apr 26, 2001
109
}
Mar 25, 2011
Mar 25, 2011
110
111
/* vi: set ts=4 sw=4 expandtab: */