summaryrefslogtreecommitdiff
path: root/tools/perf/tests/parse-metric.c
diff options
context:
space:
mode:
authorJiri Olsa <jolsa@kernel.org>2020-07-19 21:13:17 +0300
committerArnaldo Carvalho de Melo <acme@redhat.com>2020-07-30 13:01:50 +0300
commitb81ef466ace6bf9bfd7e63a4c2bc89721ee0d495 (patch)
tree5cefaa570215eee898c4bdbc3159af1afd46ff90 /tools/perf/tests/parse-metric.c
parentf6fb0960f920e3040088992f32bbceded7a74322 (diff)
downloadlinux-b81ef466ace6bf9bfd7e63a4c2bc89721ee0d495.tar.xz
perf metric: Make compute_single function more precise
So far compute_single function relies on the fact, that there's only single metric defined within evlist in all tests. In following patch we will add test for metric group, so we need to be able to compute metric by given name. Adding the name argument to compute_single and iterating evlist and evsel's expression to find the given metric. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Ian Rogers <irogers@google.com> Cc: John Garry <john.garry@huawei.com> Cc: Kajol Jain <kjain@linux.ibm.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-17-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/tests/parse-metric.c')
-rw-r--r--tools/perf/tests/parse-metric.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/tools/perf/tests/parse-metric.c b/tools/perf/tests/parse-metric.c
index d7cc3bf64854..ea09628b9377 100644
--- a/tools/perf/tests/parse-metric.c
+++ b/tools/perf/tests/parse-metric.c
@@ -108,17 +108,21 @@ static void load_runtime_stat(struct runtime_stat *st, struct evlist *evlist,
}
static double compute_single(struct rblist *metric_events, struct evlist *evlist,
- struct runtime_stat *st)
+ struct runtime_stat *st, const char *name)
{
- struct evsel *evsel = evlist__first(evlist);
+ struct metric_expr *mexp;
struct metric_event *me;
+ struct evsel *evsel;
- me = metricgroup__lookup(metric_events, evsel, false);
- if (me != NULL) {
- struct metric_expr *mexp;
-
- mexp = list_first_entry(&me->head, struct metric_expr, nd);
- return test_generic_metric(mexp, 0, st);
+ evlist__for_each_entry(evlist, evsel) {
+ me = metricgroup__lookup(metric_events, evsel, false);
+ if (me != NULL) {
+ list_for_each_entry (mexp, &me->head, nd) {
+ if (strcmp(mexp->metric_name, name))
+ continue;
+ return test_generic_metric(mexp, 0, st);
+ }
+ }
}
return 0.;
}
@@ -162,7 +166,7 @@ static int compute_metric(const char *name, struct value *vals, double *ratio)
load_runtime_stat(&st, evlist, vals);
/* And execute the metric */
- *ratio = compute_single(&metric_events, evlist, &st);
+ *ratio = compute_single(&metric_events, evlist, &st, name);
/* ... clenup. */
metricgroup__rblist_exit(&metric_events);