On Sun, 10 Aug 2014 23:47:45 +0900 Ryo Munakata <ryomnk...@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); Yup, this is right. Pushed. Thanks for the reviw, Nils. Thanks, pq _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel