test/testtimer.c
author Sam Lantinga <slouken@libsdl.org>
Thu, 07 Dec 2017 16:08:09 -0800
changeset 11730 ac6c607e065c
parent 10737 3406a0f8b041
child 11811 5d94cb6b24d3
permissions -rw-r--r--
Enable building the Metal renderer by default, and weak link the Metal framework so the SDL library is safe to use on older Macs
Also generate iOS versions of the Metal shaders
     1 /*
     2   Copyright (C) 1997-2017 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: %"SDL_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: */