]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
tools/power turbostat: Refactor added column header printing
authorLen Brown <len.brown@intel.com>
Mon, 20 Oct 2025 20:19:43 +0000 (17:19 -0300)
committerLen Brown <len.brown@intel.com>
Fri, 24 Oct 2025 13:44:18 +0000 (10:44 -0300)
Over time, we built up many copies of nearly identical code...

Signed-off-by: Len Brown <len.brown@intel.com>
tools/power/x86/turbostat/turbostat.c

index 7c24c2f9a0752edc700fad46171f8f38e3bb084a..5d753df8706d0fd90a7fdb39997d571e1e1913ed 100644 (file)
@@ -2705,6 +2705,24 @@ void bic_lookup(cpu_set_t *ret_set, char *name_list, enum show_hide_mode mode)
        }
 }
 
+/*
+ * print_name()
+ * Print column header name for 64-bit counter in 16 columns (at least 8-char plus a tab)
+ * Otherwise, allow the name + tab to fit within 8-coumn tab-stop.
+ * In both cases, left justififed, just like other turbostat columns,
+ * to allow the column values to consume the tab.
+ *
+ * Yes, 32-bit counters can overflow 8-columns, but then they are usually 64-bit counters.
+ * 64-bit counters can overflow 16-columns, but rarely do.
+ */
+static inline int print_name(int width, int *printed, char *delim, char *name)
+{
+       if (width == 64)
+               return (sprintf(outp, "%s%-8s", (*printed++ ? delim : ""), name));
+       else
+               return (sprintf(outp, "%s%s", (*printed++ ? delim : ""), name));
+}
+
 void print_header(char *delim)
 {
        struct msr_counter *mp;
@@ -2760,50 +2778,22 @@ void print_header(char *delim)
        if (DO_BIC(BIC_SMI))
                outp += sprintf(outp, "%sSMI", (printed++ ? delim : ""));
 
-       for (mp = sys.tp; mp; mp = mp->next) {
+       for (mp = sys.tp; mp; mp = mp->next)
+               outp += print_name(mp->width, &printed, delim, mp->name);
 
-               if (mp->format == FORMAT_RAW || mp->format == FORMAT_AVERAGE) {
-                       if (mp->width == 64)
-                               outp += sprintf(outp, "%s%18.18s", (printed++ ? delim : ""), mp->name);
-                       else
-                               outp += sprintf(outp, "%s%10.10s", (printed++ ? delim : ""), mp->name);
-               } else {
-                       if ((mp->type == COUNTER_ITEMS) && sums_need_wide_columns)
-                               outp += sprintf(outp, "%s%8s", (printed++ ? delim : ""), mp->name);
-                       else
-                               outp += sprintf(outp, "%s%s", (printed++ ? delim : ""), mp->name);
-               }
-       }
-
-       for (pp = sys.perf_tp; pp; pp = pp->next) {
-
-               if (pp->format == FORMAT_RAW) {
-                       if (pp->width == 64)
-                               outp += sprintf(outp, "%s%18.18s", (printed++ ? delim : ""), pp->name);
-                       else
-                               outp += sprintf(outp, "%s%10.10s", (printed++ ? delim : ""), pp->name);
-               } else {
-                       if ((pp->type == COUNTER_ITEMS) && sums_need_wide_columns)
-                               outp += sprintf(outp, "%s%8s", (printed++ ? delim : ""), pp->name);
-                       else
-                               outp += sprintf(outp, "%s%s", (printed++ ? delim : ""), pp->name);
-               }
-       }
+       for (pp = sys.perf_tp; pp; pp = pp->next)
+               outp += print_name(pp->width, &printed, delim, pp->name);
 
        ppmt = sys.pmt_tp;
        while (ppmt) {
                switch (ppmt->type) {
                case PMT_TYPE_RAW:
-                       if (pmt_counter_get_width(ppmt) <= 32)
-                               outp += sprintf(outp, "%s%10.10s", (printed++ ? delim : ""), ppmt->name);
-                       else
-                               outp += sprintf(outp, "%s%18.18s", (printed++ ? delim : ""), ppmt->name);
-
+                       outp += print_name(pmt_counter_get_width(ppmt), &printed, delim, ppmt->name);
                        break;
 
                case PMT_TYPE_XTAL_TIME:
                case PMT_TYPE_TCORE_CLOCK:
-                       outp += sprintf(outp, "%s%s", (printed++ ? delim : ""), ppmt->name);
+                       outp += print_name(32, &printed, delim, ppmt->name);
                        break;
                }
 
@@ -2836,49 +2826,23 @@ void print_header(char *delim)
                        outp += sprintf(outp, "%sCor_J", (printed++ ? delim : ""));
        }
 
-       for (mp = sys.cp; mp; mp = mp->next) {
-               if (mp->format == FORMAT_RAW || mp->format == FORMAT_AVERAGE) {
-                       if (mp->width == 64)
-                               outp += sprintf(outp, "%s%18.18s", delim, mp->name);
-                       else
-                               outp += sprintf(outp, "%s%10.10s", delim, mp->name);
-               } else {
-                       if ((mp->type == COUNTER_ITEMS) && sums_need_wide_columns)
-                               outp += sprintf(outp, "%s%8s", delim, mp->name);
-                       else
-                               outp += sprintf(outp, "%s%s", delim, mp->name);
-               }
-       }
-
-       for (pp = sys.perf_cp; pp; pp = pp->next) {
+       for (mp = sys.cp; mp; mp = mp->next)
+               outp += print_name(mp->width, &printed, delim, mp->name);
 
-               if (pp->format == FORMAT_RAW) {
-                       if (pp->width == 64)
-                               outp += sprintf(outp, "%s%18.18s", (printed++ ? delim : ""), pp->name);
-                       else
-                               outp += sprintf(outp, "%s%10.10s", (printed++ ? delim : ""), pp->name);
-               } else {
-                       if ((pp->type == COUNTER_ITEMS) && sums_need_wide_columns)
-                               outp += sprintf(outp, "%s%8s", (printed++ ? delim : ""), pp->name);
-                       else
-                               outp += sprintf(outp, "%s%s", (printed++ ? delim : ""), pp->name);
-               }
-       }
+       for (pp = sys.perf_cp; pp; pp = pp->next)
+               outp += print_name(pp->width, &printed, delim, pp->name);
 
        ppmt = sys.pmt_cp;
        while (ppmt) {
                switch (ppmt->type) {
                case PMT_TYPE_RAW:
-                       if (pmt_counter_get_width(ppmt) <= 32)
-                               outp += sprintf(outp, "%s%10.10s", (printed++ ? delim : ""), ppmt->name);
-                       else
-                               outp += sprintf(outp, "%s%18.18s", (printed++ ? delim : ""), ppmt->name);
+                       outp += print_name(pmt_counter_get_width(ppmt), &printed, delim, ppmt->name);
 
                        break;
 
                case PMT_TYPE_XTAL_TIME:
                case PMT_TYPE_TCORE_CLOCK:
-                       outp += sprintf(outp, "%s%s", (printed++ ? delim : ""), ppmt->name);
+                       outp += print_name(32, &printed, delim, ppmt->name);
                        break;
                }
 
@@ -2966,51 +2930,22 @@ void print_header(char *delim)
        if (DO_BIC(BIC_UNCORE_MHZ))
                outp += sprintf(outp, "%sUncMHz", (printed++ ? delim : ""));
 
-       for (mp = sys.pp; mp; mp = mp->next) {
-               if (mp->format == FORMAT_RAW || mp->format == FORMAT_AVERAGE) {
-                       if (mp->width == 64)
-                               outp += sprintf(outp, "%s%18.18s", delim, mp->name);
-                       else if (mp->width == 32)
-                               outp += sprintf(outp, "%s%10.10s", delim, mp->name);
-                       else
-                               outp += sprintf(outp, "%s%7.7s", delim, mp->name);
-               } else {
-                       if ((mp->type == COUNTER_ITEMS) && sums_need_wide_columns)
-                               outp += sprintf(outp, "%s%8s", delim, mp->name);
-                       else
-                               outp += sprintf(outp, "%s%7.7s", delim, mp->name);
-               }
-       }
-
-       for (pp = sys.perf_pp; pp; pp = pp->next) {
+       for (mp = sys.pp; mp; mp = mp->next)
+               outp += print_name(mp->width, &printed, delim, mp->name);
 
-               if (pp->format == FORMAT_RAW) {
-                       if (pp->width == 64)
-                               outp += sprintf(outp, "%s%18.18s", (printed++ ? delim : ""), pp->name);
-                       else
-                               outp += sprintf(outp, "%s%10.10s", (printed++ ? delim : ""), pp->name);
-               } else {
-                       if ((pp->type == COUNTER_ITEMS) && sums_need_wide_columns)
-                               outp += sprintf(outp, "%s%8s", (printed++ ? delim : ""), pp->name);
-                       else
-                               outp += sprintf(outp, "%s%s", (printed++ ? delim : ""), pp->name);
-               }
-       }
+       for (pp = sys.perf_pp; pp; pp = pp->next)
+               outp += print_name(pp->width, &printed, delim, pp->name);
 
        ppmt = sys.pmt_pp;
        while (ppmt) {
                switch (ppmt->type) {
                case PMT_TYPE_RAW:
-                       if (pmt_counter_get_width(ppmt) <= 32)
-                               outp += sprintf(outp, "%s%10.10s", (printed++ ? delim : ""), ppmt->name);
-                       else
-                               outp += sprintf(outp, "%s%18.18s", (printed++ ? delim : ""), ppmt->name);
-
+                       outp += print_name(pmt_counter_get_width(ppmt), &printed, delim, ppmt->name);
                        break;
 
                case PMT_TYPE_XTAL_TIME:
                case PMT_TYPE_TCORE_CLOCK:
-                       outp += sprintf(outp, "%s%s", (printed++ ? delim : ""), ppmt->name);
+                       outp += print_name(32, &printed, delim, ppmt->name);
                        break;
                }