mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-06 13:30:01 -05:00
node: rate-limit the graph warnings
This commit is contained in:
parent
9049f1fdbb
commit
4e9fd6633b
2 changed files with 33 additions and 3 deletions
|
|
@ -1057,6 +1057,9 @@ struct pw_impl_node *pw_context_create_node(struct pw_context *context,
|
||||||
this->rt.activation->sync_timeout = DEFAULT_SYNC_TIMEOUT;
|
this->rt.activation->sync_timeout = DEFAULT_SYNC_TIMEOUT;
|
||||||
this->rt.activation->sync_left = 0;
|
this->rt.activation->sync_left = 0;
|
||||||
|
|
||||||
|
this->rt.rate_limit.interval = 2 * SPA_NSEC_PER_SEC;
|
||||||
|
this->rt.rate_limit.burst = 1;
|
||||||
|
|
||||||
check_properties(this);
|
check_properties(this);
|
||||||
|
|
||||||
this->driver_node = this;
|
this->driver_node = this;
|
||||||
|
|
@ -1358,11 +1361,13 @@ static int node_ready(void *data, int status)
|
||||||
uint64_t min_timeout = UINT64_MAX;
|
uint64_t min_timeout = UINT64_MAX;
|
||||||
|
|
||||||
if (SPA_UNLIKELY(state->pending > 0)) {
|
if (SPA_UNLIKELY(state->pending > 0)) {
|
||||||
pw_log_warn("(%s-%u) graph not finished: state:%p pending %d/%d",
|
pw_context_driver_emit_incomplete(node->context, node);
|
||||||
|
if (ratelimit_test(&node->rt.rate_limit, a->signal_time)) {
|
||||||
|
pw_log_warn("(%s-%u) graph not finished: state:%p pending %d/%d",
|
||||||
node->name, node->info.id, state, state->pending,
|
node->name, node->info.id, state, state->pending,
|
||||||
state->required);
|
state->required);
|
||||||
pw_context_driver_emit_incomplete(node->context, node);
|
dump_states(node);
|
||||||
dump_states(node);
|
}
|
||||||
node->rt.target.signal(node->rt.target.data);
|
node->rt.target.signal(node->rt.target.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,29 @@ struct defaults {
|
||||||
unsigned int mem_allow_mlock;
|
unsigned int mem_allow_mlock;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ratelimit {
|
||||||
|
uint64_t interval;
|
||||||
|
uint64_t begin;
|
||||||
|
unsigned burst;
|
||||||
|
unsigned n_printed, n_missed;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline bool ratelimit_test(struct ratelimit *r, uint64_t now)
|
||||||
|
{
|
||||||
|
if (r->begin + r->interval < now) {
|
||||||
|
if (r->n_missed)
|
||||||
|
pw_log_warn("%u events suppressed", r->n_missed);
|
||||||
|
r->begin = now;
|
||||||
|
r->n_printed = 0;
|
||||||
|
r->n_missed = 0;
|
||||||
|
} else if (r->n_printed >= r->burst) {
|
||||||
|
r->n_missed++;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
r->n_printed++;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
#define MAX_PARAMS 32
|
#define MAX_PARAMS 32
|
||||||
|
|
||||||
#define pw_protocol_emit_destroy(p) spa_hook_list_call(&p->listener_list, struct pw_protocol_events, destroy, 0)
|
#define pw_protocol_emit_destroy(p) spa_hook_list_call(&p->listener_list, struct pw_protocol_events, destroy, 0)
|
||||||
|
|
@ -564,6 +587,8 @@ struct pw_impl_node {
|
||||||
struct pw_node_target target; /* our target that is signaled by the
|
struct pw_node_target target; /* our target that is signaled by the
|
||||||
driver */
|
driver */
|
||||||
struct spa_list driver_link; /* our link in driver */
|
struct spa_list driver_link; /* our link in driver */
|
||||||
|
|
||||||
|
struct ratelimit rate_limit;
|
||||||
} rt;
|
} rt;
|
||||||
|
|
||||||
void *user_data; /**< extra user data */
|
void *user_data; /**< extra user data */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue