reactor-c
C Runtime for Lingua Franca
Loading...
Searching...
No Matches
trace.h
Go to the documentation of this file.
1
48#ifdef RTI_TRACE
49#define LF_TRACE
50#endif
51
52#ifndef TRACE_H
53#define TRACE_H
54
55#include "lf_types.h"
56#include <stdio.h>
57
58#ifdef FEDERATED
59#include "net_common.h"
60#endif // FEDERATED
61
125
126#ifdef LF_TRACE
127
131static const char *trace_event_names[] = {
132 "Reaction starts",
133 "Reaction ends",
134 "Reaction deadline missed",
135 "Schedule called",
136 "User-defined event",
137 "User-defined valued event",
138 "Worker wait starts",
139 "Worker wait ends",
140 "Scheduler advancing time starts",
141 "Scheduler advancing time ends",
142 "Federated marker",
143 // Sending messages
144 "Sending ACK",
145 "Sending TIMESTAMP",
146 "Sending NET",
147 "Sending LTC",
148 "Sending STOP_REQ",
149 "Sending STOP_REQ_REP",
150 "Sending STOP_GRN",
151 "Sending FED_ID",
152 "Sending PTAG",
153 "Sending TAG",
154 "Sending REJECT",
155 "Sending RESIGN",
156 "Sending PORT_ABS",
157 "Sending CLOSE_RQ",
158 "Sending TAGGED_MSG",
159 "Sending P2P_TAGGED_MSG",
160 "Sending MSG",
161 "Sending P2P_MSG",
162 "Sending ADR_AD",
163 "Sending ADR_QR",
164 // Receiving messages
165 "Receiving ACK",
166 "Receiving TIMESTAMP",
167 "Receiving NET",
168 "Receiving LTC",
169 "Receiving STOP_REQ",
170 "Receiving STOP_REQ_REP",
171 "Receiving STOP_GRN",
172 "Receiving FED_ID",
173 "Receiving PTAG",
174 "Receiving TAG",
175 "Receiving REJECT",
176 "Receiving RESIGN",
177 "Receiving PORT_ABS",
178 "Receiving CLOSE_RQ",
179 "Receiving TAGGED_MSG",
180 "Receiving P2P_TAGGED_MSG",
181 "Receiving MSG",
182 "Receiving P2P_MSG",
183 "Receiving ADR_AD",
184 "Receiving ADR_QR",
185 "Receiving UNIDENTIFIED",
186};
187
188// FIXME: Target property should specify the capacity of the trace buffer.
189#define TRACE_BUFFER_CAPACITY 2048
190
192#define TRACE_OBJECT_TABLE_SIZE 1024
193
197typedef struct trace_record_t {
198 trace_event_t event_type;
199 void* pointer; // pointer identifying the record, e.g. to self struct for a reactor.
200 int src_id; // The ID number of the source (e.g. worker or federate) or -1 for no ID number.
201 int dst_id; // The ID number of the destination (e.g. reaction or federate) or -1 for no ID number.
205 trigger_t* trigger;
206 interval_t extra_delay;
207} trace_record_t;
208
212typedef enum {
213 trace_reactor, // Self struct.
214 trace_trigger, // Timer or action (argument to schedule()).
215 trace_user // User-defined trace object.
216} _lf_trace_object_t;
217
221typedef struct object_description_t object_description_t;
222struct object_description_t {
223 void* pointer; // Pointer to the reactor self struct or other identifying pointer.
224 void* trigger; // Pointer to the trigger (action or timer) or other secondary ID, if any.
225 _lf_trace_object_t type; // The type of trace object.
226 char* description; // A NULL terminated string.
227};
234typedef struct trace_t {
240 trace_record_t** _lf_trace_buffer;
241 int* _lf_trace_buffer_size;
242
244 int _lf_number_of_trace_buffers;
245
247 int _lf_trace_stop;
248
250 FILE* _lf_trace_file;
251
253 char *filename;
254
256 object_description_t _lf_trace_object_descriptions[TRACE_OBJECT_TABLE_SIZE];
257 int _lf_trace_object_descriptions_size;
258
260 bool _lf_trace_header_written;
261
263 environment_t* env;
264} trace_t;
265
266
274trace_t* trace_new(environment_t *env, const char *filename);
275
282
283
293int _lf_register_trace_event(trace_t* trace, void* pointer1, void* pointer2, _lf_trace_object_t type, char* description);
294
302int register_user_trace_event(void* self, char* description);
303
309
333void tracepoint(
334 trace_t* trace,
335 trace_event_t event_type,
336 void* reactor,
337 tag_t* tag,
338 int worker,
339 int src_id,
340 int dst_id,
341 instant_t* physical_time,
342 trigger_t* trigger,
343 interval_t extra_delay,
344 bool is_interval_start
345);
346
354
362
369void tracepoint_schedule(trace_t* trace, trigger_t* trigger, interval_t extra_delay);
370
380void tracepoint_user_event(void* self, char* description);
381
395void tracepoint_user_value(void* self, char* description, long long value);
396
403
410
417
424
432
439
442
443#if defined(FEDERATED) || defined(LF_ENCLAVES)
444
452void tracepoint_federate_to_rti(trace_t* trace, trace_event_t event_type, int fed_id, tag_t* tag);
453
461void tracepoint_federate_from_rti(trace_t* trace, trace_event_t event_type, int fed_id, tag_t* tag);
462
471void tracepoint_federate_to_federate(trace_t* trace, trace_event_t event_type, int fed_id, int partner_id, tag_t *tag);
472
481void tracepoint_federate_from_federate(trace_t* trace, trace_event_t event_type, int fed_id, int partner_id, tag_t *tag);
482
483#else
484#define tracepoint_federate_to_rti(...);
485#define tracepoint_federate_from_rti(...);
486#define tracepoint_federate_to_federate(...);
487#define tracepoint_federate_from_federate(...);
488#endif // FEDERATED
489
492
493#ifdef RTI_TRACE
494
502void tracepoint_rti_to_federate(trace_t* trace, trace_event_t event_type, int fed_id, tag_t* tag);
503
511void tracepoint_rti_from_federate(trace_t* trace, trace_event_t event_type, int fed_id, tag_t* tag);
512
513#else
514#define tracepoint_rti_to_federate(...);
515#define tracepoint_rti_from_federate(...) ;
516#endif // RTI_TRACE
517
518#else
519typedef struct trace_t trace_t;
520
521// empty definition in case we compile without tracing
522#define _lf_register_trace_event(...)
523#define register_user_trace_event(...)
524#define tracepoint(...)
525#define tracepoint_reaction_starts(...)
526#define tracepoint_reaction_ends(...)
527#define tracepoint_schedule(...)
528#define tracepoint_user_event(...)
529#define tracepoint_user_value(...)
530#define tracepoint_worker_wait_starts(...)
531#define tracepoint_worker_wait_ends(...)
532#define tracepoint_scheduler_advancing_time_starts(...);
533#define tracepoint_scheduler_advancing_time_ends(...);
534#define tracepoint_reaction_deadline_missed(...);
535#define tracepoint_federate_to_rti(...);
536#define tracepoint_federate_from_rti(...);
537#define tracepoint_federate_to_federate(...) ;
538#define tracepoint_federate_from_federate(...) ;
539#define tracepoint_rti_to_federate(...);
540#define tracepoint_rti_from_federate(...) ;
541
542#define start_trace(...)
543#define stop_trace(...)
544#define stop_trace_locked(...)
545#define trace_new(...) NULL
546#define trace_free(...)
547
548
549#endif // LF_TRACE
550#endif // TRACE_H
type
Definition fedsd.py:99
logical_time
Definition fedsd.py:574
str physical_time
Definition fedsd.py:660
microstep
Definition fedsd.py:575
void * worker(void *arg)
Definition reactor_threaded.c:988
Execution environment. This struct contains information about the execution environment....
Definition environment.h:68
Definition lf_types.h:178
Definition tag.h:73
Definition lf_types.h:234
int64_t instant_t
Definition tag.h:58
uint32_t microstep_t
Definition tag.h:68
int64_t interval_t
Definition tag.h:63
#define tracepoint_worker_wait_starts(...)
Definition trace.h:530
#define tracepoint_federate_to_rti(...)
Definition trace.h:535
#define tracepoint_federate_to_federate(...)
Definition trace.h:537
#define trace_new(...)
Definition trace.h:545
#define start_trace(...)
Definition trace.h:542
#define tracepoint_scheduler_advancing_time_starts(...)
Definition trace.h:532
#define trace_free(...)
Definition trace.h:546
#define tracepoint_user_event(...)
Definition trace.h:528
#define tracepoint_federate_from_rti(...)
Definition trace.h:536
#define tracepoint_rti_from_federate(...)
Definition trace.h:540
#define tracepoint_reaction_starts(...)
Definition trace.h:525
#define tracepoint_reaction_ends(...)
Definition trace.h:526
#define _lf_register_trace_event(...)
Definition trace.h:522
#define register_user_trace_event(...)
Definition trace.h:523
#define stop_trace(...)
Definition trace.h:543
#define tracepoint_worker_wait_ends(...)
Definition trace.h:531
#define tracepoint_reaction_deadline_missed(...)
Definition trace.h:534
#define stop_trace_locked(...)
Definition trace.h:544
trace_event_t
Definition trace.h:68
@ scheduler_advancing_time_ends
Definition trace.h:78
@ send_STOP_REQ
Definition trace.h:85
@ receive_TAGGED_MSG
Definition trace.h:116
@ send_P2P_TAGGED_MSG
Definition trace.h:96
@ receive_STOP_REQ_REP
Definition trace.h:107
@ send_TAG
Definition trace.h:90
@ user_value
Definition trace.h:74
@ send_PORT_ABS
Definition trace.h:93
@ send_MSG
Definition trace.h:97
@ receive_RESIGN
Definition trace.h:113
@ receive_PTAG
Definition trace.h:110
@ send_ACK
Definition trace.h:81
@ receive_UNIDENTIFIED
Definition trace.h:122
@ send_ADR_QR
Definition trace.h:100
@ receive_MSG
Definition trace.h:118
@ send_STOP_GRN
Definition trace.h:87
@ send_TIMESTAMP
Definition trace.h:82
@ schedule_called
Definition trace.h:72
@ receive_REJECT
Definition trace.h:112
@ send_FED_ID
Definition trace.h:88
@ send_REJECT
Definition trace.h:91
@ receive_P2P_TAGGED_MSG
Definition trace.h:117
@ send_ADR_AD
Definition trace.h:99
@ reaction_ends
Definition trace.h:70
@ scheduler_advancing_time_starts
Definition trace.h:77
@ reaction_starts
Definition trace.h:69
@ send_LTC
Definition trace.h:84
@ send_TAGGED_MSG
Definition trace.h:95
@ send_STOP_REQ_REP
Definition trace.h:86
@ reaction_deadline_missed
Definition trace.h:71
@ receive_ACK
Definition trace.h:102
@ receive_ADR_AD
Definition trace.h:120
@ federated
Definition trace.h:79
@ worker_wait_starts
Definition trace.h:75
@ send_NET
Definition trace.h:83
@ receive_TAG
Definition trace.h:111
@ send_P2P_MSG
Definition trace.h:98
@ receive_CLOSE_RQ
Definition trace.h:115
@ send_RESIGN
Definition trace.h:92
@ receive_LTC
Definition trace.h:105
@ receive_NET
Definition trace.h:104
@ receive_STOP_REQ
Definition trace.h:106
@ NUM_EVENT_TYPES
Definition trace.h:123
@ receive_TIMESTAMP
Definition trace.h:103
@ receive_FED_ID
Definition trace.h:109
@ receive_P2P_MSG
Definition trace.h:119
@ receive_STOP_GRN
Definition trace.h:108
@ user_event
Definition trace.h:73
@ receive_ADR_QR
Definition trace.h:121
@ send_PTAG
Definition trace.h:89
@ receive_PORT_ABS
Definition trace.h:114
@ worker_wait_ends
Definition trace.h:76
@ send_CLOSE_RQ
Definition trace.h:94
struct trace_t trace_t
Definition trace.h:519
#define tracepoint_scheduler_advancing_time_ends(...)
Definition trace.h:533
#define tracepoint_rti_to_federate(...)
Definition trace.h:539
#define tracepoint_user_value(...)
Definition trace.h:529
#define tracepoint(...)
Definition trace.h:524
#define tracepoint_federate_from_federate(...)
Definition trace.h:538
#define tracepoint_schedule(...)
Definition trace.h:527
trace_record_t trace[TRACE_BUFFER_CAPACITY]
Definition trace_util.c:44