| Ingo Molnar | cdd6c48 | 2009-09-21 12:02:48 +0200 | [diff] [blame] | 1 | #ifndef __PERF_RECORD_H | 
 | 2 | #define __PERF_RECORD_H | 
| John Kacur | 8b40f52 | 2009-09-24 18:02:18 +0200 | [diff] [blame] | 3 |  | 
| Arnaldo Carvalho de Melo | 4a58e61 | 2009-12-27 21:37:00 -0200 | [diff] [blame] | 4 | #include <limits.h> | 
 | 5 |  | 
| Frederic Weisbecker | 1fe2c10 | 2009-08-12 10:19:53 +0200 | [diff] [blame] | 6 | #include "../perf.h" | 
| Arnaldo Carvalho de Melo | 4a58e61 | 2009-12-27 21:37:00 -0200 | [diff] [blame] | 7 | #include "map.h" | 
| Frederic Weisbecker | 1fe2c10 | 2009-08-12 10:19:53 +0200 | [diff] [blame] | 8 |  | 
| Peter Zijlstra | 18408dd | 2009-08-13 11:47:55 +0200 | [diff] [blame] | 9 | /* | 
 | 10 |  * PERF_SAMPLE_IP | PERF_SAMPLE_TID | * | 
 | 11 |  */ | 
| Frederic Weisbecker | 1fe2c10 | 2009-08-12 10:19:53 +0200 | [diff] [blame] | 12 | struct ip_event { | 
 | 13 | 	struct perf_event_header header; | 
 | 14 | 	u64 ip; | 
 | 15 | 	u32 pid, tid; | 
 | 16 | 	unsigned char __more_data[]; | 
 | 17 | }; | 
 | 18 |  | 
 | 19 | struct mmap_event { | 
 | 20 | 	struct perf_event_header header; | 
 | 21 | 	u32 pid, tid; | 
 | 22 | 	u64 start; | 
 | 23 | 	u64 len; | 
 | 24 | 	u64 pgoff; | 
 | 25 | 	char filename[PATH_MAX]; | 
 | 26 | }; | 
 | 27 |  | 
 | 28 | struct comm_event { | 
 | 29 | 	struct perf_event_header header; | 
 | 30 | 	u32 pid, tid; | 
 | 31 | 	char comm[16]; | 
 | 32 | }; | 
 | 33 |  | 
 | 34 | struct fork_event { | 
 | 35 | 	struct perf_event_header header; | 
 | 36 | 	u32 pid, ppid; | 
 | 37 | 	u32 tid, ptid; | 
| Arjan van de Ven | 393b2ad | 2009-09-12 07:52:47 +0200 | [diff] [blame] | 38 | 	u64 time; | 
| Frederic Weisbecker | 1fe2c10 | 2009-08-12 10:19:53 +0200 | [diff] [blame] | 39 | }; | 
 | 40 |  | 
 | 41 | struct lost_event { | 
 | 42 | 	struct perf_event_header header; | 
 | 43 | 	u64 id; | 
 | 44 | 	u64 lost; | 
 | 45 | }; | 
 | 46 |  | 
| Peter Zijlstra | 18408dd | 2009-08-13 11:47:55 +0200 | [diff] [blame] | 47 | /* | 
 | 48 |  * PERF_FORMAT_ENABLED | PERF_FORMAT_RUNNING | PERF_FORMAT_ID | 
 | 49 |  */ | 
| Frederic Weisbecker | 1fe2c10 | 2009-08-12 10:19:53 +0200 | [diff] [blame] | 50 | struct read_event { | 
 | 51 | 	struct perf_event_header header; | 
| Ingo Molnar | dc02bf7 | 2009-09-16 13:45:00 +0200 | [diff] [blame] | 52 | 	u32 pid, tid; | 
| Frederic Weisbecker | 1fe2c10 | 2009-08-12 10:19:53 +0200 | [diff] [blame] | 53 | 	u64 value; | 
 | 54 | 	u64 time_enabled; | 
 | 55 | 	u64 time_running; | 
 | 56 | 	u64 id; | 
 | 57 | }; | 
 | 58 |  | 
| OGAWA Hirofumi | 180f95e | 2009-12-06 20:08:24 +0900 | [diff] [blame] | 59 | struct sample_event { | 
| Arjan van de Ven | fd39e05 | 2009-09-12 07:53:00 +0200 | [diff] [blame] | 60 | 	struct perf_event_header        header; | 
 | 61 | 	u64 array[]; | 
 | 62 | }; | 
 | 63 |  | 
| Arnaldo Carvalho de Melo | 8d50e5b | 2011-01-29 13:02:00 -0200 | [diff] [blame] | 64 | struct perf_sample { | 
| OGAWA Hirofumi | 180f95e | 2009-12-06 20:08:24 +0900 | [diff] [blame] | 65 | 	u64 ip; | 
 | 66 | 	u32 pid, tid; | 
 | 67 | 	u64 time; | 
 | 68 | 	u64 addr; | 
 | 69 | 	u64 id; | 
 | 70 | 	u64 stream_id; | 
| OGAWA Hirofumi | 180f95e | 2009-12-06 20:08:24 +0900 | [diff] [blame] | 71 | 	u64 period; | 
| Arnaldo Carvalho de Melo | eed05fe | 2010-04-05 12:53:45 -0300 | [diff] [blame] | 72 | 	u32 cpu; | 
| OGAWA Hirofumi | 180f95e | 2009-12-06 20:08:24 +0900 | [diff] [blame] | 73 | 	u32 raw_size; | 
 | 74 | 	void *raw_data; | 
| Arnaldo Carvalho de Melo | eed05fe | 2010-04-05 12:53:45 -0300 | [diff] [blame] | 75 | 	struct ip_callchain *callchain; | 
| OGAWA Hirofumi | 180f95e | 2009-12-06 20:08:24 +0900 | [diff] [blame] | 76 | }; | 
 | 77 |  | 
| Arnaldo Carvalho de Melo | 8d06367 | 2009-11-04 18:50:43 -0200 | [diff] [blame] | 78 | #define BUILD_ID_SIZE 20 | 
 | 79 |  | 
 | 80 | struct build_id_event { | 
 | 81 | 	struct perf_event_header header; | 
| Zhang, Yanmin | a1645ce | 2010-04-19 13:32:50 +0800 | [diff] [blame] | 82 | 	pid_t			 pid; | 
| Arnaldo Carvalho de Melo | 8d06367 | 2009-11-04 18:50:43 -0200 | [diff] [blame] | 83 | 	u8			 build_id[ALIGN(BUILD_ID_SIZE, sizeof(u64))]; | 
 | 84 | 	char			 filename[]; | 
 | 85 | }; | 
| Arjan van de Ven | fd39e05 | 2009-09-12 07:53:00 +0200 | [diff] [blame] | 86 |  | 
| Frederic Weisbecker | 9840280 | 2010-05-02 22:05:29 +0200 | [diff] [blame] | 87 | enum perf_user_event_type { /* above any possible kernel type */ | 
| Thomas Gleixner | 9aefcab | 2010-12-07 12:48:47 +0000 | [diff] [blame] | 88 | 	PERF_RECORD_USER_TYPE_START		= 64, | 
| Tom Zanussi | 2c46dbb | 2010-04-01 23:59:19 -0500 | [diff] [blame] | 89 | 	PERF_RECORD_HEADER_ATTR			= 64, | 
| Tom Zanussi | cd19a03 | 2010-04-01 23:59:20 -0500 | [diff] [blame] | 90 | 	PERF_RECORD_HEADER_EVENT_TYPE		= 65, | 
| Tom Zanussi | 9215545 | 2010-04-01 23:59:21 -0500 | [diff] [blame] | 91 | 	PERF_RECORD_HEADER_TRACING_DATA		= 66, | 
| Tom Zanussi | c7929e4 | 2010-04-01 23:59:22 -0500 | [diff] [blame] | 92 | 	PERF_RECORD_HEADER_BUILD_ID		= 67, | 
| Frederic Weisbecker | 9840280 | 2010-05-02 22:05:29 +0200 | [diff] [blame] | 93 | 	PERF_RECORD_FINISHED_ROUND		= 68, | 
| Tom Zanussi | 2c46dbb | 2010-04-01 23:59:19 -0500 | [diff] [blame] | 94 | 	PERF_RECORD_HEADER_MAX | 
 | 95 | }; | 
 | 96 |  | 
 | 97 | struct attr_event { | 
 | 98 | 	struct perf_event_header header; | 
 | 99 | 	struct perf_event_attr attr; | 
 | 100 | 	u64 id[]; | 
| Tom Zanussi | 8dc5810 | 2010-04-01 23:59:15 -0500 | [diff] [blame] | 101 | }; | 
 | 102 |  | 
| Tom Zanussi | cd19a03 | 2010-04-01 23:59:20 -0500 | [diff] [blame] | 103 | #define MAX_EVENT_NAME 64 | 
 | 104 |  | 
 | 105 | struct perf_trace_event_type { | 
 | 106 | 	u64	event_id; | 
 | 107 | 	char	name[MAX_EVENT_NAME]; | 
 | 108 | }; | 
 | 109 |  | 
 | 110 | struct event_type_event { | 
 | 111 | 	struct perf_event_header header; | 
 | 112 | 	struct perf_trace_event_type event_type; | 
 | 113 | }; | 
 | 114 |  | 
| Tom Zanussi | 9215545 | 2010-04-01 23:59:21 -0500 | [diff] [blame] | 115 | struct tracing_data_event { | 
 | 116 | 	struct perf_event_header header; | 
 | 117 | 	u32 size; | 
 | 118 | }; | 
 | 119 |  | 
| Arnaldo Carvalho de Melo | 8115d60 | 2011-01-29 14:01:45 -0200 | [diff] [blame] | 120 | union perf_event { | 
| Frederic Weisbecker | 1fe2c10 | 2009-08-12 10:19:53 +0200 | [diff] [blame] | 121 | 	struct perf_event_header	header; | 
 | 122 | 	struct ip_event			ip; | 
 | 123 | 	struct mmap_event		mmap; | 
 | 124 | 	struct comm_event		comm; | 
 | 125 | 	struct fork_event		fork; | 
 | 126 | 	struct lost_event		lost; | 
 | 127 | 	struct read_event		read; | 
| Arjan van de Ven | fd39e05 | 2009-09-12 07:53:00 +0200 | [diff] [blame] | 128 | 	struct sample_event		sample; | 
| Tom Zanussi | 2c46dbb | 2010-04-01 23:59:19 -0500 | [diff] [blame] | 129 | 	struct attr_event		attr; | 
| Tom Zanussi | cd19a03 | 2010-04-01 23:59:20 -0500 | [diff] [blame] | 130 | 	struct event_type_event		event_type; | 
| Tom Zanussi | 9215545 | 2010-04-01 23:59:21 -0500 | [diff] [blame] | 131 | 	struct tracing_data_event	tracing_data; | 
| Tom Zanussi | c7929e4 | 2010-04-01 23:59:22 -0500 | [diff] [blame] | 132 | 	struct build_id_event		build_id; | 
| Arnaldo Carvalho de Melo | 8115d60 | 2011-01-29 14:01:45 -0200 | [diff] [blame] | 133 | }; | 
| Frederic Weisbecker | 66e274f | 2009-08-12 11:07:25 +0200 | [diff] [blame] | 134 |  | 
| Arnaldo Carvalho de Melo | 8115d60 | 2011-01-29 14:01:45 -0200 | [diff] [blame] | 135 | void perf_event__print_totals(void); | 
| Arnaldo Carvalho de Melo | 62daacb | 2009-11-27 16:29:22 -0200 | [diff] [blame] | 136 |  | 
| Arnaldo Carvalho de Melo | 4aa6563 | 2009-12-13 19:50:29 -0200 | [diff] [blame] | 137 | struct perf_session; | 
| Arnaldo Carvalho de Melo | 401b8e1 | 2011-02-10 12:52:47 -0200 | [diff] [blame] | 138 | struct thread_map; | 
| Arnaldo Carvalho de Melo | 4aa6563 | 2009-12-13 19:50:29 -0200 | [diff] [blame] | 139 |  | 
| Arnaldo Carvalho de Melo | 8115d60 | 2011-01-29 14:01:45 -0200 | [diff] [blame] | 140 | typedef int (*perf_event__handler_synth_t)(union perf_event *event,  | 
 | 141 | 					   struct perf_session *session); | 
 | 142 | typedef int (*perf_event__handler_t)(union perf_event *event, | 
 | 143 | 				     struct perf_sample *sample, | 
| Arnaldo Carvalho de Melo | 640c03c | 2010-12-02 14:10:21 -0200 | [diff] [blame] | 144 | 				      struct perf_session *session); | 
| Arnaldo Carvalho de Melo | cf55311 | 2010-01-07 19:59:40 -0200 | [diff] [blame] | 145 |  | 
| Arnaldo Carvalho de Melo | 7c940c1 | 2011-02-11 11:45:54 -0200 | [diff] [blame] | 146 | int perf_event__synthesize_thread_map(struct thread_map *threads, | 
 | 147 | 				      perf_event__handler_t process, | 
 | 148 | 				      struct perf_session *session); | 
| Arnaldo Carvalho de Melo | 8115d60 | 2011-01-29 14:01:45 -0200 | [diff] [blame] | 149 | int perf_event__synthesize_threads(perf_event__handler_t process, | 
 | 150 | 				   struct perf_session *session); | 
 | 151 | int perf_event__synthesize_kernel_mmap(perf_event__handler_t process, | 
 | 152 | 				       struct perf_session *session, | 
 | 153 | 				       struct machine *machine, | 
 | 154 | 				       const char *symbol_name); | 
 | 155 |  | 
 | 156 | int perf_event__synthesize_modules(perf_event__handler_t process, | 
 | 157 | 				   struct perf_session *session, | 
 | 158 | 				   struct machine *machine); | 
 | 159 |  | 
 | 160 | int perf_event__process_comm(union perf_event *event, struct perf_sample *sample, | 
| Arnaldo Carvalho de Melo | d8f6624 | 2009-12-13 19:50:24 -0200 | [diff] [blame] | 161 | 			     struct perf_session *session); | 
| Arnaldo Carvalho de Melo | 8115d60 | 2011-01-29 14:01:45 -0200 | [diff] [blame] | 162 | int perf_event__process_lost(union perf_event *event, struct perf_sample *sample, | 
 | 163 | 			     struct perf_session *session); | 
 | 164 | int perf_event__process_mmap(union perf_event *event, struct perf_sample *sample, | 
 | 165 | 			     struct perf_session *session); | 
 | 166 | int perf_event__process_task(union perf_event *event, struct perf_sample *sample, | 
 | 167 | 			     struct perf_session *session); | 
 | 168 | int perf_event__process(union perf_event *event, struct perf_sample *sample, | 
| Arnaldo Carvalho de Melo | 640c03c | 2010-12-02 14:10:21 -0200 | [diff] [blame] | 169 | 			struct perf_session *session); | 
| Arnaldo Carvalho de Melo | 62daacb | 2009-11-27 16:29:22 -0200 | [diff] [blame] | 170 |  | 
| Arnaldo Carvalho de Melo | 1ed091c | 2009-11-27 16:29:23 -0200 | [diff] [blame] | 171 | struct addr_location; | 
| Arnaldo Carvalho de Melo | 8115d60 | 2011-01-29 14:01:45 -0200 | [diff] [blame] | 172 | int perf_event__preprocess_sample(const union perf_event *self, | 
 | 173 | 				  struct perf_session *session, | 
 | 174 | 				  struct addr_location *al, | 
 | 175 | 				  struct perf_sample *sample, | 
 | 176 | 				  symbol_filter_t filter); | 
| Arnaldo Carvalho de Melo | 1ed091c | 2009-11-27 16:29:23 -0200 | [diff] [blame] | 177 |  | 
| Arnaldo Carvalho de Melo | 8115d60 | 2011-01-29 14:01:45 -0200 | [diff] [blame] | 178 | const char *perf_event__name(unsigned int id); | 
| Arnaldo Carvalho de Melo | c8446b9 | 2010-05-14 10:36:42 -0300 | [diff] [blame] | 179 |  | 
| Arnaldo Carvalho de Melo | 8115d60 | 2011-01-29 14:01:45 -0200 | [diff] [blame] | 180 | int perf_event__parse_sample(const union perf_event *event, u64 type, | 
 | 181 | 			     bool sample_id_all, struct perf_sample *sample); | 
| Arnaldo Carvalho de Melo | d0dd74e | 2011-01-21 13:46:41 -0200 | [diff] [blame] | 182 |  | 
| John Kacur | 8b40f52 | 2009-09-24 18:02:18 +0200 | [diff] [blame] | 183 | #endif /* __PERF_RECORD_H */ |