From 4b1713d20315f6756fe130853f05c4e62f63ab28 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 27 Feb 2024 11:40:25 +0100 Subject: [PATCH] backend/drm: improve CRTC reallocation pretty printing Only print the list of connectors once, with both the old and new status. Use CRTC object IDs instead of CRTC indices. Make it obvious when a connector keeps the same CRTC. --- backend/drm/drm.c | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/backend/drm/drm.c b/backend/drm/drm.c index 65b116c7..4e2b3b84 100644 --- a/backend/drm/drm.c +++ b/backend/drm/drm.c @@ -1216,6 +1216,14 @@ static void dealloc_crtc(struct wlr_drm_connector *conn) { wlr_output_state_finish(&state); } +static void format_nullable_crtc(char *str, size_t size, struct wlr_drm_crtc *crtc) { + if (crtc != NULL) { + snprintf(str, size, "CRTC %"PRIu32, crtc->id); + } else { + snprintf(str, size, "no CRTC"); + } +} + static void realloc_crtcs(struct wlr_drm_backend *drm, struct wlr_drm_connector *want_conn) { assert(drm->num_crtcs > 0); @@ -1236,7 +1244,6 @@ static void realloc_crtcs(struct wlr_drm_backend *drm, previous_match[i] = UNMATCHED; } - wlr_log(WLR_DEBUG, "State before reallocation:"); size_t i = 0; struct wlr_drm_connector *conn; wl_list_for_each(conn, &drm->connectors, link) { @@ -1250,10 +1257,6 @@ static void realloc_crtcs(struct wlr_drm_backend *drm, // connector the user wants to enable bool want_crtc = conn == want_conn || conn->output.enabled; - wlr_log(WLR_DEBUG, " '%s': crtc=%d status=%s want_crtc=%d", - conn->name, conn->crtc ? (int)(conn->crtc - drm->crtcs) : -1, - drm_connector_status_str(conn->status), want_crtc); - if (conn->status == DRM_MODE_CONNECTED && want_crtc) { connector_constraints[i] = conn->possible_crtcs; } else { @@ -1278,6 +1281,31 @@ static void realloc_crtcs(struct wlr_drm_backend *drm, } } + for (size_t i = 0; i < num_connectors; ++i) { + struct wlr_drm_connector *conn = connectors[i]; + + struct wlr_drm_crtc *new_crtc = NULL; + if (connector_match[i] >= 0) { + new_crtc = &drm->crtcs[connector_match[i]]; + } + + char old_crtc_str[16], new_crtc_str[16]; + format_nullable_crtc(old_crtc_str, sizeof(old_crtc_str), conn->crtc); + format_nullable_crtc(new_crtc_str, sizeof(new_crtc_str), new_crtc); + + char crtc_str[64]; + if (conn->crtc != new_crtc) { + snprintf(crtc_str, sizeof(crtc_str), "%s → %s", old_crtc_str, new_crtc_str); + } else { + snprintf(crtc_str, sizeof(crtc_str), "%s (no change)", new_crtc_str); + } + + wlr_log(WLR_DEBUG, " Connector %s (%s%s): %s", + conn->name, drm_connector_status_str(conn->status), + connector_constraints[i] != 0 ? ", needs CRTC" : "", + crtc_str); + } + // Refuse to remove a CRTC from an enabled connector, and refuse to // change the CRTC of an enabled connector. for (size_t i = 0; i < num_connectors; ++i) { @@ -1299,13 +1327,9 @@ static void realloc_crtcs(struct wlr_drm_backend *drm, } // Apply new configuration - wlr_log(WLR_DEBUG, "State after reallocation:"); for (size_t i = 0; i < num_connectors; ++i) { struct wlr_drm_connector *conn = connectors[i]; - wlr_log(WLR_DEBUG, " '%s': crtc=%zd", - conn->name, connector_match[i]); - if (conn->crtc != NULL && connector_match[i] == conn->crtc - drm->crtcs) { // We don't need to change anything continue;