[PATCH 2/2] gears: show FPS count (as in glxgears from mesa/demos)

Olivier Blin olivier.blin at softathome.com
Wed Jul 25 06:19:23 PDT 2012


---
 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);
-- 
1.7.11.3

This message and any attachments herein are confidential, intended solely for the addressees and are SoftAtHome's ownership. Any unauthorized use or dissemination is prohibited. If you are not the intended addressee of this message, please cancel it immediately and inform the sender.


More information about the wayland-devel mailing list