ordered-events.h 1.6 KB
Newer Older
1 2 3 4 5
#ifndef __ORDERED_EVENTS_H
#define __ORDERED_EVENTS_H

#include <linux/types.h>

6
struct perf_sample;
7 8 9 10 11 12 13 14 15

struct ordered_event {
	u64			timestamp;
	u64			file_offset;
	union perf_event	*event;
	struct list_head	list;
};

enum oe_flush {
16
	OE_FLUSH__NONE,
17 18 19 20 21
	OE_FLUSH__FINAL,
	OE_FLUSH__ROUND,
	OE_FLUSH__HALF,
};

22 23 24
struct ordered_events;

typedef int (*ordered_events__deliver_t)(struct ordered_events *oe,
25
					 struct ordered_event *event);
26

27 28 29 30 31 32 33 34 35 36 37
struct ordered_events {
	u64			last_flush;
	u64			next_flush;
	u64			max_timestamp;
	u64			max_alloc_size;
	u64			cur_alloc_size;
	struct list_head	events;
	struct list_head	cache;
	struct list_head	to_free;
	struct ordered_event	*buffer;
	struct ordered_event	*last;
38
	ordered_events__deliver_t deliver;
39 40
	int			buffer_idx;
	unsigned int		nr_events;
41
	enum oe_flush		last_flush_type;
42
	u32			nr_unordered_events;
43
	bool                    copy_on_queue;
44 45
};

46 47
int ordered_events__queue(struct ordered_events *oe, union perf_event *event,
			  struct perf_sample *sample, u64 file_offset);
48
void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event);
49
int ordered_events__flush(struct ordered_events *oe, enum oe_flush how);
50
void ordered_events__init(struct ordered_events *oe, ordered_events__deliver_t deliver);
51
void ordered_events__free(struct ordered_events *oe);
52
void ordered_events__reinit(struct ordered_events *oe);
53 54 55 56 57 58

static inline
void ordered_events__set_alloc_size(struct ordered_events *oe, u64 size)
{
	oe->max_alloc_size = size;
}
59 60 61 62 63 64

static inline
void ordered_events__set_copy_on_queue(struct ordered_events *oe, bool copy)
{
	oe->copy_on_queue = copy;
}
65
#endif /* __ORDERED_EVENTS_H */