diff --git a/doc/dox/programs/pw-top.1.md b/doc/dox/programs/pw-top.1.md index 460fd80d4..e1a866b55 100644 --- a/doc/dox/programs/pw-top.1.md +++ b/doc/dox/programs/pw-top.1.md @@ -14,7 +14,7 @@ node and device statistics. A hierarchical view is shown of Driver nodes and follower nodes. The Driver nodes are actively using a timer to schedule dataflow in the followers. The followers of a driver node as shown below their driver -with a + sign in a tree-like representation. +with a + sign (or = for async nodes) in a tree-like representation. The columns presented are as follows: @@ -173,8 +173,8 @@ For Video formats, the layout is \ \parblock Name assigned to the device/node, as found in *pw-dump* node.name -Names are prefixed by *+* when they are linked to a driver (entry -above with no +) +Names are prefixed by *+*/*=* when they are linked to a driver (entry +above with no +/=) \endparblock # COMMANDS diff --git a/spa/include/spa/param/profiler.h b/spa/include/spa/param/profiler.h index eb3fbadc9..8c87662d7 100644 --- a/spa/include/spa/param/profiler.h +++ b/spa/include/spa/param/profiler.h @@ -66,7 +66,8 @@ enum spa_profiler { * Long : finish, * Int : status, * Fraction : latency, - * Int : xrun_count)) */ + * Int : xrun_count)) + * Bool : async)) */ SPA_PROFILER_followerClock, /**< follower clock information * (Struct( * Int : clock id, diff --git a/src/modules/module-profiler.c b/src/modules/module-profiler.c index 3031caec3..d6ed9914c 100644 --- a/src/modules/module-profiler.c +++ b/src/modules/module-profiler.c @@ -298,7 +298,8 @@ static void context_do_profile(void *data) SPA_POD_Long(n->async ? na->prev_finish_time : na->finish_time), SPA_POD_Int(na->status), SPA_POD_Fraction(&latency), - SPA_POD_Int(na->xrun_count)); + SPA_POD_Int(na->xrun_count), + SPA_POD_Bool(n->async)); if (n->driver) { spa_pod_builder_prop(&b, SPA_PROFILER_followerClock, 0); diff --git a/src/tools/pw-top.c b/src/tools/pw-top.c index 6972ff2b7..6b936a9bf 100644 --- a/src/tools/pw-top.c +++ b/src/tools/pw-top.c @@ -44,6 +44,7 @@ struct measurement { int64_t finish; struct spa_fraction latency; uint32_t xrun_count; + bool async; }; struct node { @@ -419,7 +420,8 @@ static int process_follower_block(struct data *d, const struct spa_pod *pod, str SPA_POD_Long(&m.finish), SPA_POD_Int(&m.status), SPA_POD_Fraction(&m.latency), - SPA_POD_OPT_Int(&m.xrun_count))) < 0) + SPA_POD_OPT_Int(&m.xrun_count), + SPA_POD_OPT_Bool(&m.async))) < 0) return res; if ((n = find_node(d, id)) == NULL) @@ -540,7 +542,7 @@ static void print_node(struct data *d, struct node *dr, struct node *n, int y) i->xrun_count - dr->info_base : n->measurement.xrun_count - n->measurement_base, active ? n->format : "", - n->driver == n ? "" : " + ", + n->driver == n ? "" : n->measurement.async ? " = " : " + ", n->name); }