1 // SPDX-License-Identifier: GPL-2.0-only 2 #ifndef METRICGROUP_H 3 #define METRICGROUP_H 1 4 5 #include <linux/list.h> 6 #include <linux/rbtree.h> 7 #include <stdbool.h> 8 #include "pmu-events/pmu-events.h" 9 10 struct evlist; 11 struct evsel; 12 struct evlist; 13 struct option; 14 struct rblist; 15 struct pmu_events_map; 16 struct cgroup; 17 18 struct metric_event { 19 struct rb_node nd; 20 struct evsel *evsel; 21 struct list_head head; /* list of metric_expr */ 22 }; 23 24 struct metric_ref { 25 const char *metric_name; 26 const char *metric_expr; 27 }; 28 29 struct metric_expr { 30 struct list_head nd; 31 const char *metric_expr; 32 const char *metric_name; 33 const char *metric_unit; 34 struct evsel **metric_events; 35 struct metric_ref *metric_refs; 36 int runtime; 37 }; 38 39 struct metric_event *metricgroup__lookup(struct rblist *metric_events, 40 struct evsel *evsel, 41 bool create); 42 int metricgroup__parse_groups(const struct option *opt, 43 const char *str, 44 bool metric_no_group, 45 bool metric_no_merge, 46 struct rblist *metric_events); 47 48 int metricgroup__parse_groups_test(struct evlist *evlist, 49 struct pmu_events_map *map, 50 const char *str, 51 bool metric_no_group, 52 bool metric_no_merge, 53 struct rblist *metric_events); 54 55 void metricgroup__print(bool metrics, bool groups, char *filter, 56 bool raw, bool details); 57 bool metricgroup__has_metric(const char *metric); 58 int arch_get_runtimeparam(struct pmu_event *pe __maybe_unused); 59 void metricgroup__rblist_exit(struct rblist *metric_events); 60 61 int metricgroup__copy_metric_events(struct evlist *evlist, struct cgroup *cgrp, 62 struct rblist *new_metric_events, 63 struct rblist *old_metric_events); 64 #endif 65