[igt-dev] [PATCH i-g-t 7/9] tools/intel_gpu_top: Fully wrap clients operations

Kamil Konieczny kamil.konieczny at linux.intel.com
Fri Nov 3 18:57:29 UTC 2023


Hi Tvrtko,
On 2023-10-12 at 09:15:45 +0100, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> 
> Wrap all operations on clients via the Intel specific wrappers in order to
> simplify upcoming work.
> 
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Reviewed-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>

> ---
>  tools/intel_gpu_top.c | 42 ++++++++++++++++++++++--------------------
>  1 file changed, 22 insertions(+), 20 deletions(-)
> 
> diff --git a/tools/intel_gpu_top.c b/tools/intel_gpu_top.c
> index 091fe28068dc..b2e81d5f9ffb 100644
> --- a/tools/intel_gpu_top.c
> +++ b/tools/intel_gpu_top.c
> @@ -132,6 +132,7 @@ struct engines {
>  struct intel_clients {
>  	const char *pci_slot;
>  	struct igt_drm_client_engines classes;
> +	struct igt_drm_clients *clients;
>  };
>  
>  static struct termios termios_orig;
> @@ -2436,19 +2437,22 @@ intel_init_clients(struct intel_clients *iclients,
>  		iclients->classes.capacity[i] = engines->class[i].num_engines;
>  		iclients->classes.names[i] = strdup(engines->class[i].name);
>  	}
> +
> +	iclients->clients = igt_drm_clients_init(iclients);
>  }
>  
>  static void intel_free_clients(struct intel_clients *iclients)
>  {
> +	if (iclients->clients)
> +		igt_drm_clients_free(iclients->clients);
> +
>  	free((void *)iclients->pci_slot);
>  	free(iclients->classes.capacity);
>  	free(iclients->classes.names);
>  }
>  
> -int main(int argc, char **argv)
> +static void intel_scan_clients(struct intel_clients *iclients)
>  {
> -	unsigned int period_us = DEFAULT_PERIOD_MS * 1000;
> -	struct igt_drm_clients *clients = NULL;
>  	static const char *engine_map[] = {
>  		"render",
>  		"copy",
> @@ -2456,6 +2460,15 @@ int main(int argc, char **argv)
>  		"video-enhance",
>  		"compute",
>  	};
> +
> +	igt_drm_clients_scan(iclients->clients, client_match,
> +			     engine_map, ARRAY_SIZE(engine_map),
> +			     NULL, 0);
> +}
> +
> +int main(int argc, char **argv)
> +{
> +	unsigned int period_us = DEFAULT_PERIOD_MS * 1000;
>  	bool physical_engines = false;
>  	struct intel_clients iclients;
>  	int con_w = -1, con_h = -1;
> @@ -2613,15 +2626,11 @@ int main(int argc, char **argv)
>  
>  	init_engine_classes(engines);
>  
> -	if (has_drm_fdinfo(&card)) {
> +	if (has_drm_fdinfo(&card))
>  		intel_init_clients(&iclients, &card, engines);
> -		clients = igt_drm_clients_init(&iclients);
> -	}
>  
>  	pmu_sample(engines);
> -	igt_drm_clients_scan(clients, client_match,
> -			     engine_map, ARRAY_SIZE(engine_map),
> -			     NULL, 0);
> +	intel_scan_clients(&iclients);
>  	gettime(&ts);
>  
>  	if (output_mode == JSON)
> @@ -2652,12 +2661,8 @@ int main(int argc, char **argv)
>  		pmu_sample(engines);
>  		t = (double)(engines->ts.cur - engines->ts.prev) / 1e9;
>  
> -		disp_clients =
> -			display_clients(igt_drm_clients_scan(clients,
> -							     client_match,
> -							     engine_map,
> -							     ARRAY_SIZE(engine_map),
> -							     NULL, 0));
> +		intel_scan_clients(&iclients);
> +		disp_clients = display_clients(iclients.clients);
>  		scan_us = elapsed_us(&ts, period_us);
>  
>  		if (stop_top)
> @@ -2708,7 +2713,7 @@ int main(int argc, char **argv)
>  			pops->close_struct();
>  		}
>  
> -		if (disp_clients != clients)
> +		if (disp_clients != iclients.clients)
>  			free_display_clients(disp_clients);
>  
>  		if (stop_top)
> @@ -2723,10 +2728,7 @@ int main(int argc, char **argv)
>  	if (output_mode == JSON)
>  		printf("]\n");
>  
> -	if (clients) {
> -		igt_drm_clients_free(clients);
> -		intel_free_clients(&iclients);
> -	}
> +	intel_free_clients(&iclients);
>  
>  	free(codename);
>  err_pmu:
> -- 
> 2.39.2
> 


More information about the igt-dev mailing list