X-Git-Url: https://git.ao2.it/experiments/fps-meter.git/blobdiff_plain/94acc6420c71fa3bbc662abd05976dd19f7da792..HEAD:/fps-meter.c diff --git a/fps-meter.c b/fps-meter.c index c66cb69..2d9ea6b 100644 --- a/fps-meter.c +++ b/fps-meter.c @@ -17,73 +17,22 @@ * along with this program. If not, see . */ -#include -#include - -#ifdef DEBUG -#define dbg(...) \ - do { \ - printf(__VA_ARGS__); \ - printf("\n"); \ - fflush(stdout); \ - } while(0) -#else -#define dbg(...) do {} while(0) -#endif - -#define NSEC_PER_SEC 1000000000 - -#define timespecsub(a, b, result) \ - do { \ - (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ - (result)->tv_nsec = (a)->tv_nsec - (b)->tv_nsec; \ - if ((result)->tv_nsec < 0) { \ - --(result)->tv_sec; \ - (result)->tv_nsec += 1000000000; \ - } \ - } while(0) +#include "fps-meter.h" int main(void) { - struct timespec time_start; - struct timespec time_end; - struct timespec elapsed; - + struct fps_meter_stats stats; struct timespec tmp; - unsigned int frames = 0; - double nsecs = 0; - float fps; - + fps_meter_init(&stats); while (1) { - clock_gettime(CLOCK_MONOTONIC, &time_start); - dbg("Start time: s: %ld, ns: %ld", time_start.tv_sec, time_start.tv_nsec); - /* simulate some workload of about 60fps */ - dbg("Doing some work, which takes about %d ns", NSEC_PER_SEC / 60); + fps_meter_dbg("Doing some work, which takes about %d ns", NSEC_PER_SEC / 60); tmp.tv_sec = 0; tmp.tv_nsec = NSEC_PER_SEC / 60; clock_nanosleep(CLOCK_MONOTONIC, 0, &tmp, NULL); - clock_gettime(CLOCK_MONOTONIC, &time_end); - dbg("End time: s: %ld, ns: %ld", time_end.tv_sec, time_end.tv_nsec); - timespecsub(&time_end, &time_start, &elapsed); - dbg("Elapsed s: %ld ns: %ld", elapsed.tv_sec, elapsed.tv_nsec); - - frames++; - nsecs += (elapsed.tv_sec * NSEC_PER_SEC + elapsed.tv_nsec); - if (nsecs >= NSEC_PER_SEC) { - /* - * if each frame takes less than a second, then just - * printing 'frames' is enough, but if we want to - * cover the case when a frame may take more than - * a second, some calculations have to be done. - */ - fps = frames / (nsecs / NSEC_PER_SEC); - printf("(frames: %d, nsecs: %f) FPS: %.2f\n", frames, nsecs, fps); - nsecs = 0; - frames = 0; - } + fps_meter_update(&stats); } return 0;