cscg22-gearboy

CSCG 2022 Challenge 'Gearboy'
git clone https://git.sinitax.com/sinitax/cscg22-gearboy
Log | Files | Refs | sfeed.txt

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: */