-
-unsigned int gp2x_ticks_per_ms=7372800;
-int needfpsflip=1;
-#ifdef FRAMESKIP
-int skipval=16;
-int framecount=0;
-int numrepeats=0;
-int doskipping=0;
-#endif
-
-
-INLINE void printFps(uint8 *screen)
-{
- int y;
- int* destt;
-
- if (needfpsflip)
- {
- if (stretch_offset > 0)
- {
- y=240;
- while (y--)
- {
-
- int* dest=(int *) (screen+((y << 8) + (y << 6))+stretch_offset);
-
- destt=dest - 8;
- destt[0]=0x3F3F3F3F; destt[1]=0x3F3F3F3F; destt[2]=0x3F3F3F3F; destt[3]=0x3F3F3F3F;
- destt[4]=0x3F3F3F3F; destt[5]=0x3F3F3F3F; destt[6]=0x3F3F3F3F; destt[7]=0x3F3F3F3F;
-
- destt=dest + 64;
- destt[0]=0x3F3F3F3F; destt[1]=0x3F3F3F3F; destt[2]=0x3F3F3F3F; destt[3]=0x3F3F3F3F;
- destt[4]=0x3F3F3F3F; destt[5]=0x3F3F3F3F; destt[6]=0x3F3F3F3F; destt[7]=0x3F3F3F3F;
- }
- if (showfps)
- {
- gp2x_text(screen, 0, 0, fps_str, FPS_COLOR, 0);
- }
- }
-
- if (needfpsflip <= 3)
- {
- if (showfps)
- {
- gp2x_text(screen, 0, 0, fps_str, FPS_COLOR, 0);
- }
- needfpsflip++;
- }
- else
- {
- needfpsflip=0;
- }
- }
-#ifdef FRAMESKIP
- if ((fps < 59) && doskipping && ((framesRendered % skipval) == (skipval-1)))
- {
- FCEUI_FrameSkip(1);
- }
-#endif
- if ((framesRendered & 0x3F) != 0x3F)
- {
- return;
- }
-
- unsigned long currTime=gp2x_timer_read_ms();
- fps= (unsigned long)( framesRendered * 7372800 / (currTime - ticks));
- if (fps > 90)
- fps=90;
-
- if (fps > 30)
- {
- fps_samplecount++;
- total_fps+=fps;
- }
- if (stretch_offset && showfps)
- {
- sprintf(fps_str, "%d", (int)fps);
- needfpsflip=1;
- fps_str[2]=0;
- gp2x_text(screen, 0, 0, fps_str, stretch_offset, 0);
- }
-
-#ifdef FRAMESKIP
- if (fps < 59)
- {
- numrepeats++;
- if (numrepeats >= 4)
- {
- if (skipval > 4)
- {
- skipval-=2;
- }
- doskipping=1;
- printf("skipping every %dth frame, currfps=%d\n", skipval, fps);
- numrepeats=0;
- }
- }
- else
- {
- numrepeats=0;
- }
-#endif
- ticks = currTime;
- framesRendered = 0;
+static INLINE void printFps(uint8 *screen)
+{
+ struct timeval tv_now;
+ static int prevsec, needfpsflip = 0;
+
+ gettimeofday(&tv_now, 0);
+ if (prevsec != tv_now.tv_sec)
+ {
+ sprintf(fps_str, "%i/%i", framesRendered, framesEmulated);
+ framesEmulated = framesRendered = 0;
+ needfpsflip = 4;
+ prevsec = tv_now.tv_sec;
+ }
+
+ if (stretch_offset > 0)
+ {
+ if (needfpsflip)
+ {
+ int y, *destt = (int *) screen;
+ for (y = 240; y; y--)
+ {
+ *destt++ = 0x3F3F3F3F; *destt++ = 0x3F3F3F3F; *destt++ = 0x3F3F3F3F; *destt++ = 0x3F3F3F3F;
+ *destt++ = 0x3F3F3F3F; *destt++ = 0x3F3F3F3F; *destt++ = 0x3F3F3F3F; *destt++ = 0x3F3F3F3F;
+ destt += 64;
+
+ *destt++ = 0x3F3F3F3F; *destt++ = 0x3F3F3F3F; *destt++ = 0x3F3F3F3F; *destt++ = 0x3F3F3F3F;
+ *destt++ = 0x3F3F3F3F; *destt++ = 0x3F3F3F3F; *destt++ = 0x3F3F3F3F; *destt++ = 0x3F3F3F3F;
+ }
+ if (showfps)
+ {
+ fps_str[2] = 0;
+ gp2x_text(screen, 0, 0, fps_str, FPS_COLOR, 0);
+ gp2x_text(screen, 0, 10, fps_str+3, FPS_COLOR, 0);
+ }
+ needfpsflip--;
+ }
+ }
+ else
+ {
+ if (showfps)
+ {
+ gp2x_text(screen, 0, 0, fps_str, FPS_COLOR, 0);
+ }
+ }