tools/perf/util/metricgroup.h
Source file repositories/reference/linux-study-clean/tools/perf/util/metricgroup.h
File Facts
- System
- Linux kernel
- Corpus path
tools/perf/util/metricgroup.h- Extension
.h- Size
- 3324 bytes
- Lines
- 97
- Domain
- Support Tooling And Documentation
- Bucket
- tools
- Inferred role
- Support Tooling And Documentation: implementation source
- Status
- source implementation candidate
Why This File Exists
Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/list.hlinux/rbtree.hstdbool.hpmu-events/pmu-events.h
Detected Declarations
struct evliststruct evselstruct optionstruct print_callbacksstruct rbliststruct cgroupstruct metric_eventstruct metric_refstruct metric_expr
Annotated Snippet
struct metric_event {
struct rb_node nd;
struct evsel *evsel;
bool is_default; /* the metric evsel from the Default metricgroup */
struct list_head head; /* list of metric_expr */
};
/**
* A metric referenced by a metric_expr. When parsing a metric expression IDs
* will be looked up, matching either a value (from metric_events) or a
* metric_ref. A metric_ref will then be parsed recursively. The metric_refs and
* metric_events need to be known before parsing so that their values may be
* placed in the parse context for lookup.
*/
struct metric_ref {
const char *metric_name;
const char *metric_expr;
};
/**
* One in a list of metric_expr associated with an evsel. The data is used to
* generate a metric value during stat output.
*/
struct metric_expr {
struct list_head nd;
/** The expression to parse, for example, "instructions/cycles". */
const char *metric_expr;
/** The name of the meric such as "IPC". */
const char *metric_name;
const char *metric_threshold;
/**
* The "ScaleUnit" that scales and adds a unit to the metric during
* output. For example, "6.4e-05MiB" means to scale the resulting metric
* by 6.4e-05 (typically converting a unit like cache lines to something
* more human intelligible) and then add "MiB" afterward when displayed.
*/
const char *metric_unit;
/** Displayed metricgroup name of the Default metricgroup */
const char *default_metricgroup_name;
/** Null terminated array of events used by the metric. */
struct evsel **metric_events;
/** Null terminated array of referenced metrics. */
struct metric_ref *metric_refs;
/** A value substituted for '?' during parsing. */
int runtime;
};
struct metric_event *metricgroup__lookup(struct rblist *metric_events,
struct evsel *evsel,
bool create);
int metricgroup__parse_groups(struct evlist *perf_evlist,
const char *pmu,
const char *str,
bool metric_no_group,
bool metric_no_merge,
bool metric_no_threshold,
const char *user_requested_cpu_list,
bool system_wide,
bool hardware_aware_grouping);
int metricgroup__parse_groups_test(struct evlist *evlist,
const struct pmu_metrics_table *table,
const char *str);
int metricgroup__for_each_metric(const struct pmu_metrics_table *table, pmu_metric_iter_fn fn,
void *data);
bool metricgroup__has_metric_or_groups(const char *pmu, const char *metric_or_groups);
unsigned int metricgroups__topdown_max_level(void);
int arch_get_runtimeparam(const struct pmu_metric *pm);
void metricgroup__rblist_init(struct rblist *metric_events);
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
Annotation
- Immediate include surface: `linux/list.h`, `linux/rbtree.h`, `stdbool.h`, `pmu-events/pmu-events.h`.
- Detected declarations: `struct evlist`, `struct evsel`, `struct option`, `struct print_callbacks`, `struct rblist`, `struct cgroup`, `struct metric_event`, `struct metric_ref`, `struct metric_expr`.
- Atlas domain: Support Tooling And Documentation / tools.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.