1361c99a6SArnaldo Carvalho de Melo #ifndef __PERF_EVLIST_H 2361c99a6SArnaldo Carvalho de Melo #define __PERF_EVLIST_H 1 3361c99a6SArnaldo Carvalho de Melo 4361c99a6SArnaldo Carvalho de Melo #include <linux/list.h> 550d08e47SArnaldo Carvalho de Melo #include <stdio.h> 670db7533SArnaldo Carvalho de Melo #include "../perf.h" 704391debSArnaldo Carvalho de Melo #include "event.h" 850d08e47SArnaldo Carvalho de Melo #include "util.h" 935b9d88eSArnaldo Carvalho de Melo #include <unistd.h> 10361c99a6SArnaldo Carvalho de Melo 115c581041SArnaldo Carvalho de Melo struct pollfd; 12f8a95309SArnaldo Carvalho de Melo struct thread_map; 13f8a95309SArnaldo Carvalho de Melo struct cpu_map; 140f82ebc4SArnaldo Carvalho de Melo struct perf_record_opts; 155c581041SArnaldo Carvalho de Melo 1670db7533SArnaldo Carvalho de Melo #define PERF_EVLIST__HLIST_BITS 8 1770db7533SArnaldo Carvalho de Melo #define PERF_EVLIST__HLIST_SIZE (1 << PERF_EVLIST__HLIST_BITS) 1870db7533SArnaldo Carvalho de Melo 19361c99a6SArnaldo Carvalho de Melo struct perf_evlist { 20361c99a6SArnaldo Carvalho de Melo struct list_head entries; 2170db7533SArnaldo Carvalho de Melo struct hlist_head heads[PERF_EVLIST__HLIST_SIZE]; 22361c99a6SArnaldo Carvalho de Melo int nr_entries; 235c581041SArnaldo Carvalho de Melo int nr_fds; 24aece948fSArnaldo Carvalho de Melo int nr_mmaps; 2570db7533SArnaldo Carvalho de Melo int mmap_len; 2635b9d88eSArnaldo Carvalho de Melo struct { 2735b9d88eSArnaldo Carvalho de Melo int cork_fd; 2835b9d88eSArnaldo Carvalho de Melo pid_t pid; 2935b9d88eSArnaldo Carvalho de Melo } workload; 307bb41152SArnaldo Carvalho de Melo bool overwrite; 318115d60cSArnaldo Carvalho de Melo union perf_event event_copy; 3270db7533SArnaldo Carvalho de Melo struct perf_mmap *mmap; 335c581041SArnaldo Carvalho de Melo struct pollfd *pollfd; 347e2ed097SArnaldo Carvalho de Melo struct thread_map *threads; 357e2ed097SArnaldo Carvalho de Melo struct cpu_map *cpus; 3681cce8deSArnaldo Carvalho de Melo struct perf_evsel *selected; 37361c99a6SArnaldo Carvalho de Melo }; 38361c99a6SArnaldo Carvalho de Melo 39ee29be62SArnaldo Carvalho de Melo struct perf_evsel_str_handler { 40ee29be62SArnaldo Carvalho de Melo const char *name; 41ee29be62SArnaldo Carvalho de Melo void *handler; 42ee29be62SArnaldo Carvalho de Melo }; 43ee29be62SArnaldo Carvalho de Melo 44361c99a6SArnaldo Carvalho de Melo struct perf_evsel; 45361c99a6SArnaldo Carvalho de Melo 467e2ed097SArnaldo Carvalho de Melo struct perf_evlist *perf_evlist__new(struct cpu_map *cpus, 477e2ed097SArnaldo Carvalho de Melo struct thread_map *threads); 487e2ed097SArnaldo Carvalho de Melo void perf_evlist__init(struct perf_evlist *evlist, struct cpu_map *cpus, 497e2ed097SArnaldo Carvalho de Melo struct thread_map *threads); 50ef1d1af2SArnaldo Carvalho de Melo void perf_evlist__exit(struct perf_evlist *evlist); 51361c99a6SArnaldo Carvalho de Melo void perf_evlist__delete(struct perf_evlist *evlist); 52361c99a6SArnaldo Carvalho de Melo 53361c99a6SArnaldo Carvalho de Melo void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry); 54361c99a6SArnaldo Carvalho de Melo int perf_evlist__add_default(struct perf_evlist *evlist); 5550d08e47SArnaldo Carvalho de Melo int perf_evlist__add_attrs(struct perf_evlist *evlist, 5650d08e47SArnaldo Carvalho de Melo struct perf_event_attr *attrs, size_t nr_attrs); 5779695e1bSArnaldo Carvalho de Melo int __perf_evlist__add_default_attrs(struct perf_evlist *evlist, 5879695e1bSArnaldo Carvalho de Melo struct perf_event_attr *attrs, size_t nr_attrs); 59a8c9ae18SArnaldo Carvalho de Melo int perf_evlist__add_tracepoints(struct perf_evlist *evlist, 60a8c9ae18SArnaldo Carvalho de Melo const char *tracepoints[], size_t nr_tracepoints); 61ee29be62SArnaldo Carvalho de Melo int perf_evlist__set_tracepoints_handlers(struct perf_evlist *evlist, 62ee29be62SArnaldo Carvalho de Melo const struct perf_evsel_str_handler *assocs, 63ee29be62SArnaldo Carvalho de Melo size_t nr_assocs); 6450d08e47SArnaldo Carvalho de Melo 6550d08e47SArnaldo Carvalho de Melo #define perf_evlist__add_attrs_array(evlist, array) \ 6650d08e47SArnaldo Carvalho de Melo perf_evlist__add_attrs(evlist, array, ARRAY_SIZE(array)) 6779695e1bSArnaldo Carvalho de Melo #define perf_evlist__add_default_attrs(evlist, array) \ 6879695e1bSArnaldo Carvalho de Melo __perf_evlist__add_default_attrs(evlist, array, ARRAY_SIZE(array)) 69361c99a6SArnaldo Carvalho de Melo 70a8c9ae18SArnaldo Carvalho de Melo #define perf_evlist__add_tracepoints_array(evlist, array) \ 71a8c9ae18SArnaldo Carvalho de Melo perf_evlist__add_tracepoints(evlist, array, ARRAY_SIZE(array)) 72a8c9ae18SArnaldo Carvalho de Melo 73ee29be62SArnaldo Carvalho de Melo #define perf_evlist__set_tracepoints_handlers_array(evlist, array) \ 74ee29be62SArnaldo Carvalho de Melo perf_evlist__set_tracepoints_handlers(evlist, array, ARRAY_SIZE(array)) 75ee29be62SArnaldo Carvalho de Melo 76a91e5431SArnaldo Carvalho de Melo void perf_evlist__id_add(struct perf_evlist *evlist, struct perf_evsel *evsel, 773d3b5e95SArnaldo Carvalho de Melo int cpu, int thread, u64 id); 783d3b5e95SArnaldo Carvalho de Melo 7970082dd9SArnaldo Carvalho de Melo void perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd); 805c581041SArnaldo Carvalho de Melo 8170db7533SArnaldo Carvalho de Melo struct perf_evsel *perf_evlist__id2evsel(struct perf_evlist *evlist, u64 id); 8270db7533SArnaldo Carvalho de Melo 83aece948fSArnaldo Carvalho de Melo union perf_event *perf_evlist__mmap_read(struct perf_evlist *self, int idx); 8404391debSArnaldo Carvalho de Melo 85727ab04eSArnaldo Carvalho de Melo int perf_evlist__open(struct perf_evlist *evlist, bool group); 86727ab04eSArnaldo Carvalho de Melo 870f82ebc4SArnaldo Carvalho de Melo void perf_evlist__config_attrs(struct perf_evlist *evlist, 880f82ebc4SArnaldo Carvalho de Melo struct perf_record_opts *opts); 890f82ebc4SArnaldo Carvalho de Melo 9035b9d88eSArnaldo Carvalho de Melo int perf_evlist__prepare_workload(struct perf_evlist *evlist, 9135b9d88eSArnaldo Carvalho de Melo struct perf_record_opts *opts, 9235b9d88eSArnaldo Carvalho de Melo const char *argv[]); 9335b9d88eSArnaldo Carvalho de Melo int perf_evlist__start_workload(struct perf_evlist *evlist); 9435b9d88eSArnaldo Carvalho de Melo 9550a682ceSArnaldo Carvalho de Melo int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages, 9650a682ceSArnaldo Carvalho de Melo bool overwrite); 977e2ed097SArnaldo Carvalho de Melo void perf_evlist__munmap(struct perf_evlist *evlist); 987e2ed097SArnaldo Carvalho de Melo 994152ab37SArnaldo Carvalho de Melo void perf_evlist__disable(struct perf_evlist *evlist); 100764e16a3SDavid Ahern void perf_evlist__enable(struct perf_evlist *evlist); 1014152ab37SArnaldo Carvalho de Melo 10281cce8deSArnaldo Carvalho de Melo void perf_evlist__set_selected(struct perf_evlist *evlist, 10381cce8deSArnaldo Carvalho de Melo struct perf_evsel *evsel); 10481cce8deSArnaldo Carvalho de Melo 1057e2ed097SArnaldo Carvalho de Melo static inline void perf_evlist__set_maps(struct perf_evlist *evlist, 1067e2ed097SArnaldo Carvalho de Melo struct cpu_map *cpus, 1077e2ed097SArnaldo Carvalho de Melo struct thread_map *threads) 1087e2ed097SArnaldo Carvalho de Melo { 1097e2ed097SArnaldo Carvalho de Melo evlist->cpus = cpus; 1107e2ed097SArnaldo Carvalho de Melo evlist->threads = threads; 1117e2ed097SArnaldo Carvalho de Melo } 1127e2ed097SArnaldo Carvalho de Melo 113b809ac10SNamhyung Kim int perf_evlist__create_maps(struct perf_evlist *evlist, 114b809ac10SNamhyung Kim struct perf_target *target); 1157e2ed097SArnaldo Carvalho de Melo void perf_evlist__delete_maps(struct perf_evlist *evlist); 1160a102479SFrederic Weisbecker int perf_evlist__set_filters(struct perf_evlist *evlist); 117f8a95309SArnaldo Carvalho de Melo 118c2a70653SArnaldo Carvalho de Melo u64 perf_evlist__sample_type(const struct perf_evlist *evlist); 119c2a70653SArnaldo Carvalho de Melo bool perf_evlist__sample_id_all(const const struct perf_evlist *evlist); 12081e36bffSArnaldo Carvalho de Melo u16 perf_evlist__id_hdr_size(const struct perf_evlist *evlist); 12174429964SFrederic Weisbecker 122c2a70653SArnaldo Carvalho de Melo bool perf_evlist__valid_sample_type(const struct perf_evlist *evlist); 123c2a70653SArnaldo Carvalho de Melo bool perf_evlist__valid_sample_id_all(const struct perf_evlist *evlist); 1240529bc1fSJiri Olsa 1250529bc1fSJiri Olsa void perf_evlist__splice_list_tail(struct perf_evlist *evlist, 1260529bc1fSJiri Olsa struct list_head *list, 1270529bc1fSJiri Olsa int nr_entries); 1280529bc1fSJiri Olsa 129361c99a6SArnaldo Carvalho de Melo #endif /* __PERF_EVLIST_H */ 130