On Tue, 5 Jun 2018 10:37:06 +0900 Tomohito Esaki <[email protected]> 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 <[email protected]> > --- > 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 */
pgpzDfG_YYfs3.pgp
Description: OpenPGP digital signature
_______________________________________________ wayland-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/wayland-devel
