diff options
Diffstat (limited to 'tools/perf/util/metricgroup.h')
-rw-r--r-- | tools/perf/util/metricgroup.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/tools/perf/util/metricgroup.h b/tools/perf/util/metricgroup.h new file mode 100644 index 000000000..ed1b9392e --- /dev/null +++ b/tools/perf/util/metricgroup.h @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: GPL-2.0-only +#ifndef METRICGROUP_H +#define METRICGROUP_H 1 + +#include <linux/list.h> +#include <linux/rbtree.h> +#include <stdbool.h> +#include "pmu-events/pmu-events.h" + +struct evlist; +struct evsel; +struct evlist; +struct option; +struct rblist; +struct pmu_events_map; +struct cgroup; + +struct metric_event { + struct rb_node nd; + struct evsel *evsel; + struct list_head head; /* list of metric_expr */ +}; + +struct metric_ref { + const char *metric_name; + const char *metric_expr; +}; + +struct metric_expr { + struct list_head nd; + const char *metric_expr; + const char *metric_name; + const char *metric_unit; + struct evsel **metric_events; + struct metric_ref *metric_refs; + int runtime; +}; + +struct metric_event *metricgroup__lookup(struct rblist *metric_events, + struct evsel *evsel, + bool create); +int metricgroup__parse_groups(const struct option *opt, + const char *str, + bool metric_no_group, + bool metric_no_merge, + struct rblist *metric_events); + +int metricgroup__parse_groups_test(struct evlist *evlist, + struct pmu_events_map *map, + const char *str, + bool metric_no_group, + bool metric_no_merge, + struct rblist *metric_events); + +void metricgroup__print(bool metrics, bool groups, char *filter, + bool raw, bool details); +bool metricgroup__has_metric(const char *metric); +int arch_get_runtimeparam(struct pmu_event *pe __maybe_unused); +void metricgroup__rblist_exit(struct rblist *metric_events); + +int metricgroup__copy_metric_events(struct evlist *evlist, struct cgroup *cgrp, + struct rblist *new_metric_events, + struct rblist *old_metric_events); +#endif |