perf metric: Add add_metric function
authorJiri Olsa <jolsa@kernel.org>
Sun, 19 Jul 2020 18:13:07 +0000 (20:13 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 30 Jul 2020 10:01:49 +0000 (07:01 -0300)
Decouple metric adding logging into add_metric function,
so it can be used from other places in following changes.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Reviewed-by: Kajol Jain <kjain@linux.ibm.com>
Acked-by: Ian Rogers <irogers@google.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: John Garry <john.garry@huawei.com>
Cc: Michael Petlan <mpetlan@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Clarke <pc@us.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lore.kernel.org/lkml/20200719181320.785305-7-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/metricgroup.c

index b37008f..4096be7 100644 (file)
@@ -625,6 +625,39 @@ static int __metricgroup__add_metric(struct list_head *group_list,
                    (match_metric(__pe->metric_group, __metric) ||      \
                     match_metric(__pe->metric_name, __metric)))
 
+static int add_metric(struct list_head *group_list,
+                     struct pmu_event *pe,
+                     bool metric_no_group)
+{
+       int ret = 0;
+
+       pr_debug("metric expr %s for %s\n", pe->metric_expr, pe->metric_name);
+
+       if (!strstr(pe->metric_expr, "?")) {
+               ret = __metricgroup__add_metric(group_list,
+                                               pe,
+                                               metric_no_group,
+                                               1);
+       } else {
+               int j, count;
+
+               count = arch_get_runtimeparam();
+
+               /* This loop is added to create multiple
+                * events depend on count value and add
+                * those events to group_list.
+                */
+
+               for (j = 0; j < count && !ret; j++) {
+                       ret = __metricgroup__add_metric(
+                               group_list, pe,
+                               metric_no_group, j);
+               }
+       }
+
+       return ret;
+}
+
 static int metricgroup__add_metric(const char *metric, bool metric_no_group,
                                   struct strbuf *events,
                                   struct list_head *group_list,
@@ -636,34 +669,11 @@ static int metricgroup__add_metric(const char *metric, bool metric_no_group,
        bool has_match = false;
 
        map_for_each_metric(pe, i, map, metric) {
-               pr_debug("metric expr %s for %s\n", pe->metric_expr, pe->metric_name);
                has_match = true;
 
-               if (!strstr(pe->metric_expr, "?")) {
-                       ret = __metricgroup__add_metric(group_list,
-                                                       pe,
-                                                       metric_no_group,
-                                                       1);
-                       if (ret)
-                               return ret;
-               } else {
-                       int j, count;
-
-                       count = arch_get_runtimeparam();
-
-                       /* This loop is added to create multiple
-                        * events depend on count value and add
-                        * those events to group_list.
-                        */
-
-                       for (j = 0; j < count; j++) {
-                               ret = __metricgroup__add_metric(
-                                       group_list, pe,
-                                       metric_no_group, j);
-                               if (ret)
-                                       return ret;
-                       }
-               }
+               ret = add_metric(group_list, pe, metric_no_group);
+               if (ret)
+                       return ret;
        }
 
        /* End of pmu events. */