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