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 10struct evlist; 11struct evsel; 12struct evlist; 13struct option; 14struct rblist; 15struct pmu_events_map; 16struct cgroup; 17 18struct metric_event { 19 struct rb_node nd; 20 struct evsel *evsel; 21 struct list_head head; /* list of metric_expr */ 22}; 23 24struct metric_ref { 25 const char *metric_name; 26 const char *metric_expr; 27}; 28 29struct 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 39struct metric_event *metricgroup__lookup(struct rblist *metric_events, 40 struct evsel *evsel, 41 bool create); 42int 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 48int 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 55void metricgroup__print(bool metrics, bool groups, char *filter, 56 bool raw, bool details); 57bool metricgroup__has_metric(const char *metric); 58int arch_get_runtimeparam(struct pmu_event *pe __maybe_unused); 59void metricgroup__rblist_exit(struct rblist *metric_events); 60 61int 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