From 446e36807fce9e683ca0dc7ec033b94c46da2bcf Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 8 Apr 2026 13:21:24 +0200 Subject: [PATCH] port: debug passive modes better --- src/modules/module-scheduler-v1.c | 18 +++++++++++------- src/pipewire/impl-node.c | 6 ++++-- src/pipewire/private.h | 16 ++++++++++++++++ 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/modules/module-scheduler-v1.c b/src/modules/module-scheduler-v1.c index 719a7c956..0bfe43a4a 100644 --- a/src/modules/module-scheduler-v1.c +++ b/src/modules/module-scheduler-v1.c @@ -194,12 +194,16 @@ static void make_runnable(struct pw_context *context, struct pw_impl_node *node) */ static inline bool runnable_pair(struct pw_impl_port *a, struct pw_impl_port *b) { + bool res = false; if (a->passive_mode == PASSIVE_MODE_FALSE) - return true; + res = true; if (a->passive_mode == PASSIVE_MODE_FOLLOW_SUSPEND && b->passive_mode == PASSIVE_MODE_FOLLOW_SUSPEND) - return true; - return false; + res = true; + pw_log_trace(" port %p <-> %p: %s <> %s -> %d", a, b, + passive_mode_to_string(a->passive_mode), + passive_mode_to_string(b->passive_mode), res); + return res; } static void check_runnable(struct pw_context *context, struct pw_impl_node *node) { @@ -218,8 +222,8 @@ static void check_runnable(struct pw_context *context, struct pw_impl_node *node n = l->input->node; /* the peer needs to be active and we are linked to it * with a non-passive link */ - pw_log_trace(" out-port %p: link %p passive:%d prepared:%d active:%d", p, - l, p->passive_mode, l->prepared, n->active); + pw_log_trace(" out-port %p: link %p prepared:%d active:%d", p, + l, l->prepared, n->active); if (!n->active || !runnable_pair(p, l->input)) continue; /* explicitly prepare the link in case it was suspended */ @@ -233,8 +237,8 @@ static void check_runnable(struct pw_context *context, struct pw_impl_node *node spa_list_for_each(p, &node->input_ports, link) { spa_list_for_each(l, &p->links, input_link) { n = l->output->node; - pw_log_trace(" in-port %p: link %p passive:%d prepared:%d active:%d", p, - l, p->passive_mode, l->prepared, n->active); + pw_log_trace(" in-port %p: link %p prepared:%d active:%d", p, + l, l->prepared, n->active); if (!n->active || !runnable_pair(p, l->output)) continue; pw_impl_link_prepare(l); diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c index c72dc7dcd..12173f431 100644 --- a/src/pipewire/impl-node.c +++ b/src/pipewire/impl-node.c @@ -1346,8 +1346,10 @@ static void check_properties(struct pw_impl_node *node) recalc_reason = "force rate changed"; } - pw_log_debug("%p: driver:%d recalc:%s active:%d passive:%d:%d", node, node->driver, - recalc_reason, node->active, node->passive_mode[0], node->passive_mode[1]); + pw_log_debug("%p: driver:%d recalc:%s active:%d passive:%s:%s", node, node->driver, + recalc_reason, node->active, + passive_mode_to_string(node->passive_mode[0]), + passive_mode_to_string(node->passive_mode[1])); if (recalc_reason != NULL && node->active) pw_context_recalc_graph(context, recalc_reason); diff --git a/src/pipewire/private.h b/src/pipewire/private.h index 27eaaeb96..612896861 100644 --- a/src/pipewire/private.h +++ b/src/pipewire/private.h @@ -989,6 +989,22 @@ struct pw_impl_port { void *user_data; /**< extra user data */ }; +static inline const char* passive_mode_to_string(uint32_t passive_mode) +{ + switch (passive_mode) { + case PASSIVE_MODE_FALSE: + return "false"; + case PASSIVE_MODE_TRUE: + return "true"; + case PASSIVE_MODE_FOLLOW: + return "follow"; + case PASSIVE_MODE_FOLLOW_SUSPEND: + return "follow"; + default: + return "unknown"; + } +} + struct pw_control_link { struct spa_list out_link; struct spa_list in_link;