mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-25 11:32:24 +00:00
perf stat: Move metric list from config to evlist
The rblist of metric_event that then have a list of associated metric_expr is moved out of the stat_config and into the evlist. This is done as part of refactoring things for python, having the state split in two places complicates that implementation. The evlist is doing the harder work of enabling and disabling events, the metrics are needed to compute a value and it doesn't seem unreasonable to hang them from the evlist. Signed-off-by: Ian Rogers <irogers@google.com> Link: https://lore.kernel.org/r/20250710235126.1086011-7-irogers@google.com Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
#include <linux/zalloc.h>
|
||||
#include "iostat.h"
|
||||
#include "util/hashmap.h"
|
||||
#include "rblist.h"
|
||||
#include "tool_pmu.h"
|
||||
|
||||
struct stats walltime_nsecs_stats;
|
||||
@@ -635,14 +636,14 @@ void *perf_stat__print_shadow_stats_metricgroup(struct perf_stat_config *config,
|
||||
int aggr_idx,
|
||||
int *num,
|
||||
void *from,
|
||||
struct perf_stat_output_ctx *out,
|
||||
struct rblist *metric_events)
|
||||
struct perf_stat_output_ctx *out)
|
||||
{
|
||||
struct metric_event *me;
|
||||
struct metric_expr *mexp = from;
|
||||
void *ctxp = out->ctx;
|
||||
bool header_printed = false;
|
||||
const char *name = NULL;
|
||||
struct rblist *metric_events = &evsel->evlist->metric_events;
|
||||
|
||||
me = metricgroup__lookup(metric_events, evsel, false);
|
||||
if (me == NULL)
|
||||
@@ -683,8 +684,7 @@ void *perf_stat__print_shadow_stats_metricgroup(struct perf_stat_config *config,
|
||||
void perf_stat__print_shadow_stats(struct perf_stat_config *config,
|
||||
struct evsel *evsel,
|
||||
double avg, int aggr_idx,
|
||||
struct perf_stat_output_ctx *out,
|
||||
struct rblist *metric_events)
|
||||
struct perf_stat_output_ctx *out)
|
||||
{
|
||||
typedef void (*stat_print_function_t)(struct perf_stat_config *config,
|
||||
const struct evsel *evsel,
|
||||
@@ -735,7 +735,7 @@ void perf_stat__print_shadow_stats(struct perf_stat_config *config,
|
||||
}
|
||||
|
||||
perf_stat__print_shadow_stats_metricgroup(config, evsel, aggr_idx,
|
||||
&num, NULL, out, metric_events);
|
||||
&num, NULL, out);
|
||||
|
||||
if (num == 0) {
|
||||
print_metric(config, ctxp, METRIC_THRESHOLD_UNKNOWN,
|
||||
@@ -748,7 +748,6 @@ void perf_stat__print_shadow_stats(struct perf_stat_config *config,
|
||||
* if it's not running or not the metric event.
|
||||
*/
|
||||
bool perf_stat__skip_metric_event(struct evsel *evsel,
|
||||
struct rblist *metric_events,
|
||||
u64 ena, u64 run)
|
||||
{
|
||||
if (!evsel->default_metricgroup)
|
||||
@@ -757,5 +756,5 @@ bool perf_stat__skip_metric_event(struct evsel *evsel,
|
||||
if (!ena || !run)
|
||||
return true;
|
||||
|
||||
return !metricgroup__lookup(metric_events, evsel, false);
|
||||
return !metricgroup__lookup(&evsel->evlist->metric_events, evsel, false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user