[PATCH weston 2/2] libweston: Reset repaint schedule for all repainted outputs when repaint cancel

Pekka Paalanen ppaalanen at gmail.com
Thu Jun 7 09:23:59 UTC 2018


On Tue,  5 Jun 2018 10:37:06 +0900
Tomohito Esaki <etom at igel.co.jp> wrote:

> All outputs is canceled repaint when a output repaint is failed. At that
> time, the output whose repaint is success is not scheduled because the
> repaint status of that is still REPAINT_AWAITING_COMPLETION. Therefore,
> we need to reset repaint schedule for all repainted outputs.
> 
> Signed-off-by: Tomohito Esaki <etom at igel.co.jp>
> ---
>  libweston/compositor.c | 8 ++++++++
>  libweston/compositor.h | 3 +++
>  2 files changed, 11 insertions(+)

Hi Esaki-san,

this is a good first step towards making Weston deal with failing
output updates. Pushed both patches:
   3a80ca06..7f4d9ffe  master -> master


Thanks,
pq

> 
> diff --git a/libweston/compositor.c b/libweston/compositor.c
> index d11a655..91f311d 100644
> --- a/libweston/compositor.c
> +++ b/libweston/compositor.c
> @@ -2450,6 +2450,8 @@ weston_output_maybe_repaint(struct weston_output *output, struct timespec *now,
>  	int ret = 0;
>  	int64_t msec_to_repaint;
>  
> +	output->repainted = false;
> +
>  	/* We're not ready yet; come back to make a decision later. */
>  	if (output->repaint_status != REPAINT_SCHEDULED)
>  		return ret;
> @@ -2479,6 +2481,7 @@ weston_output_maybe_repaint(struct weston_output *output, struct timespec *now,
>  	if (ret != 0)
>  		goto err;
>  
> +	output->repainted = true;
>  	return ret;
>  
>  err:
> @@ -2550,6 +2553,11 @@ output_repaint_timer_handler(void *data)
>  			compositor->backend->repaint_flush(compositor,
>  							   repaint_data);
>  	} else {
> +		wl_list_for_each(output, &compositor->output_list, link) {
> +			if (output->repainted)
> +				weston_output_schedule_repaint_reset(output);
> +		}
> +
>  		if (compositor->backend->repaint_cancel)
>  			compositor->backend->repaint_cancel(compositor,
>  							    repaint_data);
> diff --git a/libweston/compositor.h b/libweston/compositor.h
> index c2c40ee..8942ab9 100644
> --- a/libweston/compositor.h
> +++ b/libweston/compositor.h
> @@ -212,6 +212,9 @@ struct weston_output {
>  	 *  if set, a repaint will eventually occur. */
>  	bool repaint_needed;
>  
> +	/** Used only between repaint_begin and repaint_cancel. */
> +	bool repainted;
> +
>  	/** State of the repaint loop */
>  	enum {
>  		REPAINT_NOT_SCHEDULED = 0, /**< idle; no repaint will occur */

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20180607/ee10d088/attachment.sig>


More information about the wayland-devel mailing list