From: John Garry <john.garry@huawei.com>
To: <acme@kernel.org>, <will@kernel.org>, <mark.rutland@arm.com>,
<jolsa@redhat.com>, <irogers@google.com>, <leo.yan@linaro.org>,
<peterz@infradead.org>, <mingo@redhat.com>,
<alexander.shishkin@linux.intel.com>, <namhyung@kernel.org>,
<mathieu.poirier@linaro.org>
Cc: <linuxarm@huawei.com>, <linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>, <qiangqing.zhang@nxp.com>,
<zhangshaokun@hisilicon.com>, <james.clark@arm.com>,
<linux-imx@nxp.com>, John Garry <john.garry@huawei.com>
Subject: [PATCH RFC v4 10/13] perf metricgroup: Split up metricgroup__print()
Date: Thu, 8 Oct 2020 18:15:18 +0800 [thread overview]
Message-ID: <1602152121-240367-11-git-send-email-john.garry@huawei.com> (raw)
In-Reply-To: <1602152121-240367-1-git-send-email-john.garry@huawei.com>
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.garry@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
next prev parent reply other threads:[~2020-10-08 10:19 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-08 10:15 [PATCH RFC v4 00/13] perf pmu-events: Support event aliasing for system PMUs John Garry
2020-10-08 10:15 ` [PATCH RFC v4 01/13] perf jevents: Add support for an extra directory level John Garry
2020-10-08 10:15 ` [PATCH RFC v4 02/13] perf jevents: Add support for system events tables John Garry
2020-10-08 10:15 ` [PATCH RFC v4 03/13] perf pmu: Add pmu_id() John Garry
2020-10-08 10:15 ` [PATCH RFC v4 04/13] perf pmu: Add pmu_add_sys_aliases() John Garry
2020-10-08 10:15 ` [PATCH RFC v4 05/13] perf vendor events arm64: Add Architected events smmuv3-pmcg.json John Garry
2020-10-08 10:15 ` [PATCH RFC v4 06/13] perf vendor events arm64: Add hip09 SMMUv3 PMCG events John Garry
2020-10-14 18:06 ` Robin Murphy
2020-10-15 7:47 ` John Garry
2020-10-08 10:15 ` [PATCH RFC v4 07/13] perf vendor events arm64: Add hip09 uncore events John Garry
2020-10-08 10:15 ` [PATCH RFC v4 08/13] perf metricgroup: Fix uncore metric expressions John Garry
2020-10-08 10:15 ` [PATCH RFC v4 09/13] perf metricgroup: Hack a fix for aliases when covering multiple PMUs John Garry
2020-10-18 8:50 ` [perf metricgroup] fcc9c5243c: perf-sanity-tests.Parse_and_process_metrics.fail kernel test robot
2020-10-18 23:30 ` Ian Rogers
2020-10-19 1:52 ` Andi Kleen
2020-10-19 8:02 ` Jin, Yao
2020-10-19 9:48 ` John Garry
2020-10-19 11:49 ` Jin, Yao
2020-10-19 16:20 ` Ian Rogers
2020-10-19 17:04 ` John Garry
2020-10-20 8:56 ` kajoljain
2020-10-20 16:53 ` Ian Rogers
2020-11-03 14:43 ` John Garry
2020-11-03 16:05 ` Ian Rogers
2020-11-03 16:54 ` John Garry
2020-11-04 4:58 ` kajoljain
2020-10-08 10:15 ` John Garry [this message]
2020-10-08 10:15 ` [PATCH RFC v4 11/13] perf metricgroup: Support printing metric groups for system PMUs John Garry
2020-10-08 10:15 ` [PATCH RFC v4 12/13] perf metricgroup: Support adding metrics " John Garry
2020-10-08 10:15 ` [PATCH RFC v4 13/13] perf vendor events: Add JSON metrics for imx8mm DDR Perf John Garry
2020-10-12 10:03 ` Joakim Zhang
2020-10-12 10:34 ` John Garry
2020-10-08 11:27 ` [PATCH RFC v4 00/13] perf pmu-events: Support event aliasing for system PMUs kajoljain
2020-10-08 11:49 ` John Garry
2020-10-14 11:16 ` Jiri Olsa
2020-10-14 17:41 ` John Garry
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1602152121-240367-11-git-send-email-john.garry@huawei.com \
--to=john.garry@huawei.com \
--cc=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=irogers@google.com \
--cc=james.clark@arm.com \
--cc=jolsa@redhat.com \
--cc=leo.yan@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-imx@nxp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=mark.rutland@arm.com \
--cc=mathieu.poirier@linaro.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=qiangqing.zhang@nxp.com \
--cc=will@kernel.org \
--cc=zhangshaokun@hisilicon.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).