diff options
author | Rob Clark <robdclark@chromium.org> | 2020-03-01 10:09:11 -0800 |
---|---|---|
committer | Rob Clark <robdclark@chromium.org> | 2020-03-07 09:22:17 -0800 |
commit | 301a556b8ece755bbf4f8ec3657e66e0a1dd327f (patch) | |
tree | 85271ae1f76ef74bced2b25f49ad511f2e6077ea /drm-legacy.c | |
parent | 163a0b061d3672bc5e0338b16fa11eaa53f63c77 (diff) | |
download | kmscube-301a556b8ece755bbf4f8ec3657e66e0a1dd327f.tar.gz |
add fps reporting
Diffstat (limited to 'drm-legacy.c')
-rw-r--r-- | drm-legacy.c | 20 |
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; |