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