perf tools: Encode kernel module mappings in perf.data
[safe/jmp/linux-2.6] / tools / perf / util / event.h
index fa2d4e9..50a7132 100644 (file)
@@ -1,14 +1,10 @@
-#ifndef __PERF_EVENT_H
-#define __PERF_EVENT_H
-#include "../perf.h"
-#include "util.h"
-#include <linux/list.h>
+#ifndef __PERF_RECORD_H
+#define __PERF_RECORD_H
 
-enum {
-       SHOW_KERNEL     = 1,
-       SHOW_USER       = 2,
-       SHOW_HV         = 4,
-};
+#include <limits.h>
+
+#include "../perf.h"
+#include "map.h"
 
 /*
  * PERF_SAMPLE_IP | PERF_SAMPLE_TID | *
@@ -39,6 +35,7 @@ struct fork_event {
        struct perf_event_header header;
        u32 pid, ppid;
        u32 tid, ptid;
+       u64 time;
 };
 
 struct lost_event {
@@ -52,13 +49,40 @@ struct lost_event {
  */
 struct read_event {
        struct perf_event_header header;
-       u32 pid,tid;
+       u32 pid, tid;
        u64 value;
        u64 time_enabled;
        u64 time_running;
        u64 id;
 };
 
+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;
+       u32 cpu;
+       u64 period;
+       struct ip_callchain *callchain;
+       u32 raw_size;
+       void *raw_data;
+};
+
+#define BUILD_ID_SIZE 20
+
+struct build_id_event {
+       struct perf_event_header header;
+       u8                       build_id[ALIGN(BUILD_ID_SIZE, sizeof(u64))];
+       char                     filename[];
+};
+
 typedef union event_union {
        struct perf_event_header        header;
        struct ip_event                 ip;
@@ -67,30 +91,38 @@ typedef union event_union {
        struct fork_event               fork;
        struct lost_event               lost;
        struct read_event               read;
+       struct sample_event             sample;
 } event_t;
 
-struct map {
-       struct list_head        node;
-       u64                     start;
-       u64                     end;
-       u64                     pgoff;
-       u64                     (*map_ip)(struct map *, u64);
-       struct dso              *dso;
+struct events_stats {
+       u64 total;
+       u64 lost;
 };
 
-static inline u64 map__map_ip(struct map *map, u64 ip)
-{
-       return ip - map->start + map->pgoff;
-}
+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,
+                                 const char *symbol_name);
+int event__synthesize_modules(event__handler_t process,
+                             struct perf_session *session);
 
-static inline u64 vdso__map_ip(struct map *map __used, u64 ip)
-{
-       return ip;
-}
+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 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 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
+#endif /* __PERF_RECORD_H */