On Thu, May 07, 2020 at 07:57:48PM +0800, John Garry wrote: > To aid supporting system event metric groups, break up the function > metricgroup__add_metric() into a part which iterates metrics and a part > which actually "adds" the metric. > > No functional change intended.
this no longer applied on Arnaldo's perf/core, it's very busy part now :-\ jirka > > Signed-off-by: John Garry <john.ga...@huawei.com> > --- > tools/perf/util/metricgroup.c | 75 > ++++++++++++++++++++++++++----------------- > 1 file changed, 45 insertions(+), 30 deletions(-) > > diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c > index 926449a7cdbf..d1033756a1bc 100644 > --- a/tools/perf/util/metricgroup.c > +++ b/tools/perf/util/metricgroup.c > @@ -231,6 +231,12 @@ static bool match_metric(const char *n, const char *list) > return false; > } > > +static bool match_pe_metric(struct pmu_event *pe, const char *metric) > +{ > + return match_metric(pe->metric_group, metric) || > + match_metric(pe->metric_name, metric); > +} > + > struct mep { > struct rb_node nd; > const char *name; > @@ -485,6 +491,40 @@ static bool metricgroup__has_constraint(struct pmu_event > *pe) > return false; > } > > +static int metricgroup__add_metric_pmu_event(struct pmu_event *pe, > + struct strbuf *events, > + struct list_head *group_list) > +{ > + const char **ids; > + int idnum; > + struct egroup *eg; > + > + pr_debug("metric expr %s for %s\n", pe->metric_expr, pe->metric_name); > + > + if (expr__find_other(pe->metric_expr, NULL, &ids, &idnum) < 0) > + return 0; > + > + if (events->len > 0) > + strbuf_addf(events, ","); > + > + if (metricgroup__has_constraint(pe)) > + metricgroup__add_metric_non_group(events, ids, idnum); > + else > + metricgroup__add_metric_weak_group(events, ids, idnum); > + > + eg = malloc(sizeof(*eg)); > + if (!eg) > + return -ENOMEM; > + eg->ids = ids; > + eg->idnum = idnum; > + eg->metric_name = pe->metric_name; > + eg->metric_expr = pe->metric_expr; > + eg->metric_unit = pe->unit; > + list_add_tail(&eg->nd, group_list); > + > + return 0; > +} > + > static int metricgroup__add_metric(const char *metric, struct strbuf *events, > struct list_head *group_list) > { > @@ -502,37 +542,12 @@ static int metricgroup__add_metric(const char *metric, > struct strbuf *events, > break; > if (!pe->metric_expr) > continue; > - if (match_metric(pe->metric_group, metric) || > - match_metric(pe->metric_name, metric)) { > - const char **ids; > - int idnum; > - struct egroup *eg; > - > - pr_debug("metric expr %s for %s\n", pe->metric_expr, > pe->metric_name); > > - if (expr__find_other(pe->metric_expr, > - NULL, &ids, &idnum) < 0) > - continue; > - if (events->len > 0) > - strbuf_addf(events, ","); > - > - if (metricgroup__has_constraint(pe)) > - metricgroup__add_metric_non_group(events, ids, > idnum); > - else > - metricgroup__add_metric_weak_group(events, ids, > idnum); > - > - eg = malloc(sizeof(struct egroup)); > - if (!eg) { > - ret = -ENOMEM; > - break; > - } > - eg->ids = ids; > - eg->idnum = idnum; > - eg->metric_name = pe->metric_name; > - eg->metric_expr = pe->metric_expr; > - eg->metric_unit = pe->unit; > - list_add_tail(&eg->nd, group_list); > - ret = 0; > + if (match_pe_metric(pe, metric)) { > + ret = metricgroup__add_metric_pmu_event(pe, events, > + group_list); > + if (ret) > + return ret; > } > } > return ret; > -- > 2.16.4 >