From: Soham Purkait <soham.purkait@intel.com>
To: igt-dev@lists.freedesktop.org, riana.tauro@intel.com,
vinay.belgaumkar@intel.com
Cc: anshuman.gupta@intel.com, lucas.demarchi@intel.com,
rodrigo.vivi@intel.com, soham.purkait@intel.com,
jonathan.ming.jun.lui@intel.com
Subject: [PATCH <i-g-t> v4 2/4] tools/gputop/utils: Add gputop utility functions common to all drivers
Date: Thu, 13 Mar 2025 11:51:52 +0530 [thread overview]
Message-ID: <20250313062154.1601701-3-soham.purkait@intel.com> (raw)
In-Reply-To: <20250313062154.1601701-1-soham.purkait@intel.com>
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@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
next prev parent reply other threads:[~2025-03-13 6:25 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-13 6:21 [PATCH <i-g-t> v4 0/4] Add single engine busyness stats in GPUTOP Soham Purkait
2025-03-13 6:21 ` [PATCH <i-g-t> v4 1/4] lib/igt_device_scan: Enable finding all IGT devices for a specific driver Soham Purkait
2025-03-13 8:13 ` Krzysztof Karas
2025-03-13 11:51 ` Zbigniew Kempczyński
2025-03-13 6:21 ` Soham Purkait [this message]
2025-03-13 6:21 ` [PATCH <i-g-t> v4 3/4] tools/gputop/xe_gputop: Add gputop support for xe specific devices Soham Purkait
2025-03-14 4:57 ` Riana Tauro
2025-03-21 3:26 ` Purkait, Soham
2025-03-21 6:20 ` Riana Tauro
2025-03-13 6:21 ` [PATCH <i-g-t> v4 4/4] tools/gputop/gputop: Enable support for multiple GPUs and instances Soham Purkait
2025-03-13 7:58 ` ✓ Xe.CI.BAT: success for Add single engine busyness stats in GPUTOP (rev5) Patchwork
2025-03-13 8:16 ` ✓ i915.CI.BAT: " Patchwork
2025-03-13 10:28 ` ✗ i915.CI.Full: failure " Patchwork
2025-03-14 13:14 ` ✗ Xe.CI.Full: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250313062154.1601701-3-soham.purkait@intel.com \
--to=soham.purkait@intel.com \
--cc=anshuman.gupta@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=jonathan.ming.jun.lui@intel.com \
--cc=lucas.demarchi@intel.com \
--cc=riana.tauro@intel.com \
--cc=rodrigo.vivi@intel.com \
--cc=vinay.belgaumkar@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox