To aid supporting system event metric groups, break up the function
metricgroup__print() into a part which iterates metrics and a part which
actually "prints" the metric.

No functional change intended.

Signed-off-by: John Garry <john.ga...@huawei.com>
---
 tools/perf/util/metricgroup.c | 124 +++++++++++++++++++---------------
 1 file changed, 70 insertions(+), 54 deletions(-)

diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
index 82ba3638f48c..1102391cafeb 100644
--- a/tools/perf/util/metricgroup.c
+++ b/tools/perf/util/metricgroup.c
@@ -491,6 +491,72 @@ static void metricgroup__print_strlist(struct strlist 
*metrics, bool raw)
                putchar('\n');
 }
 
+static int metricgroup__print_pmu_event(struct pmu_event *pe,
+                                        bool metricgroups, char *filter,
+                                        bool raw, bool details,
+                                        struct rblist *groups,
+                                        struct strlist *metriclist)
+{
+       const char *g;
+       char *omg, *mg;
+
+       g = pe->metric_group;
+       if (!g && pe->metric_name) {
+               if (pe->name)
+                       return 0;
+               g = "No_group";
+       }
+
+       if (!g)
+               return 0;
+
+       mg = strdup(g);
+
+       if (!mg)
+               return -ENOMEM;
+       omg = mg;
+       while ((g = strsep(&mg, ";")) != NULL) {
+               struct mep *me;
+               char *s;
+
+               g = skip_spaces(g);
+               if (*g == 0)
+                       g = "No_group";
+               if (filter && !strstr(g, filter))
+                       continue;
+               if (raw)
+                       s = (char *)pe->metric_name;
+               else {
+                       if (asprintf(&s, "%s\n%*s%s]",
+                                    pe->metric_name, 8, "[", pe->desc) < 0)
+                               return -1;
+                       if (details) {
+                               if (asprintf(&s, "%s\n%*s%s]",
+                                            s, 8, "[", pe->metric_expr) < 0)
+                                       return -1;
+                       }
+               }
+
+               if (!s)
+                       continue;
+
+               if (!metricgroups) {
+                       strlist__add(metriclist, s);
+               } else {
+                       me = mep_lookup(groups, g);
+                       if (!me)
+                               continue;
+                       strlist__add(me->metrics, s);
+               }
+
+               if (!raw)
+                       free(s);
+       }
+       free(omg);
+
+       return 0;
+}
+
 void metricgroup__print(bool metrics, bool metricgroups, char *filter,
                        bool raw, bool details)
 {
@@ -515,66 +581,16 @@ void metricgroup__print(bool metrics, bool metricgroups, 
char *filter,
        groups.node_cmp = mep_cmp;
        groups.node_delete = mep_delete;
        for (i = 0; ; i++) {
-               const char *g;
                pe = &map->table[i];
 
                if (!pe->name && !pe->metric_group && !pe->metric_name)
                        break;
                if (!pe->metric_expr)
                        continue;
-               g = pe->metric_group;
-               if (!g && pe->metric_name) {
-                       if (pe->name)
-                               continue;
-                       g = "No_group";
-               }
-               if (g) {
-                       char *omg;
-                       char *mg = strdup(g);
-
-                       if (!mg)
-                               return;
-                       omg = mg;
-                       while ((g = strsep(&mg, ";")) != NULL) {
-                               struct mep *me;
-                               char *s;
-
-                               g = skip_spaces(g);
-                               if (*g == 0)
-                                       g = "No_group";
-                               if (filter && !strstr(g, filter))
-                                       continue;
-                               if (raw)
-                                       s = (char *)pe->metric_name;
-                               else {
-                                       if (asprintf(&s, "%s\n%*s%s]",
-                                                    pe->metric_name, 8, "[", 
pe->desc) < 0)
-                                               return;
-
-                                       if (details) {
-                                               if (asprintf(&s, "%s\n%*s%s]",
-                                                            s, 8, "[", 
pe->metric_expr) < 0)
-                                                       return;
-                                       }
-                               }
-
-                               if (!s)
-                                       continue;
-
-                               if (!metricgroups) {
-                                       strlist__add(metriclist, s);
-                               } else {
-                                       me = mep_lookup(&groups, g);
-                                       if (!me)
-                                               continue;
-                                       strlist__add(me->metrics, s);
-                               }
-
-                               if (!raw)
-                                       free(s);
-                       }
-                       free(omg);
-               }
+               if (metricgroup__print_pmu_event(pe, metricgroups, filter,
+                                                raw, details, &groups,
+                                                metriclist) < 0)
+                       return;
        }
 
        if (metricgroups && !raw)
-- 
2.26.2

Reply via email to