1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2d809560bSJiri Olsa #ifndef __PERF_COUNTS_H
3d809560bSJiri Olsa #define __PERF_COUNTS_H
4d809560bSJiri Olsa
52d64ae9bSArnaldo Carvalho de Melo #include <linux/types.h>
64b247fa7SJiri Olsa #include <internal/xyarray.h>
75c30af92SJiri Olsa #include <perf/evsel.h>
82d64ae9bSArnaldo Carvalho de Melo #include <stdbool.h>
92d64ae9bSArnaldo Carvalho de Melo
102d64ae9bSArnaldo Carvalho de Melo struct evsel;
11d809560bSJiri Olsa
12d809560bSJiri Olsa struct perf_counts {
13d809560bSJiri Olsa s8 scaled;
14d809560bSJiri Olsa struct xyarray *values;
15df1d6856SJiri Olsa struct xyarray *loaded;
16d809560bSJiri Olsa };
17d809560bSJiri Olsa
18d809560bSJiri Olsa
19d809560bSJiri Olsa static inline struct perf_counts_values*
perf_counts(struct perf_counts * counts,int cpu_map_idx,int thread)20*7316268fSIan Rogers perf_counts(struct perf_counts *counts, int cpu_map_idx, int thread)
21d809560bSJiri Olsa {
22*7316268fSIan Rogers return xyarray__entry(counts->values, cpu_map_idx, thread);
23d809560bSJiri Olsa }
24d809560bSJiri Olsa
25df1d6856SJiri Olsa static inline bool
perf_counts__is_loaded(struct perf_counts * counts,int cpu_map_idx,int thread)26*7316268fSIan Rogers perf_counts__is_loaded(struct perf_counts *counts, int cpu_map_idx, int thread)
27df1d6856SJiri Olsa {
28*7316268fSIan Rogers return *((bool *) xyarray__entry(counts->loaded, cpu_map_idx, thread));
29df1d6856SJiri Olsa }
30df1d6856SJiri Olsa
31df1d6856SJiri Olsa static inline void
perf_counts__set_loaded(struct perf_counts * counts,int cpu_map_idx,int thread,bool loaded)32*7316268fSIan Rogers perf_counts__set_loaded(struct perf_counts *counts, int cpu_map_idx, int thread, bool loaded)
33df1d6856SJiri Olsa {
34*7316268fSIan Rogers *((bool *) xyarray__entry(counts->loaded, cpu_map_idx, thread)) = loaded;
35df1d6856SJiri Olsa }
36df1d6856SJiri Olsa
37d809560bSJiri Olsa struct perf_counts *perf_counts__new(int ncpus, int nthreads);
38d809560bSJiri Olsa void perf_counts__delete(struct perf_counts *counts);
39cf4d9bd6SJin Yao void perf_counts__reset(struct perf_counts *counts);
40d809560bSJiri Olsa
417d1e239eSArnaldo Carvalho de Melo void evsel__reset_counts(struct evsel *evsel);
422ca0a371SIan Rogers int evsel__alloc_counts(struct evsel *evsel);
437d1e239eSArnaldo Carvalho de Melo void evsel__free_counts(struct evsel *evsel);
44d809560bSJiri Olsa
45d809560bSJiri Olsa #endif /* __PERF_COUNTS_H */
46