3b2f20542a01c92159b9656891d920457cefe669
[cascardo/linux.git] / tools / perf / util / ordered-events.h
1 #ifndef __ORDERED_EVENTS_H
2 #define __ORDERED_EVENTS_H
3
4 #include <linux/types.h>
5 #include "tool.h"
6
7 struct perf_session;
8
9 struct ordered_event {
10         u64                     timestamp;
11         u64                     file_offset;
12         union perf_event        *event;
13         struct list_head        list;
14 };
15
16 enum oe_flush {
17         OE_FLUSH__NONE,
18         OE_FLUSH__FINAL,
19         OE_FLUSH__ROUND,
20         OE_FLUSH__HALF,
21 };
22
23 struct ordered_events {
24         u64                     last_flush;
25         u64                     next_flush;
26         u64                     max_timestamp;
27         u64                     max_alloc_size;
28         u64                     cur_alloc_size;
29         struct list_head        events;
30         struct list_head        cache;
31         struct list_head        to_free;
32         struct ordered_event    *buffer;
33         struct ordered_event    *last;
34         int                     buffer_idx;
35         unsigned int            nr_events;
36         enum oe_flush           last_flush_type;
37 };
38
39 struct ordered_event *ordered_events__new(struct ordered_events *oe, u64 timestamp);
40 void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event);
41 int ordered_events__flush(struct perf_session *s, struct perf_tool *tool,
42                           enum oe_flush how);
43 void ordered_events__init(struct ordered_events *oe);
44 void ordered_events__free(struct ordered_events *oe);
45
46 static inline
47 void ordered_events__set_alloc_size(struct ordered_events *oe, u64 size)
48 {
49         oe->max_alloc_size = size;
50 }
51 #endif /* __ORDERED_EVENTS_H */