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

Tomohito Esaki etom at igel.co.jp
Tue Jun 5 01:37:06 UTC 2018


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(+)

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 */
-- 
2.7.4



More information about the wayland-devel mailing list