Re: [RFC 00/14] perf tests: Check on subtest for user specified test

From: Arnaldo Carvalho de Melo
Date: Mon May 25 2020 - 10:23:07 EST


Em Mon, May 25, 2020 at 12:42:05AM +0200, Jiri Olsa escreveu:
> hi,
> changes for using metric result in another metric seem
> to change lot of core metric code, so it's better we
> have some more tests before we do that.
>
> Sending as RFC as it's still alive and you guys might
> have some other idea of how to do this.
>
> Also available in here:
> git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
> perf/fixes

I applied the first three patches, will wait a bit for Ian and others to
have some time to look at it, but one thing I thought was that instead
of having parse_state->fake_pmu as a bool, you could have it as a
pointer to the fake pmu, this way we would do away with that static
thing in the middle of the parsing code.

+static int check_id(const char *id)
+{
+ struct parse_events_error error;
+ struct evlist *evlist;
+ int ret;
+
+ /* Numbers are always valid. */
+ if (is_number(id))
+ return 0;
+
+ evlist = evlist__new();
+ if (!evlist)
+ return -1;
+
+ memset(&error, 0, sizeof(error));
+ ret = parse_events_fake(evlist, id, &error);
+ if (ret) {
+ pr_debug("str : %s\n", error.str);
+ pr_debug("help : %s\n", error.help);
+ pr_debug("first_str : %s\n", error.first_str);
+ pr_debug("first_help : %s\n", error.first_help);
+ }
+
+ evlist__delete(evlist);
+ free(error.str);
+ free(error.help);
+ free(error.first_str);
+ free(error.first_help);
+ return ret;
+}


Would read:

struct perf_pmu fake = { 0, };
.
.
.
ret = parse_events_fake_pmu(evlist, id, &fake, &error);
.
.
.


That also renames parse_events_fake() to parse_events_fake_pmu().

> jirka
>
>
> ---
> Jiri Olsa (14):
> perf tests: Check on subtest for user specified test
> perf tools: Do not pass avg to generic_metric
> perf tools: Add struct parse_events_state pointer to scanner
> perf tools: Add fake pmu support
> perf tools: Add parse_events_fake interface
> perf tests: Add another pmu-events tests
> perf tools: Factor out parse_groups function
> perf tools: Add metricgroup__parse_groups_test function
> perf tools: Add fake_pmu to parse_events function
> perf tools: Add map to parse_events function
> perf tools: Factor out prepare_metric function
> perf tools: Add test_generic_metric function
> perf tests: Add parse metric test for ipc metric
> perf tests: Add parse metric test for frontend metric
>
> tools/perf/tests/Build | 1 +
> tools/perf/tests/builtin-test.c | 38 ++++++++++++++++++++++------
> tools/perf/tests/parse-metric.c | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> tools/perf/tests/pmu-events.c | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> tools/perf/tests/tests.h | 1 +
> tools/perf/util/metricgroup.c | 53 ++++++++++++++++++++++++++++++---------
> tools/perf/util/metricgroup.h | 9 +++++++
> tools/perf/util/parse-events.c | 73 ++++++++++++++++++++++++++++++++++++++---------------
> tools/perf/util/parse-events.h | 6 ++++-
> tools/perf/util/parse-events.l | 16 +++++++-----
> tools/perf/util/parse-events.y | 37 +++++++++++++++++++++++++--
> tools/perf/util/stat-shadow.c | 77 ++++++++++++++++++++++++++++++++++++--------------------
> tools/perf/util/stat.h | 3 +++
> 13 files changed, 521 insertions(+), 76 deletions(-)
> create mode 100644 tools/perf/tests/parse-metric.c
>

--

- Arnaldo