On Thu, 02 Apr 2015 09:14:36 -0500 Derek Foreman <[email protected]> wrote:
> Makes sense, fixes the problem for me. > > Reviewed-by: Derek Foreman <[email protected]> Pushed. f30af4e..04f8a9b master -> master Thanks, pq > 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
