[PATCH weston] compositor-wayland: ignore frame callback's time

Bill Spitzak spitzak at gmail.com
Thu Apr 2 18:56:12 PDT 2015


Oops never mind, that is a listener function so it needs the argument 
even if it ignores it

On 04/02/2015 07:14 AM, Derek Foreman wrote:
> Makes sense, fixes the problem for me.
>
> Reviewed-by: Derek Foreman <derekf at osg.samsung.com>
>
> On 02/04/15 08:54 AM, Pekka Paalanen wrote:
>> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
>>
>> 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 <pekka.paalanen at collabora.co.uk>
>> Cc: Derek Foreman <derekf at osg.samsung.com>
>> Cc: Giulio Camuffo <giuliocamuffo at gmail.com>
>> ---
>>   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
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>


More information about the wayland-devel mailing list