test/testtimer.c
author David Ludwig <dludwig@pobox.com>
Wed, 25 Dec 2013 21:39:48 -0500
changeset 8563 c0e68f3b6bbb
parent 7639 9406b7dd2f2d
child 8149 681eb46b8ac4
permissions -rw-r--r--
WinRT: compiled the d3d11 renderer's shaders into SDL itself

Previously, the shaders would get compiled separately, the output of which would need to be packaged into the app. This change should make SDL's dll be the only binary needed to include SDL in a WinRT app.
     1 /*
     2   Copyright (C) 1997-2013 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: %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: */