Use a bitmap rather than an array of bools.

Signed-off-by: Ian Rogers <irog...@google.com>
---
 tools/perf/util/metricgroup.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
index 37be5a368d6e..4f7e36bc49d9 100644
--- a/tools/perf/util/metricgroup.c
+++ b/tools/perf/util/metricgroup.c
@@ -95,7 +95,7 @@ struct egroup {
 static struct evsel *find_evsel_group(struct evlist *perf_evlist,
                                      struct expr_parse_ctx *pctx,
                                      struct evsel **metric_events,
-                                     bool *evlist_used)
+                                     unsigned long *evlist_used)
 {
        struct evsel *ev;
        bool leader_found;
@@ -105,7 +105,7 @@ static struct evsel *find_evsel_group(struct evlist 
*perf_evlist,
        double *val_ptr;
 
        evlist__for_each_entry (perf_evlist, ev) {
-               if (evlist_used[j++])
+               if (test_bit(j++, evlist_used))
                        continue;
                if (hashmap__find(&pctx->ids, ev->name, (void **)&val_ptr)) {
                        if (!metric_events[i])
@@ -150,7 +150,7 @@ static struct evsel *find_evsel_group(struct evlist 
*perf_evlist,
                        j++;
                }
                ev = metric_events[i];
-               evlist_used[ev->idx] = true;
+               set_bit(ev->idx, evlist_used);
        }
 
        return metric_events[0];
@@ -166,13 +166,11 @@ static int metricgroup__setup_events(struct list_head 
*groups,
        int ret = 0;
        struct egroup *eg;
        struct evsel *evsel;
-       bool *evlist_used;
+       unsigned long *evlist_used;
 
-       evlist_used = calloc(perf_evlist->core.nr_entries, sizeof(bool));
-       if (!evlist_used) {
-               ret = -ENOMEM;
-               return ret;
-       }
+       evlist_used = bitmap_alloc(perf_evlist->core.nr_entries);
+       if (!evlist_used)
+               return -ENOMEM;
 
        list_for_each_entry (eg, groups, nd) {
                struct evsel **metric_events;
@@ -210,7 +208,7 @@ static int metricgroup__setup_events(struct list_head 
*groups,
                list_add(&expr->nd, &me->head);
        }
 
-       free(evlist_used);
+       bitmap_free(evlist_used);
 
        return ret;
 }
-- 
2.26.2.645.ge9eca65c58-goog

Reply via email to