Makes sense, fixes the problem for me.

Reviewed-by: Derek Foreman <[email protected]>

On 02/04/15 08:54 AM, Pekka Paalanen wrote:
> From: Pekka Paalanen <[email protected]>
> 
> Weston running the Wayland backend is nested. The parent compositor uses
> an unknown clock for the frame callback timestamps. This is quite likely
> a different clock from what the nested Weston chose as its presentation
> clock.
> 
> This means we cannot reasonably read the presentation clock and assume
> it has any relation to the timestamp got from the frame callback. In
> fact, this was seen to cause absurd repaint delays, trigger the insanity
> check, reduce fraterate, etc. problems, because we assume we can read
> the clock and compute the remaining repaint delay.
> 
> As we can't use the timestamp, ignore it, and read our own presentation
> clock instead.
> 
> The X11 backend does not suffer from this, because there the parent
> window system never provides us any timestamps, so we always read our
> own clock.
> 
> Signed-off-by: Pekka Paalanen <[email protected]>
> Cc: Derek Foreman <[email protected]>
> Cc: Giulio Camuffo <[email protected]>
> ---
>  src/compositor-wayland.c | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c
> index 7e59ecd..6c33361 100644
> --- a/src/compositor-wayland.c
> +++ b/src/compositor-wayland.c
> @@ -312,8 +312,15 @@ frame_done(void *data, struct wl_callback *callback, 
> uint32_t time)
>       wl_callback_destroy(callback);
>  
>       /* XXX: use the presentation extension for proper timings */
> -     ts.tv_sec = time / 1000;
> -     ts.tv_nsec = (time % 1000) * 1000000;
> +
> +     /*
> +      * This is the fallback case, where Presentation extension is not
> +      * available from the parent compositor. We do not know the base for
> +      * 'time', so we cannot feed it to finish_frame(). Do the only thing
> +      * we can, and pretend finish_frame time is when we process this
> +      * event.
> +      */
> +     weston_compositor_read_presentation_clock(output->compositor, &ts);
>       weston_output_finish_frame(output, &ts, 0);
>  }
>  
> 

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to