Commit b81ef466 authored by Jiri Olsa's avatar Jiri Olsa Committed by Arnaldo Carvalho de Melo

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: default avatarJiri 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.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent f6fb0960
......@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment