[PATCH v3 weston] gears: fix invalid calculation of the first FPS
Nils Chr. Brause
nilschrbrause at gmail.com
Mon Aug 11 09:14:33 PDT 2014
On Sun, Aug 10, 2014 at 4:47 PM, Ryo Munakata <ryomnktml at gmail.com> wrote:
> At the calculation of the first FPS, gears has initialized last
> FPS time with gettimeofday().
> But the callback_data passed in the callback of wl_surface_frame()
> is the current time, in milliseconds, with an undefined base.
> Because of this subtracting last FPS time from callback_data makes no
> sense.
> For example, below is the result of running weston-gears on weston with
> drm backend:
>
> $ weston-gears
> Warning: FPS count is limited by the wayland compositor or monitor refresh
> rate
> 1 frames in 1094460.125 seconds = 0.000 FPS
> 301 frames in 5.016 seconds = 60.008 FPS
> 301 frames in 5.016 seconds = 60.008 FPS
> 301 frames in 5.016 seconds = 60.008 FPS
>
> As you can see, the the first FPS value is something odd.
>
> This patch fixes it by initializing last FPS time with the callback_data
> passed in
> the first callback.
> ---
> clients/gears.c | 11 +++++++----
> 1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/clients/gears.c b/clients/gears.c
> index 95f0bb2..1fb77e0 100644
> --- a/clients/gears.c
> +++ b/clients/gears.c
> @@ -23,6 +23,7 @@
> #include "config.h"
>
> #include <stdint.h>
> +#include <stdbool.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> @@ -208,8 +209,13 @@ static void
> update_fps(struct gears *gears, uint32_t time)
> {
> long diff_ms;
> + static bool first_call = true;
>
> - gears->frames++;
> + if (first_call) {
> + gears->last_fps = time;
> + first_call = false;
> + } else
> + gears->frames++;
>
> diff_ms = time - gears->last_fps;
>
> @@ -398,7 +404,6 @@ gears_create(struct display *display)
> {
> const int width = 450, height = 500;
> struct gears *gears;
> - struct timeval tv;
> int i;
>
> gears = zalloc(sizeof *gears);
> @@ -437,8 +442,6 @@ 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;
> printf("Warning: FPS count is limited by the wayland compositor or
> monitor refresh rate\n");
>
> glEnable(GL_NORMALIZE);
>
Perfect! :)
Reviewed-by: Nils Chr. Brause <nilschrbrause at gmail.com>
--
> 2.0.4
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20140811/6c7172da/attachment.html>
More information about the wayland-devel
mailing list