gears: show FPS count (as in glxgears from mesa/demos)
authorOlivier Blin <olivier.blin@softathome.com>
Wed, 25 Jul 2012 13:19:23 +0000 (15:19 +0200)
committerKristian Høgsberg <krh@bitplanet.net>
Fri, 27 Jul 2012 02:03:21 +0000 (22:03 -0400)
clients/gears.c

index 70ec86c..19165e7 100644 (file)
@@ -59,6 +59,8 @@ struct gears {
 
        GLint gear_list[3];
        int fullscreen;
+       int frames;
+       uint32_t last_fps;
 };
 
 struct gear_template {
@@ -203,10 +205,33 @@ make_gear(const struct gear_template *t)
 }
 
 static void
+update_fps(struct gears *gears, uint32_t time)
+{
+       long diff_ms;
+
+       gears->frames++;
+
+       diff_ms = time - gears->last_fps;
+
+       if (diff_ms > 5000) {
+               float seconds = diff_ms / 1000.0;
+               float fps = gears->frames / seconds;
+
+               printf("%d frames in %6.3f seconds = %6.3f FPS\n", gears->frames, seconds, fps);
+               fflush(stdout);
+
+               gears->frames = 0;
+               gears->last_fps = time;
+       }
+}
+
+static void
 frame_callback(void *data, struct wl_callback *callback, uint32_t time)
 {
        struct gears *gears = data;
 
+       update_fps(gears, time);
+
        gears->angle = (GLfloat) (time % 8192) * 360 / 8192.0;
 
        window_schedule_redraw(gears->window);
@@ -368,6 +393,7 @@ gears_create(struct display *display)
 {
        const int width = 450, height = 500;
        struct gears *gears;
+       struct timeval tv;
        int i;
 
        gears = malloc(sizeof *gears);
@@ -407,6 +433,9 @@ gears_create(struct display *display)
        gears->view.rotx = 20.0;
        gears->view.roty = 30.0;
 
+       gettimeofday(&tv, NULL);
+       gears->last_fps = tv.tv_sec * 1000 + tv.tv_usec / 1000;
+
        glEnable(GL_NORMALIZE);
 
        glMatrixMode(GL_PROJECTION);