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); 57a8c9ae18SArnaldo Carvalho de Melo int perf_evlist__add_tracepoints(struct perf_evlist *evlist, 58a8c9ae18SArnaldo Carvalho de Melo const char *tracepoints[], size_t nr_tracepoints); 59ee29be62SArnaldo Carvalho de Melo int perf_evlist__set_tracepoints_handlers(struct perf_evlist *evlist, 60ee29be62SArnaldo Carvalho de Melo const struct perf_evsel_str_handler *assocs, 61ee29be62SArnaldo Carvalho de Melo size_t nr_assocs); 6250d08e47SArnaldo Carvalho de Melo 6350d08e47SArnaldo Carvalho de Melo #define perf_evlist__add_attrs_array(evlist, array) \ 6450d08e47SArnaldo Carvalho de Melo perf_evlist__add_attrs(evlist, array, ARRAY_SIZE(array)) 65361c99a6SArnaldo Carvalho de Melo 66a8c9ae18SArnaldo Carvalho de Melo #define perf_evlist__add_tracepoints_array(evlist, array) \ 67a8c9ae18SArnaldo Carvalho de Melo perf_evlist__add_tracepoints(evlist, array, ARRAY_SIZE(array)) 68a8c9ae18SArnaldo Carvalho de Melo 69ee29be62SArnaldo Carvalho de Melo #define perf_evlist__set_tracepoints_handlers_array(evlist, array) \ 70ee29be62SArnaldo Carvalho de Melo perf_evlist__set_tracepoints_handlers(evlist, array, ARRAY_SIZE(array)) 71ee29be62SArnaldo Carvalho de Melo 72a91e5431SArnaldo Carvalho de Melo void perf_evlist__id_add(struct perf_evlist *evlist, struct perf_evsel *evsel, 733d3b5e95SArnaldo Carvalho de Melo int cpu, int thread, u64 id); 743d3b5e95SArnaldo Carvalho de Melo 7570082dd9SArnaldo Carvalho de Melo void perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd); 765c581041SArnaldo Carvalho de Melo 7770db7533SArnaldo Carvalho de Melo struct perf_evsel *perf_evlist__id2evsel(struct perf_evlist *evlist, u64 id); 7870db7533SArnaldo Carvalho de Melo 79aece948fSArnaldo Carvalho de Melo union perf_event *perf_evlist__mmap_read(struct perf_evlist *self, int idx); 8004391debSArnaldo Carvalho de Melo 81727ab04eSArnaldo Carvalho de Melo int perf_evlist__open(struct perf_evlist *evlist, bool group); 82727ab04eSArnaldo Carvalho de Melo 830f82ebc4SArnaldo Carvalho de Melo void perf_evlist__config_attrs(struct perf_evlist *evlist, 840f82ebc4SArnaldo Carvalho de Melo struct perf_record_opts *opts); 850f82ebc4SArnaldo Carvalho de Melo 8635b9d88eSArnaldo Carvalho de Melo int perf_evlist__prepare_workload(struct perf_evlist *evlist, 8735b9d88eSArnaldo Carvalho de Melo struct perf_record_opts *opts, 8835b9d88eSArnaldo Carvalho de Melo const char *argv[]); 8935b9d88eSArnaldo Carvalho de Melo int perf_evlist__start_workload(struct perf_evlist *evlist); 9035b9d88eSArnaldo Carvalho de Melo 9150a682ceSArnaldo Carvalho de Melo int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages, 9250a682ceSArnaldo Carvalho de Melo bool overwrite); 937e2ed097SArnaldo Carvalho de Melo void perf_evlist__munmap(struct perf_evlist *evlist); 947e2ed097SArnaldo Carvalho de Melo 954152ab37SArnaldo Carvalho de Melo void perf_evlist__disable(struct perf_evlist *evlist); 96764e16a3SDavid Ahern void perf_evlist__enable(struct perf_evlist *evlist); 974152ab37SArnaldo Carvalho de Melo 9881cce8deSArnaldo Carvalho de Melo void perf_evlist__set_selected(struct perf_evlist *evlist, 9981cce8deSArnaldo Carvalho de Melo struct perf_evsel *evsel); 10081cce8deSArnaldo Carvalho de Melo 1017e2ed097SArnaldo Carvalho de Melo static inline void perf_evlist__set_maps(struct perf_evlist *evlist, 1027e2ed097SArnaldo Carvalho de Melo struct cpu_map *cpus, 1037e2ed097SArnaldo Carvalho de Melo struct thread_map *threads) 1047e2ed097SArnaldo Carvalho de Melo { 1057e2ed097SArnaldo Carvalho de Melo evlist->cpus = cpus; 1067e2ed097SArnaldo Carvalho de Melo evlist->threads = threads; 1077e2ed097SArnaldo Carvalho de Melo } 1087e2ed097SArnaldo Carvalho de Melo 109b809ac10SNamhyung Kim int perf_evlist__create_maps(struct perf_evlist *evlist, 110b809ac10SNamhyung Kim struct perf_target *target); 1117e2ed097SArnaldo Carvalho de Melo void perf_evlist__delete_maps(struct perf_evlist *evlist); 1120a102479SFrederic Weisbecker int perf_evlist__set_filters(struct perf_evlist *evlist); 113f8a95309SArnaldo Carvalho de Melo 114c2a70653SArnaldo Carvalho de Melo u64 perf_evlist__sample_type(const struct perf_evlist *evlist); 115c2a70653SArnaldo Carvalho de Melo bool perf_evlist__sample_id_all(const const struct perf_evlist *evlist); 11681e36bffSArnaldo Carvalho de Melo u16 perf_evlist__id_hdr_size(const struct perf_evlist *evlist); 11774429964SFrederic Weisbecker 118c2a70653SArnaldo Carvalho de Melo bool perf_evlist__valid_sample_type(const struct perf_evlist *evlist); 119c2a70653SArnaldo Carvalho de Melo bool perf_evlist__valid_sample_id_all(const struct perf_evlist *evlist); 1200529bc1fSJiri Olsa 1210529bc1fSJiri Olsa void perf_evlist__splice_list_tail(struct perf_evlist *evlist, 1220529bc1fSJiri Olsa struct list_head *list, 1230529bc1fSJiri Olsa int nr_entries); 1240529bc1fSJiri Olsa 125361c99a6SArnaldo Carvalho de Melo #endif /* __PERF_EVLIST_H */ 126