test/testtimer.c
author Philipp Wiesemann <philipp.wiesemann@arcor.de>
Wed, 11 Mar 2015 21:14:21 +0100
changeset 9380 07b7c1005a23
parent 9260 039714172dc3
child 9619 b94b6d0bff0f
permissions -rw-r--r--
Updated internal documentation comments.
     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 
    24 static int ticks = 0;
    25 
    26 static Uint32 SDLCALL
    27 ticktock(Uint32 interval, void *param)
    28 {
    29     ++ticks;
    30     return (interval);
    31 }
    32 
    33 static Uint32 SDLCALL
    34 callback(Uint32 interval, void *param)
    35 {
    36     SDL_Log("Timer %d : param = %d\n", interval, (int) (uintptr_t) param);
    37     return interval;
    38 }
    39 
    40 int
    41 main(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: %"PRIu64"\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: */