[PATCH <i-g-t> v4 2/4] tools/gputop/utils: Add gputop utility functions common to all drivers
Soham Purkait
soham.purkait at intel.com
Thu Mar 13 06:21:52 UTC 2025
Implement utility functions in gputop for common
operations and data handling across different drivers.
v2 : fix for refactoring GPUTOP into a
vendor-agnostic tool (Lucas)
v3 : Headers in alphabetical order (Kamil, Riana)
v4 : fix source file naming and remove driver
specific codes (Riana)
Signed-off-by: Soham Purkait <soham.purkait at intel.com>
---
tools/gputop/utils.c | 51 ++++++++++++++++++++++++++++++++++++++++
tools/gputop/utils.h | 55 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 106 insertions(+)
create mode 100644 tools/gputop/utils.c
create mode 100644 tools/gputop/utils.h
diff --git a/tools/gputop/utils.c b/tools/gputop/utils.c
new file mode 100644
index 000000000..78dca415f
--- /dev/null
+++ b/tools/gputop/utils.c
@@ -0,0 +1,51 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2025 Intel Corporation
+ */
+#include <assert.h>
+
+#include "utils.h"
+
+static const char * const bars[] = { " ", "▏", "▎", "▍", "▌", "▋", "▊", "▉", "█" };
+
+void n_spaces(const unsigned int n)
+{
+ unsigned int i;
+
+ for (i = 0; i < n; i++)
+ putchar(' ');
+}
+
+void print_percentage_bar(double percent, int max_len)
+{
+ int bar_len, i, len = max_len - 1;
+ const int w = 8;
+
+ len -= printf("|%5.1f%% ", percent);
+
+ /* no space left for bars, do what we can */
+ if (len < 0)
+ len = 0;
+
+ bar_len = ceil(w * percent * len / 100.0);
+ if (bar_len > w * len)
+ bar_len = w * len;
+
+ for (i = bar_len; i >= w; i -= w)
+ printf("%s", bars[w]);
+ if (i)
+ printf("%s", bars[i]);
+
+ len -= (bar_len + (w - 1)) / w;
+ n_spaces(len);
+
+ putchar('|');
+}
+
+int print_engines_footer(int lines, int con_w, int con_h)
+{
+ if (lines++ < con_h)
+ printf("\n");
+
+ return lines;
+}
diff --git a/tools/gputop/utils.h b/tools/gputop/utils.h
new file mode 100644
index 000000000..7030f04bd
--- /dev/null
+++ b/tools/gputop/utils.h
@@ -0,0 +1,55 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2025 Intel Corporation
+ */
+
+#ifndef COMMON_GPUTOP_H
+#define COMMON_GPUTOP_H
+
+#include <math.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "igt_device_scan.h"
+
+#define ANSI_HEADER "\033[7m"
+#define ANSI_RESET "\033[0m"
+
+/**
+ * struct gputop_device
+ *
+ * @driver_present: It is set if at least a
+ * single device found of the respective driver
+ * @len: Number of total device discovered
+ * of the respective driver
+ * @instances: pointer to the array of
+ * discovered instances of the devices
+ * of the same driver
+ */
+struct gputop_device {
+ bool driver_present;
+ int len;
+ void *instances;
+};
+
+/**
+ * struct device_operations - Structure to hold function
+ * pointers for device specific operations for each individual driver.
+ * @discover_engines: Function to discover engines.
+ * @pmu_init: Function to initialize the PMU (Performance Monitoring Unit).
+ * @pmu_sample: Function to sample PMU data.
+ * @print_engines: Function to print engine business.
+ */
+struct device_operations {
+ void *(*discover_engines)(const void *obj);
+ int (*pmu_init)(const void *obj);
+ void (*pmu_sample)(const void *obj);
+ int (*print_engines)(const void *obj, int lines, int w, int h);
+};
+
+void print_percentage_bar(double percent, int max_len);
+int print_engines_footer(int lines, int con_w, int con_h);
+void n_spaces(const unsigned int n);
+
+#endif /* COMMON_GPUTOP_H */
--
2.34.1
More information about the igt-dev
mailing list