| 1 |
|
| 2 | #ifndef __ORDERED_EVENTS_H
|
| 3 | #define __ORDERED_EVENTS_H
|
| 4 |
|
| 5 | #include <linux/types.h>
|
| 6 |
|
| 7 | struct perf_sample;
|
| 8 |
|
| 9 | struct ordered_event {
|
| 10 | u64 timestamp;
|
| 11 | u64 file_offset;
|
| 12 | const char *file_path;
|
| 13 | union perf_event *event;
|
| 14 | struct list_head list;
|
| 15 | };
|
| 16 |
|
| 17 | enum oe_flush {
|
| 18 | OE_FLUSH__NONE,
|
| 19 | OE_FLUSH__FINAL,
|
| 20 | OE_FLUSH__ROUND,
|
| 21 | OE_FLUSH__HALF,
|
| 22 | OE_FLUSH__TOP,
|
| 23 | OE_FLUSH__TIME,
|
| 24 | };
|
| 25 |
|
| 26 | struct ordered_events;
|
| 27 |
|
| 28 | typedef int (*ordered_events__deliver_t)(struct ordered_events *oe,
|
| 29 | struct ordered_event *event);
|
| 30 |
|
| 31 | struct ordered_events_buffer {
|
| 32 | struct list_head list;
|
| 33 | struct ordered_event event[];
|
| 34 | };
|
| 35 |
|
| 36 | struct ordered_events {
|
| 37 | u64 last_flush;
|
| 38 | u64 next_flush;
|
| 39 | u64 max_timestamp;
|
| 40 | u64 max_alloc_size;
|
| 41 | u64 cur_alloc_size;
|
| 42 | struct list_head events;
|
| 43 | struct list_head cache;
|
| 44 | struct list_head to_free;
|
| 45 | struct ordered_events_buffer *buffer;
|
| 46 | struct ordered_event *last;
|
| 47 | ordered_events__deliver_t deliver;
|
| 48 | int buffer_idx;
|
| 49 | unsigned int nr_events;
|
| 50 | enum oe_flush last_flush_type;
|
| 51 | u32 nr_unordered_events;
|
| 52 | bool copy_on_queue;
|
| 53 | void *data;
|
| 54 | };
|
| 55 |
|
| 56 | int ordered_events__queue(struct ordered_events *oe, union perf_event *event,
|
| 57 | u64 timestamp, u64 file_offset, const char *file_path);
|
| 58 | void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event);
|
| 59 | int ordered_events__flush(struct ordered_events *oe, enum oe_flush how);
|
| 60 | int ordered_events__flush_time(struct ordered_events *oe, u64 timestamp);
|
| 61 | void ordered_events__init(struct ordered_events *oe, ordered_events__deliver_t deliver,
|
| 62 | void *data);
|
| 63 | void ordered_events__free(struct ordered_events *oe);
|
| 64 | void ordered_events__reinit(struct ordered_events *oe);
|
| 65 | u64 ordered_events__first_time(struct ordered_events *oe);
|
| 66 |
|
| 67 | static inline
|
| 68 | void ordered_events__set_alloc_size(struct ordered_events *oe, u64 size)
|
| 69 | {
|
| 70 | oe->max_alloc_size = size;
|
| 71 | }
|
| 72 |
|
| 73 | static inline
|
| 74 | void ordered_events__set_copy_on_queue(struct ordered_events *oe, bool copy)
|
| 75 | {
|
| 76 | oe->copy_on_queue = copy;
|
| 77 | }
|
| 78 |
|
| 79 | static inline u64 ordered_events__last_flush_time(struct ordered_events *oe)
|
| 80 | {
|
| 81 | return oe->last_flush;
|
| 82 | }
|
| 83 |
|
| 84 | #endif
|