mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
tools: print async node state in pw-top
Pass the node async state in the profiler and use this in pw-top to draw the node with = instead of a + in the tree when it's async.
This commit is contained in:
parent
09cd7bf783
commit
f89428d9f8
4 changed files with 11 additions and 7 deletions
|
|
@ -14,7 +14,7 @@ node and device statistics.
|
||||||
A hierarchical view is shown of Driver nodes and follower nodes. The
|
A hierarchical view is shown of Driver nodes and follower nodes. The
|
||||||
Driver nodes are actively using a timer to schedule dataflow in 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
|
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:
|
The columns presented are as follows:
|
||||||
|
|
||||||
|
|
@ -173,8 +173,8 @@ For Video formats, the layout is \<pixelformat\>
|
||||||
\parblock
|
\parblock
|
||||||
Name assigned to the device/node, as found in *pw-dump* node.name
|
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
|
Names are prefixed by *+*/*=* when they are linked to a driver (entry
|
||||||
above with no +)
|
above with no +/=)
|
||||||
\endparblock
|
\endparblock
|
||||||
|
|
||||||
# COMMANDS
|
# COMMANDS
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,8 @@ enum spa_profiler {
|
||||||
* Long : finish,
|
* Long : finish,
|
||||||
* Int : status,
|
* Int : status,
|
||||||
* Fraction : latency,
|
* Fraction : latency,
|
||||||
* Int : xrun_count)) */
|
* Int : xrun_count))
|
||||||
|
* Bool : async)) */
|
||||||
SPA_PROFILER_followerClock, /**< follower clock information
|
SPA_PROFILER_followerClock, /**< follower clock information
|
||||||
* (Struct(
|
* (Struct(
|
||||||
* Int : clock id,
|
* Int : clock id,
|
||||||
|
|
|
||||||
|
|
@ -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_Long(n->async ? na->prev_finish_time : na->finish_time),
|
||||||
SPA_POD_Int(na->status),
|
SPA_POD_Int(na->status),
|
||||||
SPA_POD_Fraction(&latency),
|
SPA_POD_Fraction(&latency),
|
||||||
SPA_POD_Int(na->xrun_count));
|
SPA_POD_Int(na->xrun_count),
|
||||||
|
SPA_POD_Bool(n->async));
|
||||||
|
|
||||||
if (n->driver) {
|
if (n->driver) {
|
||||||
spa_pod_builder_prop(&b, SPA_PROFILER_followerClock, 0);
|
spa_pod_builder_prop(&b, SPA_PROFILER_followerClock, 0);
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@ struct measurement {
|
||||||
int64_t finish;
|
int64_t finish;
|
||||||
struct spa_fraction latency;
|
struct spa_fraction latency;
|
||||||
uint32_t xrun_count;
|
uint32_t xrun_count;
|
||||||
|
bool async;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct node {
|
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_Long(&m.finish),
|
||||||
SPA_POD_Int(&m.status),
|
SPA_POD_Int(&m.status),
|
||||||
SPA_POD_Fraction(&m.latency),
|
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;
|
return res;
|
||||||
|
|
||||||
if ((n = find_node(d, id)) == NULL)
|
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 :
|
i->xrun_count - dr->info_base :
|
||||||
n->measurement.xrun_count - n->measurement_base,
|
n->measurement.xrun_count - n->measurement_base,
|
||||||
active ? n->format : "",
|
active ? n->format : "",
|
||||||
n->driver == n ? "" : " + ",
|
n->driver == n ? "" : n->measurement.async ? " = " : " + ",
|
||||||
n->name);
|
n->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue