From: Tvrtko Ursulin <[email protected]>

Wrap all operations on clients via the Intel specific wrappers in order to
simplify upcoming work.

Signed-off-by: Tvrtko Ursulin <[email protected]>
---
 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

Reply via email to