diff --git a/src/modules/module-profiler.c b/src/modules/module-profiler.c index 5f20bd80e..10382027b 100644 --- a/src/modules/module-profiler.c +++ b/src/modules/module-profiler.c @@ -150,7 +150,7 @@ static void flush_timeout(void *data, uint64_t expirations) pw_profiler_resource_profile(resource, &p->pod); } -static void context_start(void *data, struct pw_impl_node *node) +static void context_do_profile(void *data, struct pw_impl_node *node) { struct impl *impl = data; char buffer[4096]; @@ -243,7 +243,8 @@ done: static const struct pw_context_driver_events context_events = { PW_VERSION_CONTEXT_DRIVER_EVENTS, - .start = context_start, + .incomplete = context_do_profile, + .complete = context_do_profile, }; static int do_stop(struct spa_loop *loop, diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c index 61096713e..76a5ebe7e 100644 --- a/src/pipewire/impl-node.c +++ b/src/pipewire/impl-node.c @@ -1008,7 +1008,7 @@ static inline int process_node(void *data) a->signal_time - a->prev_signal_time, a->cpu_load[0], a->cpu_load[1], a->cpu_load[2]); - pw_context_driver_emit_start(this->context, this); + pw_context_driver_emit_complete(this->context, this); } else if (status == SPA_STATUS_OK) { pw_log_trace_fp(NAME" %p: async continue", this); @@ -1542,6 +1542,8 @@ static int node_ready(void *data, int status) do_reposition(node, reposition_node); update_position(node, all_ready); + + pw_context_driver_emit_start(node->context, node); } if (SPA_UNLIKELY(node->driver && !node->driving)) return 0; diff --git a/src/pipewire/private.h b/src/pipewire/private.h index f6e6e8cea..d8d8c3166 100644 --- a/src/pipewire/private.h +++ b/src/pipewire/private.h @@ -329,6 +329,7 @@ pw_core_resource_errorf(struct pw_resource *resource, uint32_t id, int seq, #define pw_context_driver_emit_incomplete(c,n) pw_context_driver_emit(c, incomplete, 0, n) #define pw_context_driver_emit_timeout(c,n) pw_context_driver_emit(c, timeout, 0, n) #define pw_context_driver_emit_drained(c,n) pw_context_driver_emit(c, drained, 0, n) +#define pw_context_driver_emit_complete(c,n) pw_context_driver_emit(c, complete, 0, n) struct pw_context_driver_events { #define PW_VERSION_CONTEXT_DRIVER_EVENTS 0 @@ -344,6 +345,8 @@ struct pw_context_driver_events { void (*timeout) (void *data, struct pw_impl_node *node); /** a node drained */ void (*drained) (void *data, struct pw_impl_node *node); + /** The driver completed the graph */ + void (*complete) (void *data, struct pw_impl_node *node); }; #define pw_registry_resource(r,m,v,...) pw_resource_call(r, struct pw_registry_events,m,v,##__VA_ARGS__)