]> Git Repo - linux.git/blob - tools/perf/util/metricgroup.h
driver core: Return proper error code when dev_set_name() fails
[linux.git] / tools / perf / util / metricgroup.h
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 option;
13 struct print_callbacks;
14 struct rblist;
15 struct cgroup;
16
17 /**
18  * A node in a rblist keyed by the evsel. The global rblist of metric events
19  * generally exists in perf_stat_config. The evsel is looked up in the rblist
20  * yielding a list of metric_expr.
21  */
22 struct metric_event {
23         struct rb_node nd;
24         struct evsel *evsel;
25         bool is_default; /* the metric evsel from the Default metricgroup */
26         struct list_head head; /* list of metric_expr */
27 };
28
29 /**
30  * A metric referenced by a metric_expr. When parsing a metric expression IDs
31  * will be looked up, matching either a value (from metric_events) or a
32  * metric_ref. A metric_ref will then be parsed recursively. The metric_refs and
33  * metric_events need to be known before parsing so that their values may be
34  * placed in the parse context for lookup.
35  */
36 struct metric_ref {
37         const char *metric_name;
38         const char *metric_expr;
39 };
40
41 /**
42  * One in a list of metric_expr associated with an evsel. The data is used to
43  * generate a metric value during stat output.
44  */
45 struct metric_expr {
46         struct list_head nd;
47         /** The expression to parse, for example, "instructions/cycles". */
48         const char *metric_expr;
49         /** The name of the meric such as "IPC". */
50         const char *metric_name;
51         const char *metric_threshold;
52         /**
53          * The "ScaleUnit" that scales and adds a unit to the metric during
54          * output. For example, "6.4e-05MiB" means to scale the resulting metric
55          * by 6.4e-05 (typically converting a unit like cache lines to something
56          * more human intelligible) and then add "MiB" afterward when displayed.
57          */
58         const char *metric_unit;
59         /** Displayed metricgroup name of the Default metricgroup */
60         const char *default_metricgroup_name;
61         /** Null terminated array of events used by the metric. */
62         struct evsel **metric_events;
63         /** Null terminated array of referenced metrics. */
64         struct metric_ref *metric_refs;
65         /** A value substituted for '?' during parsing. */
66         int runtime;
67 };
68
69 struct metric_event *metricgroup__lookup(struct rblist *metric_events,
70                                          struct evsel *evsel,
71                                          bool create);
72 int metricgroup__parse_groups(struct evlist *perf_evlist,
73                               const char *pmu,
74                               const char *str,
75                               bool metric_no_group,
76                               bool metric_no_merge,
77                               bool metric_no_threshold,
78                               const char *user_requested_cpu_list,
79                               bool system_wide,
80                               struct rblist *metric_events);
81 int metricgroup__parse_groups_test(struct evlist *evlist,
82                                    const struct pmu_metrics_table *table,
83                                    const char *str,
84                                    struct rblist *metric_events);
85
86 void metricgroup__print(const struct print_callbacks *print_cb, void *print_state);
87 bool metricgroup__has_metric(const char *pmu, const char *metric);
88 unsigned int metricgroups__topdown_max_level(void);
89 int arch_get_runtimeparam(const struct pmu_metric *pm);
90 void metricgroup__rblist_exit(struct rblist *metric_events);
91
92 int metricgroup__copy_metric_events(struct evlist *evlist, struct cgroup *cgrp,
93                                     struct rblist *new_metric_events,
94                                     struct rblist *old_metric_events);
95 #endif
This page took 0.0361 seconds and 4 git commands to generate.