frontend: export fps stats to plugins
authornotaz <notasas@gmail.com>
Fri, 20 Jan 2012 01:08:33 +0000 (03:08 +0200)
committernotaz <notasas@gmail.com>
Fri, 20 Jan 2012 22:05:13 +0000 (00:05 +0200)
frontend/plat_pollux.c
frontend/plugin_lib.c
frontend/plugin_lib.h

index daf2f84..6247dc1 100644 (file)
@@ -340,7 +340,7 @@ static void raw_flip_dma(int x, int y)
        }
 
        g_menuscreen_ptr = fb_flip();
-       pl_flip_cnt++;
+       pl_rearmed_cbs.flip_cnt++;
 
        pcnt_end(PCNT_BLIT);
 }
@@ -369,7 +369,7 @@ static void name(int x, int y)
         }                                                                               \
                                                                                         \
         g_menuscreen_ptr = fb_flip();                                                   \
-        pl_flip_cnt++;                                                                  \
+        pl_rearmed_cbs.flip_cnt++;                                                      \
                                                                                         \
         pcnt_end(PCNT_BLIT);                                                            \
 }
index ac911cc..e79e523 100644 (file)
@@ -35,12 +35,10 @@ int in_a1[2] = { 127, 127 }, in_a2[2] = { 127, 127 };
 int in_adev[2] = { -1, -1 }, in_adev_axis[2][2] = {{ 0, 1 }, { 0, 1 }};
 int in_keystate, in_state_gun;
 int in_enable_vibration;
-int pl_flip_cnt;
 void *tsdev;
 void *pl_vout_buf;
 static int pl_vout_w, pl_vout_h, pl_vout_bpp;
-static int vsync_cnt, flips_per_sec, tick_per_sec;
-static float vsps_cur;
+static int vsync_cnt;
 static int frame_interval, frame_interval1024, vsync_usec_time;
 
 
@@ -73,13 +71,14 @@ static void print_msg(int h, int border)
 static void print_fps(int h, int border)
 {
        if (pl_vout_bpp == 16)
-               pl_text_out16(border + 2, h - 10, "%2d %4.1f", flips_per_sec, vsps_cur);
+               pl_text_out16(border + 2, h - 10, "%2d %4.1f",
+                       pl_rearmed_cbs.flips_per_sec, pl_rearmed_cbs.vsps_cur);
 }
 
 static void print_cpu_usage(int w, int h, int border)
 {
        if (pl_vout_bpp == 16)
-               pl_text_out16(w - border - 28, h - 10, "%3d", tick_per_sec);
+               pl_text_out16(w - border - 28, h - 10, "%3d", pl_rearmed_cbs.cpu_usage);
 }
 
 // draw 192x8 status of 24 sound channels
@@ -164,7 +163,7 @@ static void *pl_vout_set_mode(int w, int h, int bpp)
 
 static void *pl_vout_flip(void)
 {
-       pl_flip_cnt++;
+       pl_rearmed_cbs.flip_cnt++;
 
        if (pl_vout_buf != NULL)
                pl_print_hud(pl_vout_w, pl_vout_h, 0);
@@ -313,26 +312,28 @@ void pl_frame_limit(void)
 
        if (now.tv_sec != tv_old.tv_sec) {
                diff = tvdiff(now, tv_old);
-               vsps_cur = 0.0f;
+               pl_rearmed_cbs.vsps_cur = 0.0f;
                if (0 < diff && diff < 2000000)
-                       vsps_cur = 1000000.0f * (vsync_cnt - vsync_cnt_prev) / diff;
+                       pl_rearmed_cbs.vsps_cur = 1000000.0f * (vsync_cnt - vsync_cnt_prev) / diff;
                vsync_cnt_prev = vsync_cnt;
-               flips_per_sec = pl_flip_cnt;
-               pl_flip_cnt = 0;
-               tv_old = now;
+
+               if (g_opts & OPT_SHOWFPS)
+                       pl_rearmed_cbs.flips_per_sec = pl_rearmed_cbs.flip_cnt;
+               pl_rearmed_cbs.flip_cnt = 0;
                if (g_opts & OPT_SHOWCPU)
-                       tick_per_sec = get_cpu_ticks();
+                       pl_rearmed_cbs.cpu_usage = get_cpu_ticks();
 
                if (hud_new_msg > 0) {
                        hud_new_msg--;
                        if (hud_new_msg == 0)
                                hud_msg[0] = 0;
                }
+               tv_old = now;
        }
 #ifdef PCNT
        static int ya_vsync_count;
        if (++ya_vsync_count == PCNT_FRAMES) {
-               pcnt_print(vsps_cur);
+               pcnt_print(pl_rearmed_cbs.vsps_cur);
                ya_vsync_count = 0;
        }
 #endif
@@ -386,6 +387,8 @@ void pl_frame_limit(void)
 void pl_timing_prepare(int is_pal)
 {
        pl_rearmed_cbs.fskip_advice = 0;
+       pl_rearmed_cbs.flips_per_sec = 0;
+       pl_rearmed_cbs.cpu_usage = 0;
 
        frame_interval = is_pal ? 20000 : 16667;
        frame_interval1024 = is_pal ? 20000*1024 : 17066667;
index 7085354..e6d1f7d 100644 (file)
@@ -23,7 +23,6 @@ extern int in_adev[2], in_adev_axis[2][2];
 extern int in_enable_vibration;
 
 extern void *pl_vout_buf;
-extern int pl_flip_cnt;
 
 void  pl_text_out16(int x, int y, const char *texto, ...);
 void  pl_start_watchdog(void);
@@ -45,11 +44,15 @@ struct rearmed_cbs {
        // these are only used by some frontends
        void  (*pl_vout_raw_flip)(int x, int y);
        void  (*pl_vout_set_raw_vram)(void *vram);
+       // some stats, for display by some plugins
+       int flips_per_sec, cpu_usage;
+       float vsps_cur; // currect vsync/s
        // gpu options
        int   frameskip;
        int   fskip_advice;
        unsigned int *gpu_frame_count;
        unsigned int *gpu_hcnt;
+       unsigned int flip_cnt; // increment manually if not using pl_vout_flip
        struct {
                int   allow_interlace; // 0 off, 1 on, 2 guess
        } gpu_neon;