forked from dotnet/runtime
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathep-event-instance.h
More file actions
151 lines (127 loc) · 5.24 KB
/
ep-event-instance.h
File metadata and controls
151 lines (127 loc) · 5.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#ifndef __EVENTPIPE_EVENT_INSTANCE_H__
#define __EVENTPIPE_EVENT_INSTANCE_H__
#include "ep-rt-config.h"
#ifdef ENABLE_PERFTRACING
#include "ep-types.h"
#include "ep-stack-contents.h"
#undef EP_IMPL_GETTER_SETTER
#ifdef EP_IMPL_EVENT_INSTANCE_GETTER_SETTER
#define EP_IMPL_GETTER_SETTER
#endif
#include "ep-getter-setter.h"
/*
* EventPipeEventInstance.
*/
#if defined(EP_INLINE_GETTER_SETTER) || defined(EP_IMPL_EVENT_INSTANCE_GETTER_SETTER)
struct _EventPipeEventInstance {
#else
struct _EventPipeEventInstance_Internal {
#endif
uint8_t activity_id [EP_ACTIVITY_ID_SIZE];
uint8_t related_activity_id [EP_ACTIVITY_ID_SIZE];
uint64_t thread_id;
ep_timestamp_t timestamp;
EventPipeEvent *ep_event;
const uint8_t *data;
uint32_t metadata_id;
uint32_t proc_num;
uint32_t data_len;
#ifdef EP_CHECKED_BUILD
uint32_t debug_event_start;
uint32_t debug_event_end;
#endif
EventPipeStackContentsInstance stack_contents_instance;
};
#if !defined(EP_INLINE_GETTER_SETTER) && !defined(EP_IMPL_EVENT_INSTANCE_GETTER_SETTER)
struct _EventPipeEventInstance {
uint8_t _internal [sizeof (struct _EventPipeEventInstance_Internal)];
};
#endif
EP_DEFINE_GETTER(EventPipeEventInstance *, event_instance, EventPipeEvent *, ep_event)
EP_DEFINE_GETTER(EventPipeEventInstance *, event_instance, uint32_t, metadata_id)
EP_DEFINE_SETTER(EventPipeEventInstance *, event_instance, uint32_t, metadata_id)
EP_DEFINE_GETTER(EventPipeEventInstance *, event_instance, uint32_t, proc_num)
EP_DEFINE_GETTER(EventPipeEventInstance *, event_instance, uint64_t, thread_id)
EP_DEFINE_GETTER(EventPipeEventInstance *, event_instance, ep_timestamp_t, timestamp)
EP_DEFINE_SETTER(EventPipeEventInstance *, event_instance, ep_timestamp_t, timestamp)
EP_DEFINE_GETTER_ARRAY_REF(EventPipeEventInstance *, event_instance, uint8_t *, const uint8_t *, activity_id, activity_id[0])
EP_DEFINE_GETTER_ARRAY_REF(EventPipeEventInstance *, event_instance, uint8_t *, const uint8_t *, related_activity_id, related_activity_id[0])
EP_DEFINE_GETTER(EventPipeEventInstance *, event_instance, const uint8_t *, data)
EP_DEFINE_GETTER(EventPipeEventInstance *, event_instance, uint32_t, data_len)
EP_DEFINE_GETTER_REF(EventPipeEventInstance *, event_instance, EventPipeStackContentsInstance *, stack_contents_instance)
EventPipeEventInstance *
ep_event_instance_alloc (
EventPipeEvent *ep_event,
uint32_t proc_num,
uint64_t thread_id,
const uint8_t *data,
uint32_t data_len,
const uint8_t *activity_id,
const uint8_t *related_activity_id);
EventPipeEventInstance *
ep_event_instance_init (
EventPipeEventInstance *ep_event_instance,
EventPipeEvent *ep_event,
uint32_t proc_num,
uint64_t thread_id,
const uint8_t *data,
uint32_t data_len,
const uint8_t *activity_id,
const uint8_t *related_activity_id);
void
ep_event_instance_fini (EventPipeEventInstance *ep_event_instance);
void
ep_event_instance_free (EventPipeEventInstance *ep_event_instance);
bool
ep_event_instance_ensure_consistency (const EventPipeEventInstance *ep_event_instance);
uint32_t
ep_event_instance_get_aligned_total_size (
const EventPipeEventInstance *ep_event_instance,
EventPipeSerializationFormat format);
void
ep_event_instance_serialize_to_json_file (
EventPipeEventInstance *ep_event_instance,
EventPipeJsonFile *json_file);
static
inline
uint32_t
ep_event_instance_get_flattened_size (const EventPipeEventInstance *ep_event_instance)
{
EP_ASSERT (ep_event_instance != NULL);
return ep_event_instance_get_data (ep_event_instance) ?
sizeof (*ep_event_instance) - sizeof (ep_event_instance->stack_contents_instance.stack_frames) + ep_stack_contents_instance_get_full_size (ep_event_instance_get_stack_contents_instance_cref (ep_event_instance)) + ep_event_instance_get_data_len (ep_event_instance) :
sizeof (*ep_event_instance) - sizeof (ep_event_instance->stack_contents_instance.stack_frames) + ep_stack_contents_instance_get_full_size (ep_event_instance_get_stack_contents_instance_cref (ep_event_instance));
}
/*
* EventPipeSequencePoint.
*/
// A point in time marker that is used as a boundary when emitting events.
// The events in a Nettrace file are not emitted in a fully sorted order
// but we do guarantee that all events before a sequence point are emitted
// prior to any events after the sequence point.
#if defined(EP_INLINE_GETTER_SETTER) || defined(EP_IMPL_EVENT_INSTANCE_GETTER_SETTER)
struct _EventPipeSequencePoint {
#else
struct _EventPipeSequencePoint_Internal {
#endif
dn_umap_t *thread_sequence_numbers;
ep_timestamp_t timestamp;
};
#if !defined(EP_INLINE_GETTER_SETTER) && !defined(EP_IMPL_EVENT_INSTANCE_GETTER_SETTER)
struct _EventPipeSequencePoint {
uint8_t _internal [sizeof (struct _EventPipeSequencePoint_Internal)];
};
#endif
EP_DEFINE_GETTER(EventPipeSequencePoint *, sequence_point, dn_umap_t *, thread_sequence_numbers)
EP_DEFINE_GETTER(EventPipeSequencePoint *, sequence_point, ep_timestamp_t, timestamp)
EP_DEFINE_SETTER(EventPipeSequencePoint *, sequence_point, ep_timestamp_t, timestamp)
EventPipeSequencePoint *
ep_sequence_point_alloc (void);
EventPipeSequencePoint *
ep_sequence_point_init (EventPipeSequencePoint *sequence_point);
void
ep_sequence_point_fini (EventPipeSequencePoint *sequence_point);
void
ep_sequence_point_free (EventPipeSequencePoint *sequence_point);
#endif /* ENABLE_PERFTRACING */
#endif /* __EVENTPIPE_EVENT_INSTANCE_H__ */