Weston doesn't resume correct in multi-monitor.
When multi monitors (outputs) are enabled, once weston sleeps, only one monitor (output) wakes up and other ones remain inactive.
I think that the cause is in drm-backend. When output sleeps, drm-backend may turn DPMS off in drm_output_update_complete()
. In this case, the output->repaint_status
is REPAINT_AWAITING_COMPLETION
, so that repaint loop is not scheduled when the output wakes up.
The following patch fixes this issue.
diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
index 41cedecf..8acd690f 100644
--- a/libweston/compositor-drm.c
+++ b/libweston/compositor-drm.c
@@ -1866,7 +1866,6 @@ drm_output_update_complete(struct drm_output *output, uint32_t flags,
output->dpms_off_pending = 0;
drm_output_get_disable_state(pending, output);
drm_pending_state_apply_sync(pending);
- return;
} else if (output->state_cur->dpms == WESTON_DPMS_OFF &&
output->base.repaint_status != REPAINT_AWAITING_COMPLETION) {
/* DPMS can happen to us either in the middle of a repaint
However, I don't know if this fix is correct because I think it is enough that repaint_status
is changed only.