Messages in this thread Patch in this message | | | From | Wei Li <> | Subject | [PATCH v2] perf metric: Code cleanup with map_for_each_event() | Date | Fri, 18 Sep 2020 09:29:48 +0800 |
| |
Since we have introduced map_for_each_event() to walk the 'pmu_events_map', clean up metricgroup__print() and metricgroup__has_metric() with it.
Signed-off-by: Wei Li <liwei391@huawei.com> Acked-by: Namhyung Kim <namhyung@kernel.org> --- v1 -> v2: - Move map_for_each_metric() after match_metric() to avoid potential use-before-declare. --- tools/perf/util/metricgroup.c | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-)
diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c index 8831b964288f..50ee36437b99 100644 --- a/tools/perf/util/metricgroup.c +++ b/tools/perf/util/metricgroup.c @@ -374,6 +374,17 @@ static bool match_metric(const char *n, const char *list) return false; } +#define map_for_each_event(__pe, __idx, __map) \ + for (__idx = 0, __pe = &__map->table[__idx]; \ + __pe->name || __pe->metric_group || __pe->metric_name; \ + __pe = &__map->table[++__idx]) + +#define map_for_each_metric(__pe, __idx, __map, __metric) \ + map_for_each_event(__pe, __idx, __map) \ + if (__pe->metric_expr && \ + (match_metric(__pe->metric_group, __metric) || \ + match_metric(__pe->metric_name, __metric))) + struct mep { struct rb_node nd; const char *name; @@ -475,12 +486,9 @@ void metricgroup__print(bool metrics, bool metricgroups, char *filter, groups.node_new = mep_new; groups.node_cmp = mep_cmp; groups.node_delete = mep_delete; - for (i = 0; ; i++) { + map_for_each_event(pe, i, map) { 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; @@ -745,17 +753,6 @@ static int __add_metric(struct list_head *metric_list, return 0; } -#define map_for_each_event(__pe, __idx, __map) \ - for (__idx = 0, __pe = &__map->table[__idx]; \ - __pe->name || __pe->metric_group || __pe->metric_name; \ - __pe = &__map->table[++__idx]) - -#define map_for_each_metric(__pe, __idx, __map, __metric) \ - map_for_each_event(__pe, __idx, __map) \ - if (__pe->metric_expr && \ - (match_metric(__pe->metric_group, __metric) || \ - match_metric(__pe->metric_name, __metric))) - static struct pmu_event *find_metric(const char *metric, struct pmu_events_map *map) { struct pmu_event *pe; @@ -1092,11 +1089,7 @@ bool metricgroup__has_metric(const char *metric) if (!map) return false; - for (i = 0; ; i++) { - pe = &map->table[i]; - - if (!pe->name && !pe->metric_group && !pe->metric_name) - break; + map_for_each_event(pe, i, map) { if (!pe->metric_expr) continue; if (match_metric(pe->metric_name, metric)) -- 2.17.1
| |