simple-egl: Print fps for the spinning triangle
This is not a benchmark.
This commit is contained in:
+17
-5
@@ -87,6 +87,7 @@ struct window {
|
|||||||
GLuint col;
|
GLuint col;
|
||||||
} gl;
|
} gl;
|
||||||
|
|
||||||
|
uint32_t benchmark_time, frames;
|
||||||
struct wl_egl_window *native;
|
struct wl_egl_window *native;
|
||||||
struct wl_surface *surface;
|
struct wl_surface *surface;
|
||||||
struct wl_shell_surface *shell_surface;
|
struct wl_shell_surface *shell_surface;
|
||||||
@@ -412,11 +413,11 @@ redraw(void *data, struct wl_callback *callback, uint32_t time)
|
|||||||
{ 0, 0, 1, 0 },
|
{ 0, 0, 1, 0 },
|
||||||
{ 0, 0, 0, 1 }
|
{ 0, 0, 0, 1 }
|
||||||
};
|
};
|
||||||
static const int32_t speed_div = 5;
|
static const int32_t speed_div = 5, benchmark_interval = 5;
|
||||||
static uint32_t start_time = 0;
|
|
||||||
struct wl_region *region;
|
struct wl_region *region;
|
||||||
EGLint rect[4];
|
EGLint rect[4];
|
||||||
EGLint buffer_age = 0;
|
EGLint buffer_age = 0;
|
||||||
|
struct timeval tv;
|
||||||
|
|
||||||
assert(window->callback == callback);
|
assert(window->callback == callback);
|
||||||
window->callback = NULL;
|
window->callback = NULL;
|
||||||
@@ -427,10 +428,20 @@ redraw(void *data, struct wl_callback *callback, uint32_t time)
|
|||||||
if (!window->configured)
|
if (!window->configured)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (start_time == 0)
|
gettimeofday(&tv, NULL);
|
||||||
start_time = time;
|
time = tv.tv_sec * 1000 + tv.tv_usec / 1000;
|
||||||
|
if (window->frames == 0)
|
||||||
|
window->benchmark_time = time;
|
||||||
|
if (time - window->benchmark_time > (benchmark_interval * 1000)) {
|
||||||
|
printf("%d frames in %d seconds: %f fps\n",
|
||||||
|
window->frames,
|
||||||
|
benchmark_interval,
|
||||||
|
(float) window->frames / benchmark_interval);
|
||||||
|
window->benchmark_time = time;
|
||||||
|
window->frames = 0;
|
||||||
|
}
|
||||||
|
|
||||||
angle = ((time-start_time) / speed_div) % 360 * M_PI / 180.0;
|
angle = (time / speed_div) % 360 * M_PI / 180.0;
|
||||||
rotation[0][0] = cos(angle);
|
rotation[0][0] = cos(angle);
|
||||||
rotation[0][2] = sin(angle);
|
rotation[0][2] = sin(angle);
|
||||||
rotation[2][0] = -sin(angle);
|
rotation[2][0] = -sin(angle);
|
||||||
@@ -483,6 +494,7 @@ redraw(void *data, struct wl_callback *callback, uint32_t time)
|
|||||||
} else {
|
} else {
|
||||||
eglSwapBuffers(display->egl.dpy, window->egl_surface);
|
eglSwapBuffers(display->egl.dpy, window->egl_surface);
|
||||||
}
|
}
|
||||||
|
window->frames++;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct wl_callback_listener frame_listener = {
|
static const struct wl_callback_listener frame_listener = {
|
||||||
|
|||||||
Reference in New Issue
Block a user