X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=tools%2Fperf%2Futil%2Fevent.h;h=6cc1b1dced55e97b7caf6648f9394bf8a1778b3e;hb=984028075794c00cbf4fb1e94bb6233e8be08875;hp=c31a5da6458b38f205b9e0acdb360f1e95447152;hpb=8b40f521cf1c9750eab0c04da9075e7484675e9c;p=safe%2Fjmp%2Flinux-2.6 diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h index c31a5da..6cc1b1d 100644 --- a/tools/perf/util/event.h +++ b/tools/perf/util/event.h @@ -1,15 +1,10 @@ #ifndef __PERF_RECORD_H #define __PERF_RECORD_H -#include "../perf.h" -#include "util.h" -#include +#include -enum { - SHOW_KERNEL = 1, - SHOW_USER = 2, - SHOW_HV = 4, -}; +#include "../perf.h" +#include "map.h" /* * PERF_SAMPLE_IP | PERF_SAMPLE_TID | * @@ -61,11 +56,65 @@ struct read_event { u64 id; }; -struct sample_event{ +struct sample_event { struct perf_event_header header; u64 array[]; }; +struct sample_data { + u64 ip; + u32 pid, tid; + u64 time; + u64 addr; + u64 id; + u64 stream_id; + u64 period; + u32 cpu; + u32 raw_size; + void *raw_data; + struct ip_callchain *callchain; +}; + +#define BUILD_ID_SIZE 20 + +struct build_id_event { + struct perf_event_header header; + pid_t pid; + u8 build_id[ALIGN(BUILD_ID_SIZE, sizeof(u64))]; + char filename[]; +}; + +enum perf_user_event_type { /* above any possible kernel type */ + PERF_RECORD_HEADER_ATTR = 64, + PERF_RECORD_HEADER_EVENT_TYPE = 65, + PERF_RECORD_HEADER_TRACING_DATA = 66, + PERF_RECORD_HEADER_BUILD_ID = 67, + PERF_RECORD_FINISHED_ROUND = 68, + PERF_RECORD_HEADER_MAX +}; + +struct attr_event { + struct perf_event_header header; + struct perf_event_attr attr; + u64 id[]; +}; + +#define MAX_EVENT_NAME 64 + +struct perf_trace_event_type { + u64 event_id; + char name[MAX_EVENT_NAME]; +}; + +struct event_type_event { + struct perf_event_header header; + struct perf_trace_event_type event_type; +}; + +struct tracing_data_event { + struct perf_event_header header; + u32 size; +}; typedef union event_union { struct perf_event_header header; @@ -76,30 +125,53 @@ typedef union event_union { struct lost_event lost; struct read_event read; struct sample_event sample; + struct attr_event attr; + struct event_type_event event_type; + struct tracing_data_event tracing_data; + struct build_id_event build_id; } event_t; -struct map { - struct list_head node; - u64 start; - u64 end; - u64 pgoff; - u64 (*map_ip)(struct map *, u64); - struct dso *dso; -}; - -static inline u64 map__map_ip(struct map *map, u64 ip) -{ - return ip - map->start + map->pgoff; -} - -static inline u64 vdso__map_ip(struct map *map __used, u64 ip) -{ - return ip; -} - -struct map *map__new(struct mmap_event *event, char *cwd, int cwdlen); -struct map *map__clone(struct map *self); -int map__overlap(struct map *l, struct map *r); -size_t map__fprintf(struct map *self, FILE *fp); +struct events_stats { + u64 total; + u64 lost; +}; + +struct event_stat_id { + struct rb_node rb_node; + struct rb_root hists; + struct events_stats stats; + u64 config; + u64 event_stream; + u32 type; +}; + +void event__print_totals(void); + +struct perf_session; + +typedef int (*event__handler_t)(event_t *event, struct perf_session *session); + +int event__synthesize_thread(pid_t pid, event__handler_t process, + struct perf_session *session); +void event__synthesize_threads(event__handler_t process, + struct perf_session *session); +int event__synthesize_kernel_mmap(event__handler_t process, + struct perf_session *session, + struct machine *machine, + const char *symbol_name); + +int event__synthesize_modules(event__handler_t process, + struct perf_session *session, + struct machine *machine); + +int event__process_comm(event_t *self, struct perf_session *session); +int event__process_lost(event_t *self, struct perf_session *session); +int event__process_mmap(event_t *self, struct perf_session *session); +int event__process_task(event_t *self, struct perf_session *session); + +struct addr_location; +int event__preprocess_sample(const event_t *self, struct perf_session *session, + struct addr_location *al, symbol_filter_t filter); +int event__parse_sample(event_t *event, u64 type, struct sample_data *data); #endif /* __PERF_RECORD_H */