4 #include "../gp2x/main.h"
5 #include "../gp2x/gp2x.h"
6 #include "../gp2x/throttle.h"
11 static int usec_aim = 0, usec_done = 0;
12 static int skip_count = 0;
14 void RefreshThrottleFPS(void)
16 usec_aim = usec_done = skip_count = 0;
19 void SpeedThrottle(void)
21 static struct timeval tv_prev;
22 struct timeval tv_now;
23 int delta_nom = PAL ? 19997 : 16639; // ~50.007, 19.997 ms/frame : ~60.1, 16.639 ms/frame
26 if (usec_done == 0) { // first time
28 gettimeofday(&tv_prev, 0);
32 gettimeofday(&tv_now, 0);
34 usec_aim += delta_nom;
35 if (tv_now.tv_sec != tv_prev.tv_sec)
37 usec_done += tv_now.tv_usec - tv_prev.tv_usec;
40 if (Settings.frameskip >= 0)
42 if (skip_count >= Settings.frameskip)
49 else if (usec_done > usec_aim + 1024*4)
52 if (usec_done - usec_aim > 1024*32)
53 usec_done = usec_aim = 1; // too much behind, try to recover..
62 while (usec_done < usec_aim)
65 gettimeofday(&tv_now, 0);
67 if (tv_now.tv_sec != tv_prev.tv_sec)
69 usec_done += tv_now.tv_usec - tv_prev.tv_usec;
72 usec_done = usec_done - usec_aim + 1; // reset to prevent overflows