aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2024-02-27 11:40:25 +0100
committerSimon Ser <contact@emersion.fr>2024-02-27 11:40:25 +0100
commit4b1713d20315f6756fe130853f05c4e62f63ab28 (patch)
treee5574d32d38f5e6514d0d01deb7a128f2f6c9106
parentdb2b1892ad6c9c5da27bb3ca16e0a644931ce132 (diff)
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.
-rw-r--r--backend/drm/drm.c42
1 files 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;