From a1d0cf5d6978b7ac1bd0079f91c37b3e3a969385 Mon Sep 17 00:00:00 2001 From: Olivier Blin Date: Wed, 25 Jul 2012 15:19:23 +0200 Subject: [PATCH] gears: show FPS count (as in glxgears from mesa/demos) --- clients/gears.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/clients/gears.c b/clients/gears.c index 70ec86c..19165e7 100644 --- a/clients/gears.c +++ b/clients/gears.c @@ -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); -- 2.7.4