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
	
	 Wim Taymans
						Wim Taymans