summaryrefslogtreecommitdiff
path: root/drm-legacy.c
diff options
context:
space:
mode:
authorRob Clark <robdclark@chromium.org>2020-03-01 10:09:11 -0800
committerRob Clark <robdclark@chromium.org>2020-03-07 09:22:17 -0800
commit301a556b8ece755bbf4f8ec3657e66e0a1dd327f (patch)
tree85271ae1f76ef74bced2b25f49ad511f2e6077ea /drm-legacy.c
parent163a0b061d3672bc5e0338b16fa11eaa53f63c77 (diff)
downloadkmscube-301a556b8ece755bbf4f8ec3657e66e0a1dd327f.tar.gz
add fps reporting
Diffstat (limited to 'drm-legacy.c')
-rw-r--r--drm-legacy.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/drm-legacy.c b/drm-legacy.c
index 56a0fed..e136c8a 100644
--- a/drm-legacy.c
+++ b/drm-legacy.c
@@ -51,6 +51,7 @@ static int legacy_run(const struct gbm *gbm, const struct egl *egl)
struct gbm_bo *bo;
struct drm_fb *fb;
uint32_t i = 0;
+ int64_t start_time, report_time, cur_time;
int ret;
eglSwapBuffers(egl->display, egl->surface);
@@ -69,10 +70,19 @@ static int legacy_run(const struct gbm *gbm, const struct egl *egl)
return ret;
}
+ start_time = report_time = get_time_ns();
+
while (1) {
struct gbm_bo *next_bo;
int waiting_for_flip = 1;
+ /* Start fps measuring on second frame, to remove the time spent
+ * compiling shader, etc, from the fps:
+ */
+ if (i == 1) {
+ start_time = report_time = get_time_ns();
+ }
+
egl->draw(i++);
eglSwapBuffers(egl->display, egl->surface);
@@ -114,6 +124,16 @@ static int legacy_run(const struct gbm *gbm, const struct egl *egl)
drmHandleEvent(drm.fd, &evctx);
}
+ cur_time = get_time_ns();
+ if (cur_time > (report_time + 2 * NSEC_PER_SEC)) {
+ double elapsed_time = cur_time - start_time;
+ double secs = elapsed_time / (double)NSEC_PER_SEC;
+ unsigned frames = i - 1; /* first frame ignored */
+ printf("Rendered %u frames in %f sec (%f fps)\n",
+ frames, secs, (double)frames/secs);
+ report_time = cur_time;
+ }
+
/* release last buffer to render on again: */
gbm_surface_release_buffer(gbm->surface, bo);
bo = next_bo;