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 39361c99a6SArnaldo Carvalho de Melo struct perf_evsel; 40361c99a6SArnaldo Carvalho de Melo 417e2ed097SArnaldo Carvalho de Melo struct perf_evlist *perf_evlist__new(struct cpu_map *cpus, 427e2ed097SArnaldo Carvalho de Melo struct thread_map *threads); 437e2ed097SArnaldo Carvalho de Melo void perf_evlist__init(struct perf_evlist *evlist, struct cpu_map *cpus, 447e2ed097SArnaldo Carvalho de Melo struct thread_map *threads); 45ef1d1af2SArnaldo Carvalho de Melo void perf_evlist__exit(struct perf_evlist *evlist); 46361c99a6SArnaldo Carvalho de Melo void perf_evlist__delete(struct perf_evlist *evlist); 47361c99a6SArnaldo Carvalho de Melo 48361c99a6SArnaldo Carvalho de Melo void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry); 49361c99a6SArnaldo Carvalho de Melo int perf_evlist__add_default(struct perf_evlist *evlist); 5050d08e47SArnaldo Carvalho de Melo int perf_evlist__add_attrs(struct perf_evlist *evlist, 5150d08e47SArnaldo Carvalho de Melo struct perf_event_attr *attrs, size_t nr_attrs); 52a8c9ae18SArnaldo Carvalho de Melo int perf_evlist__add_tracepoints(struct perf_evlist *evlist, 53a8c9ae18SArnaldo Carvalho de Melo const char *tracepoints[], size_t nr_tracepoints); 5450d08e47SArnaldo Carvalho de Melo 5550d08e47SArnaldo Carvalho de Melo #define perf_evlist__add_attrs_array(evlist, array) \ 5650d08e47SArnaldo Carvalho de Melo perf_evlist__add_attrs(evlist, array, ARRAY_SIZE(array)) 57361c99a6SArnaldo Carvalho de Melo 58a8c9ae18SArnaldo Carvalho de Melo #define perf_evlist__add_tracepoints_array(evlist, array) \ 59a8c9ae18SArnaldo Carvalho de Melo perf_evlist__add_tracepoints(evlist, array, ARRAY_SIZE(array)) 60a8c9ae18SArnaldo Carvalho de Melo 61a91e5431SArnaldo Carvalho de Melo void perf_evlist__id_add(struct perf_evlist *evlist, struct perf_evsel *evsel, 623d3b5e95SArnaldo Carvalho de Melo int cpu, int thread, u64 id); 633d3b5e95SArnaldo Carvalho de Melo 647e2ed097SArnaldo Carvalho de Melo int perf_evlist__alloc_pollfd(struct perf_evlist *evlist); 6570082dd9SArnaldo Carvalho de Melo void perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd); 665c581041SArnaldo Carvalho de Melo 6770db7533SArnaldo Carvalho de Melo struct perf_evsel *perf_evlist__id2evsel(struct perf_evlist *evlist, u64 id); 6870db7533SArnaldo Carvalho de Melo 69aece948fSArnaldo Carvalho de Melo union perf_event *perf_evlist__mmap_read(struct perf_evlist *self, int idx); 7004391debSArnaldo Carvalho de Melo 71727ab04eSArnaldo Carvalho de Melo int perf_evlist__open(struct perf_evlist *evlist, bool group); 72727ab04eSArnaldo Carvalho de Melo 730f82ebc4SArnaldo Carvalho de Melo void perf_evlist__config_attrs(struct perf_evlist *evlist, 740f82ebc4SArnaldo Carvalho de Melo struct perf_record_opts *opts); 750f82ebc4SArnaldo Carvalho de Melo 7635b9d88eSArnaldo Carvalho de Melo int perf_evlist__prepare_workload(struct perf_evlist *evlist, 7735b9d88eSArnaldo Carvalho de Melo struct perf_record_opts *opts, 7835b9d88eSArnaldo Carvalho de Melo const char *argv[]); 7935b9d88eSArnaldo Carvalho de Melo int perf_evlist__start_workload(struct perf_evlist *evlist); 8035b9d88eSArnaldo Carvalho de Melo 817e2ed097SArnaldo Carvalho de Melo int perf_evlist__alloc_mmap(struct perf_evlist *evlist); 8250a682ceSArnaldo Carvalho de Melo int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages, 8350a682ceSArnaldo Carvalho de Melo bool overwrite); 847e2ed097SArnaldo Carvalho de Melo void perf_evlist__munmap(struct perf_evlist *evlist); 857e2ed097SArnaldo Carvalho de Melo 864152ab37SArnaldo Carvalho de Melo void perf_evlist__disable(struct perf_evlist *evlist); 87764e16a3SDavid Ahern void perf_evlist__enable(struct perf_evlist *evlist); 884152ab37SArnaldo Carvalho de Melo 8981cce8deSArnaldo Carvalho de Melo void perf_evlist__set_selected(struct perf_evlist *evlist, 9081cce8deSArnaldo Carvalho de Melo struct perf_evsel *evsel); 9181cce8deSArnaldo Carvalho de Melo 927e2ed097SArnaldo Carvalho de Melo static inline void perf_evlist__set_maps(struct perf_evlist *evlist, 937e2ed097SArnaldo Carvalho de Melo struct cpu_map *cpus, 947e2ed097SArnaldo Carvalho de Melo struct thread_map *threads) 957e2ed097SArnaldo Carvalho de Melo { 967e2ed097SArnaldo Carvalho de Melo evlist->cpus = cpus; 977e2ed097SArnaldo Carvalho de Melo evlist->threads = threads; 987e2ed097SArnaldo Carvalho de Melo } 997e2ed097SArnaldo Carvalho de Melo 1007e2ed097SArnaldo Carvalho de Melo int perf_evlist__create_maps(struct perf_evlist *evlist, pid_t target_pid, 1017e2ed097SArnaldo Carvalho de Melo pid_t target_tid, const char *cpu_list); 1027e2ed097SArnaldo Carvalho de Melo void perf_evlist__delete_maps(struct perf_evlist *evlist); 1030a102479SFrederic Weisbecker int perf_evlist__set_filters(struct perf_evlist *evlist); 104f8a95309SArnaldo Carvalho de Melo 105c2a70653SArnaldo Carvalho de Melo u64 perf_evlist__sample_type(const struct perf_evlist *evlist); 106c2a70653SArnaldo Carvalho de Melo bool perf_evlist__sample_id_all(const const struct perf_evlist *evlist); 10781e36bffSArnaldo Carvalho de Melo u16 perf_evlist__id_hdr_size(const struct perf_evlist *evlist); 10874429964SFrederic Weisbecker 109c2a70653SArnaldo Carvalho de Melo bool perf_evlist__valid_sample_type(const struct perf_evlist *evlist); 110c2a70653SArnaldo Carvalho de Melo bool perf_evlist__valid_sample_id_all(const struct perf_evlist *evlist); 111361c99a6SArnaldo Carvalho de Melo #endif /* __PERF_EVLIST_H */ 112