Move to kernel style SPDX license identifiers
[babeltrace.git] / include / babeltrace2 / graph / message.h
CommitLineData
43c59509 1/*
0235b0db 2 * SPDX-License-Identifier: MIT
43c59509 3 *
0235b0db 4 * Copyright (C) 2010-2019 EfficiOS Inc. and Linux Foundation
43c59509
PP
5 */
6
0235b0db
MJ
7#ifndef BABELTRACE2_GRAPH_MESSAGE_H
8#define BABELTRACE2_GRAPH_MESSAGE_H
9
43c59509
PP
10#ifndef __BT_IN_BABELTRACE_H
11# error "Please include <babeltrace2/babeltrace.h> instead."
12#endif
13
14#include <babeltrace2/types.h>
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
20/*!
21@defgroup api-msg Messages
22@ingroup api-comp-cls-dev
23
24@brief
25 Elements exchanged between \bt_p_comp.
26
27<strong><em>Messages</em></strong> are the objects which are exchanged
28between \bt_p_comp in a trace processing \bt_graph to accomplish a
29trace processing job.
30
31\bt_cp_msg_iter create messages while message iterators \em and
32\bt_p_sink_comp consume messages.
33
34There are eight types of messages:
35
36- \bt_c_sb_msg
37- \bt_c_se_msg
38- \bt_c_ev_msg
39- \bt_c_pb_msg
40- \bt_c_pe_msg
41- \bt_c_disc_ev_msg
42- \bt_c_disc_pkt_msg
43- \bt_c_inac_msg
44
45The type of a message is #bt_message.
46
47Get the type enumerator of a message with bt_message_get_type().
48
49A message is a \ref api-fund-shared-object "shared object": get a
50new reference with bt_message_get_ref() and put an existing
51reference with bt_message_put_ref().
52
53Some library functions \ref api-fund-freezing "freeze" messages on
54success. The documentation of those functions indicate this
55postcondition.
56
57Messages transport objects of the \ref api-tir API, which is an
58intermediate representation of the tracing domain concepts.
59
60All types of messages, except the \bt_inac_msg type, are related to a
61specific <em>\bt_stream</em>, which represents a conceptual
62\ref api-msg-seq "sequence of messages".
63
64Some types of messages can have a default \bt_cs, depending on whether
65or not their stream has a conceptual default clock, that is, whether or
66not the stream's \ref api-tir-stream-cls "class" has a
67\ref api-tir-stream-cls-prop-def-clock-cls "default clock class".
68The creation functions for those types of messages contain
69<code>_with_default_clock_snapshot</code> (for example,
70bt_message_event_create_with_default_clock_snapshot()).
71
72For the \bt_sb_msg and \bt_se_msg, the default clock snapshot property
73is optional, therefore they have dedicated
74bt_message_stream_beginning_set_default_clock_snapshot() and
75bt_message_stream_end_set_default_clock_snapshot() functions.
76
77All the message creation functions take a \bt_self_msg_iter as their
78first parameter. This is because a message iterator method is the only
79valid context to create a message.
80
81<h1>Message types</h1>
82
83This section details each type of message.
84
85The following table shows the creation functions and types for each type
86of message:
87
88<table>
89 <tr>
90 <th>Name
91 <th>Type enumerator
92 <th>Creation functions
93 <tr>
94 <td>\ref api-msg-sb "Stream beginning"
95 <td>#BT_MESSAGE_TYPE_STREAM_BEGINNING
96 <td>bt_message_stream_beginning_create()
97 <tr>
98 <td>\ref api-msg-se "Stream end"
99 <td>#BT_MESSAGE_TYPE_STREAM_END
100 <td>bt_message_stream_end_create()
101 <tr>
102 <td>\ref api-msg-ev "Event"
103 <td>#BT_MESSAGE_TYPE_EVENT
104 <td>
105 bt_message_event_create()<br>
106 bt_message_event_create_with_default_clock_snapshot()<br>
107 bt_message_event_create_with_packet()<br>
108 bt_message_event_create_with_packet_and_default_clock_snapshot()
109 <tr>
110 <td>\ref api-msg-pb "Packet beginning"
111 <td>#BT_MESSAGE_TYPE_PACKET_BEGINNING
112 <td>
113 bt_message_packet_beginning_create()<br>
114 bt_message_packet_beginning_create_with_default_clock_snapshot()
115 <tr>
116 <td>\ref api-msg-pe "Packet end"
117 <td>#BT_MESSAGE_TYPE_PACKET_END
118 <td>
119 bt_message_packet_end_create()<br>
120 bt_message_packet_end_create_with_default_clock_snapshot()
121 <tr>
122 <td>\ref api-msg-disc-ev "Discarded events"
123 <td>#BT_MESSAGE_TYPE_DISCARDED_EVENTS
124 <td>
125 bt_message_discarded_events_create()<br>
126 bt_message_discarded_events_create_with_default_clock_snapshots()
127 <tr>
128 <td>\ref api-msg-disc-pkt "Discarded packets"
129 <td>#BT_MESSAGE_TYPE_DISCARDED_PACKETS
130 <td>
131 bt_message_discarded_packets_create()<br>
132 bt_message_discarded_packets_create_with_default_clock_snapshots()
133 <tr>
134 <td>\ref api-msg-inac "Message iterator inactivity"
135 <td>#BT_MESSAGE_TYPE_MESSAGE_ITERATOR_INACTIVITY
136 <td>bt_message_message_iterator_inactivity_create()
137</table>
138
139<h2>\anchor api-msg-sb Stream beginning message</h2>
140
141A <strong><em>stream beginning message</em></strong> indicates the
142beginning of a \bt_stream.
143
144For a given stream:
145
146- A stream beginning message is always the first one in the
147 \ref api-msg-seq "message sequence".
148
149- There can be only one stream beginning message.
150
151Create a stream beginning message with
152bt_message_stream_beginning_create().
153
154A stream beginning message has the following properties:
155
156<dl>
157 <dt>\anchor api-msg-sb-prop-stream Stream</dt>
158 <dd>
159 \bt_c_stream of which the message indicates the beginning.
160
161 You cannot change the stream once the message is created.
162
163 Borrow a stream beginning message's stream with
164 bt_message_stream_beginning_borrow_stream() and
165 bt_message_stream_beginning_borrow_stream_const().
166 </dd>
167
168 <dt>
169 \anchor api-msg-sb-prop-cs
170 \bt_dt_opt Default \bt_cs
171 </dt>
172 <dd>
173 Snapshot of the message's \bt_stream's default clock when the
174 stream begins.
175
176 A stream beginning message can only have a default clock snapshot
177 if its stream's \ref api-tir-stream-cls "class" has a
178 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class".
179
180 When a stream beginning message has no default clock snapshot,
181 then its time is <em>unknown</em>.
182
183 Set a stream beginning message's default clock snapshot with
184 bt_message_stream_beginning_set_default_clock_snapshot().
185
186 Borrow a stream beginning message's default clock snapshot with
187 bt_message_stream_beginning_borrow_default_clock_snapshot_const().
188 </dd>
189</dl>
190
191<h2>\anchor api-msg-se Stream end message</h2>
192
193A <strong><em>stream end message</em></strong> indicates the
194end of a \bt_stream.
195
196For a given stream:
197
198- A stream end message is always the last one in the
199 \ref api-msg-seq "message sequence".
200
201- There can be only one stream end message.
202
203Create a stream end message with bt_message_stream_end_create().
204
205A stream end message has the following properties:
206
207<dl>
208 <dt>\anchor api-msg-se-prop-stream Stream</dt>
209 <dd>
210 \bt_c_stream of which the message indicates the end.
211
212 You cannot change the stream once the message is created.
213
214 Borrow a stream end message's stream with
215 bt_message_stream_end_borrow_stream() and
216 bt_message_stream_end_borrow_stream_const().
217 </dd>
218
219 <dt>
220 \anchor api-msg-se-prop-cs
221 \bt_dt_opt Default \bt_cs
222 </dt>
223 <dd>
224 Snapshot of the message's \bt_stream's default clock when the
225 stream ends.
226
227 A stream end message can only have a default clock snapshot
228 if its stream's \ref api-tir-stream-cls "class" has a
229 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class".
230
231 When a stream end message has no default clock snapshot, then its
232 time is <em>unknown</em>.
233
234 Set a stream end message's default clock snapshot with
235 bt_message_stream_end_set_default_clock_snapshot().
236
237 Borrow a stream end message's default clock snapshot with
238 bt_message_stream_end_borrow_default_clock_snapshot_const().
239 </dd>
240</dl>
241
242<h2>\anchor api-msg-ev Event message</h2>
243
244An <strong><em>event message</em></strong> transports an \bt_ev and has,
245possibly, a default \bt_cs.
246
247Within its \bt_stream's \ref api-msg-seq "message sequence", an event
248message can only occur:
249
250<dl>
251 <dt>
252 If the stream's \ref api-tir-stream-cls "class"
253 \ref api-tir-stream-cls-prop-supports-pkt "supports packets"
254 </dt>
255 <dd>After a \bt_pb_msg and before a \bt_pe_msg.</dd>
256
257 <dt>
258 If the stream's class does not support packets
259 </dt>
260 <dd>After the \bt_sb_msg and before the \bt_se_msg.</dd>
261</dl>
262
263To create an event message for a given stream, use:
264
265<dl>
266 <dt>
267 If the stream's \ref api-tir-stream-cls "class"
268 \ref api-tir-stream-cls-prop-supports-pkt "supports packets"
269 </dt>
270 <dd>
271 <dl>
272 <dt>
273 If the stream's class has a
274 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class"
275 </dt>
276 <dd>bt_message_event_create_with_packet_and_default_clock_snapshot()</dd>
277
278 <dt>
279 If the stream's class does not have a
280 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class"
281 </dt>
282 <dd>bt_message_event_create_with_packet()</dd>
283 </dl>
284
285 Those two creation functions accept a \bt_pkt parameter which is
286 the packet logically containing the message's event. A packet is
287 part of a stream.
288 </dd>
289
290 <dt>
291 If the stream's class does not supports packets
292 </dt>
293 <dd>
294 <dl>
295 <dt>
296 If the stream's class has a default clock class
297 </dt>
298 <dd>bt_message_event_create_with_default_clock_snapshot()</dd>
299
300 <dt>
301 If the stream's class does not have a
302 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class"
303 </dt>
304 <dd>bt_message_event_create()</dd>
305 </dl>
306 </dd>
307</dl>
308
309The four creation functions above accept an \bt_ev_cls parameter. When
310you create the message, the library instantiates this event class as an
311\bt_ev. Borrow the resulting event with bt_message_event_borrow_event().
312This event class must be part of the class of the event message's
313stream.
314
315An event message's event is initially <em>not set</em>: before you emit
316the event message from a \bt_msg_iter's
317\link api-msg-iter-cls-meth-next "next" method\endlink, you need to
318borrow each of its \bt_p_field (with bt_event_borrow_payload_field(),
319bt_event_borrow_specific_context_field(), and
320bt_event_borrow_common_context_field()) and, recursively, set the values
321of the all their inner fields.
322
323An event message has the following properties:
324
325<dl>
326 <dt>\anchor api-msg-ev-prop-ev Event</dt>
327 <dd>
328 \bt_c_ev which the message transports.
329
330 This is an instance of the \bt_ev_cls which was passed to the
331 message's creation function.
332
333 With this event, you can access its \bt_pkt (if any) with
334 bt_event_borrow_packet_const() and its
335 \bt_stream with bt_event_borrow_stream_const().
336
337 Borrow an event message's event with bt_message_event_borrow_event()
338 and bt_message_event_borrow_event_const().
339 </dd>
340
341 <dt>
342 \anchor api-msg-ev-prop-cs
343 \bt_dt_opt Default \bt_cs
344 </dt>
345 <dd>
346 Snapshot of the message's \bt_stream's default clock when the
347 event occurs.
348
349 An event message has a default clock snapshot
350 if its stream's \ref api-tir-stream-cls "class" has a
351 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class",
352 and has none otherwise.
353
354 Within its \bt_msg_iter's \ref api-msg-seq "message sequence",
355 the default clock snapshot of an event message must be greater than
356 or equal to any default clock snapshot of any previous message.
357
358 Borrow an event message's default clock snapshot with
359 bt_message_event_borrow_default_clock_snapshot_const().
360 </dd>
361</dl>
362
363<h2>\anchor api-msg-pb Packet beginning message</h2>
364
365A <strong><em>packet beginning message</em></strong> indicates the
366beginning of a \bt_pkt.
367
368A packet beginning message can only exist if its \bt_stream's
369\ref api-tir-stream-cls "class"
370\ref api-tir-stream-cls-prop-supports-pkt "supports packets".
371
372For a given packet, there can be only one packet beginning message.
373
374Within its \bt_stream's \ref api-msg-seq "message sequence", a packet
375beginning message can only occur after the \bt_sb_msg and before the
376\bt_se_msg.
377
378To create a packet beginning message for a given stream, use:
379
380<dl>
381 <dt>
382 If, for this stream's class,
383 \ref api-tir-stream-cls-prop-pkt-beg-cs "packets have a beginning default clock snapshot"
384 </dt>
385 <dd>bt_message_packet_beginning_create_with_default_clock_snapshot()</dd>
386
387 <dt>
388 If, for this stream's class, packets do not have a beginning default
389 clock snapshot
390 </dt>
391 <dd>bt_message_packet_beginning_create()</dd>
392</dl>
393
394A packet beginning message has the following properties:
395
396<dl>
397 <dt>\anchor api-msg-pb-prop-pkt Packet</dt>
398 <dd>
399 \bt_c_pkt of which the message indicates the beginning.
400
401 You cannot change the packet once the message is created.
402
403 Borrow a packet beginning message's packet with
404 bt_message_packet_beginning_borrow_packet() and
405 bt_message_packet_beginning_borrow_packet_const().
406 </dd>
407
408 <dt>
409 \anchor api-msg-pb-prop-cs
410 \bt_dt_opt Default \bt_cs
411 </dt>
412 <dd>
413 Snapshot of the message's \bt_stream's default clock when the
414 packet begins.
415
416 A packet beginning message has a default clock snapshot if:
417
418 - Its stream's \ref api-tir-stream-cls "class" has a
419 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class".
420
421 - For its stream's class,
422 \ref api-tir-stream-cls-prop-pkt-beg-cs "packets have a beginning default clock snapshot".
423
424 Within its \bt_msg_iter's \ref api-msg-seq "message sequence",
425 the default clock snapshot of a packet beginning message must be
426 greater than or equal to any clock snapshot of any previous message.
427
428 Borrow a packet beginning message's default clock snapshot with
429 bt_message_packet_beginning_borrow_default_clock_snapshot_const().
430 </dd>
431</dl>
432
433<h2>\anchor api-msg-pe Packet end message</h2>
434
435A <strong><em>packet end message</em></strong> indicates the
436end of a \bt_pkt.
437
438A packet end message can only exist if its \bt_stream's
439\ref api-tir-stream-cls "class"
440\ref api-tir-stream-cls-prop-supports-pkt "supports packets".
441
442For a given packet, there can be only one packet end message.
443
444Within its \bt_stream's \ref api-msg-seq "message sequence", a packet
445end message can only occur:
446
447- After the \bt_sb_msg and before the \bt_se_msg.
448- After a \bt_pb_msg for the same packet.
449
450To create a packet end message for a given stream, use:
451
452<dl>
453 <dt>
454 If, for this stream's class,
455 \ref api-tir-stream-cls-prop-pkt-end-cs "packets have an end default clock snapshot"
456 </dt>
457 <dd>bt_message_packet_end_create_with_default_clock_snapshot()</dd>
458
459 <dt>
460 If, for this stream's class, packets do not have an end default
461 clock snapshot
462 </dt>
463 <dd>bt_message_packet_end_create()</dd>
464</dl>
465
466A packet end message has the following properties:
467
468<dl>
469 <dt>\anchor api-msg-pe-prop-pkt Packet</dt>
470 <dd>
471 \bt_c_pkt of which the message indicates the end.
472
473 You cannot change the packet once the message is created.
474
475 Borrow a packet end message's packet with
476 bt_message_packet_end_borrow_packet() and
477 bt_message_packet_end_borrow_packet_const().
478 </dd>
479
480 <dt>
481 \anchor api-msg-pe-prop-cs
482 \bt_dt_opt Default \bt_cs
483 </dt>
484 <dd>
485 Snapshot of the message's \bt_stream's default clock when the
486 packet ends.
487
488 A packet end message has a default clock snapshot if:
489
490 - Its stream's \ref api-tir-stream-cls "class" has a
491 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class".
492
493 - For its stream's class,
494 \ref api-tir-stream-cls-prop-pkt-end-cs "packets have an end default clock snapshot".
495
496 Within its \bt_msg_iter's \ref api-msg-seq "message sequence",
497 the default clock snapshot of a packet end message must be greater
498 than or equal to any clock snapshot of any previous message.
499
500 Borrow a packet end message's default clock snapshot with
501 bt_message_packet_end_borrow_default_clock_snapshot_const().
502 </dd>
503</dl>
504
505<h2>\anchor api-msg-disc-ev Discarded events message</h2>
506
507A <strong><em>discarded events message</em></strong> indicates that
508events were discarded at <em>tracing time</em>. It does \em not indicate
509that \bt_p_ev_msg were dropped during a trace processing \bt_graph run.
510
511A discarded events message can only exist if its \bt_stream's
512\ref api-tir-stream-cls "class"
513\ref api-tir-stream-cls-prop-supports-disc-ev "supports discarded events".
514
515Within its \bt_stream's \ref api-msg-seq "message sequence", a discarded
516events message can only occur after the \bt_sb_msg and before the
517\bt_se_msg.
518
519To create a discarded events message for a given stream, use:
520
521<dl>
522 <dt>
523 If, for this stream's class,
524 \ref api-tir-stream-cls-prop-disc-ev-cs "discarded events have default clock snapshots"
525 </dt>
526 <dd>bt_message_discarded_events_create_with_default_clock_snapshots()</dd>
527
528 <dt>
529 If, for this stream's class, discarded events do not have default
530 clock snapshots
531 </dt>
532 <dd>bt_message_discarded_events_create()</dd>
533</dl>
534
535A discarded events message has the following properties:
536
537<dl>
538 <dt>\anchor api-msg-disc-ev-prop-stream Stream</dt>
539 <dd>
540 \bt_c_stream into which events were discarded.
541
542 You cannot change the stream once the message is created.
543
544 Borrow a discarded events message's stream with
545 bt_message_discarded_events_borrow_stream() and
546 bt_message_discarded_events_borrow_stream_const().
547 </dd>
548
549 <dt>
550 \anchor api-msg-disc-ev-prop-cs-beg
551 \bt_dt_opt Beginning default \bt_cs
552 </dt>
553 <dd>
554 Snapshot of the message's \bt_stream's default clock which indicates
555 the beginning of the discarded events time range.
556
557 A discarded events message has a beginning default clock snapshot
558 if:
559
560 - Its stream's \ref api-tir-stream-cls "class" has a
561 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class".
562
563 - For its stream's class,
564 \ref api-tir-stream-cls-prop-disc-ev-cs "discarded events have default clock snapshots".
565
566 Within its \bt_msg_iter's \ref api-msg-seq "message sequence",
567 the beginning default clock snapshot of a discarded events message
568 must be greater than or equal to any clock snapshot of any previous
569 message.
570
571 Borrow a discarded events message's beginning default clock snapshot
572 with
573 bt_message_discarded_events_borrow_beginning_default_clock_snapshot_const().
574 </dd>
575
576 <dt>
577 \anchor api-msg-disc-ev-prop-cs-end
578 \bt_dt_opt End default \bt_cs
579 </dt>
580 <dd>
581 Snapshot of the message's \bt_stream's default clock which indicates
582 the end of the discarded events time range.
583
584 A discarded events message has an end default clock snapshot if:
585
586 - Its stream's \ref api-tir-stream-cls "class" has a
587 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class".
588
589 - For its stream's class,
590 \ref api-tir-stream-cls-prop-disc-ev-cs "discarded events have default clock snapshots".
591
592 If a discarded events message has both a
593 \ref api-msg-disc-ev-prop-cs-beg "beginning" and an end default
594 clock snapshots, the end default clock snapshot must be greater than
595 or equal to the beginning default clock snapshot.
596
597 Within its \bt_msg_iter's \ref api-msg-seq "message sequence",
598 the end default clock snapshot of a discarded events message must be
599 greater than or equal to any clock snapshot of any previous message.
600
601 Borrow a discarded events message's end default clock snapshot with
602 bt_message_discarded_events_borrow_end_default_clock_snapshot_const().
603 </dd>
604
605 <dt>
606 \anchor api-msg-disc-ev-prop-count
607 \bt_dt_opt Discarded event count
608 </dt>
609 <dd>
610 Exact number of discarded events.
611
612 If this property is missing, then the number of discarded events
613 is at least one.
614
615 Use bt_message_discarded_events_set_count() and
616 bt_message_discarded_events_get_count().
617 </dd>
618</dl>
619
620<h2>\anchor api-msg-disc-pkt Discarded packets message</h2>
621
622A <strong><em>discarded packets message</em></strong> indicates that
623packets were discarded at <em>tracing time</em>. It does \em not
624indicate that whole packets were dropped during a trace processing
625\bt_graph run.
626
627A discarded packets message can only exist if its \bt_stream's
628\ref api-tir-stream-cls "class"
629\ref api-tir-stream-cls-prop-supports-disc-pkt "supports discarded packets".
630
631Within its \bt_stream's \ref api-msg-seq "message sequence", a discarded
632packets message can only occur:
633
634- After the \bt_sb_msg.
635- Before the \bt_se_msg.
636- One of:
637 - Before any \bt_pb_msg.
638 - After any \bt_pe_msg.
639 - Between a packet end and a packet beginning message.
640
641To create a discarded packets message for a given stream, use:
642
643<dl>
644 <dt>
645 If, for this stream's class,
646 \ref api-tir-stream-cls-prop-disc-pkt-cs "discarded packets have default clock snapshots"
647 </dt>
648 <dd>bt_message_discarded_packets_create_with_default_clock_snapshots()</dd>
649
650 <dt>
651 If, for this stream's class, discarded packets do not have default
652 clock snapshots
653 </dt>
654 <dd>bt_message_discarded_packets_create()</dd>
655</dl>
656
657A discarded packets message has the following properties:
658
659<dl>
660 <dt>\anchor api-msg-disc-pkt-prop-stream Stream</dt>
661 <dd>
662 \bt_c_stream into which packets were discarded.
663
664 You cannot change the stream once the message is created.
665
666 Borrow a discarded packets message's stream with
667 bt_message_discarded_packets_borrow_stream() and
668 bt_message_discarded_packets_borrow_stream_const().
669 </dd>
670
671 <dt>
672 \anchor api-msg-disc-pkt-prop-cs-beg
673 \bt_dt_opt Beginning default \bt_cs
674 </dt>
675 <dd>
676 Snapshot of the message's \bt_stream's default clock which indicates
677 the beginning of the discarded packets time range.
678
679 A discarded packets message has a beginning default clock snapshot
680 if:
681
682 - Its stream's \ref api-tir-stream-cls "class" has a
683 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class".
684
685 - For its stream's class,
686 \ref api-tir-stream-cls-prop-disc-pkt-cs "discarded packets have default clock snapshots".
687
688 Within its \bt_msg_iter's \ref api-msg-seq "message sequence",
689 the beginning default clock snapshot of a discarded packets message
690 must be greater than or equal to any clock snapshot of any previous
691 message.
692
693 Borrow a discarded packets message's beginning default clock snapshot
694 with
695 bt_message_discarded_packets_borrow_beginning_default_clock_snapshot_const().
696 </dd>
697
698 <dt>
699 \anchor api-msg-disc-pkt-prop-cs-end
700 \bt_dt_opt End default \bt_cs
701 </dt>
702 <dd>
703 Snapshot of the message's \bt_stream's default clock which indicates
704 the end of the discarded packets time range.
705
706 A discarded packets message has an end default clock snapshot if:
707
708 - Its stream's \ref api-tir-stream-cls "class" has a
709 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class".
710
711 - For its stream's class,
712 \ref api-tir-stream-cls-prop-disc-pkt-cs "discarded packets have default clock snapshots".
713
714 If a discarded packets message has both a
715 \ref api-msg-disc-pkt-prop-cs-beg "beginning" and an end default
716 clock snapshots, the end default clock snapshot must be greater than
717 or equal to the beginning default clock snapshot.
718
719 Within its \bt_msg_iter's \ref api-msg-seq "message sequence",
720 the end default clock snapshot of a discarded packets message must
721 be greater than or equal to any clock snapshot of any previous
722 message.
723
724 Borrow a discarded packets message's end default clock snapshot with
725 bt_message_discarded_packets_borrow_end_default_clock_snapshot_const().
726 </dd>
727
728 <dt>
729 \anchor api-msg-disc-pkt-prop-count
730 \bt_dt_opt Discarded packet count
731 </dt>
732 <dd>
733 Exact number of discarded packets.
734
735 If this property is missing, then the number of discarded packets
736 is at least one.
737
738 Use bt_message_discarded_packets_set_count() and
739 bt_message_discarded_packets_get_count().
740 </dd>
741</dl>
742
743<h2>\anchor api-msg-inac Message iterator inactivity</h2>
744
745A <strong><em>message iterator inactivity message</em></strong>
746indicates that, within the \ref api-msg-seq "message sequence" of a
747given \bt_msg_iter, there's no messages since the last message (if any)
748until a given point in time.
749
750A message iterator inactivity message is the only type of message that's
751not related to a \bt_stream: it targets the whole message sequence of a
752message iterator, and can occur at any position within the sequence.
753
754This message is mostly significant for real-time message iterators: if a
755message iterator A indicates that there's no messages until a given
756point in time T, then a downstream filter message iterator B which
757relies on multiple upstream message iterators does not have to wait for
758new messages from A until T.
759
760In other words, a message iterator inactivity message can help
761downstream message iterators or \bt_p_sink_comp <em>progress</em>.
762
763Create a message iterator inactivity message with
764bt_message_message_iterator_inactivity_create(). You must pass a
765\bt_clock_cls and the value of a fictitious (clock) instance to this
766function so that it creates a \bt_cs.
767
768A message iterator inactivity message has the following property:
769
770<dl>
771 <dt>
772 \anchor api-msg-inac-prop-cs
773 \bt_dt_opt \bt_c_cs
774 </dt>
775 <dd>
776 Snapshot of a fictitious instance of the message's \bt_clock_cls
777 which indicates the point in time until when there's no messages
778 in the message iterator's \ref api-msg-seq "message sequence".
779
780 Within its \bt_msg_iter's message sequence, the clock snapshot of a
781 message iterator inactivity message must be greater than or equal to
782 any clock snapshot of any previous message.
783
784 Borrow a message iterator inactivity message's clock snapshot
785 with
786 bt_message_message_iterator_inactivity_borrow_clock_snapshot_const().
787 </dd>
788</dl>
789
790<h1>\anchor api-msg-mip Message Interchange Protocol</h1>
791
792The <em>Message Interchange Protocol</em> (MIP) is the system of rules
793used by \bt_p_comp and \bt_p_msg_iter to exchance messages within a
794trace processing graph.
795
796The MIP covers everything related to messages and what they contain, as
797well as how they are ordered within the \ref api-msg-seq "sequence" that
798a message iterator produces.
799
800For example:
801
802- A valid message sequence for a given \bt_stream starts with a
803 \bt_sb_msg and ends with a \bt_se_msg.
804
805- The maximum
806 \ref api-tir-fc-int-prop-size "field value range" for an \bt_uint_fc
807 is [0,&nbsp;2<sup>64</sup>&nbsp;-&nbsp;1].
808
809- The available message types are stream beginning and end, event,
810 packet beginning and end, discarded events and packets, and message
811 iterator inactivity.
812
813The MIP has a version which is a single major number, independent from
814the \bt_name project's version. As of \bt_name_version_min_maj, the only
815available MIP version is 0.
816
817If what the MIP covers changes in a breaking or semantical way in the
818future, the MIP and \bt_name's minor versions will be bumped.
819
820When you create a trace processing \bt_graph with bt_graph_create(), you
821must pass the effective MIP version to use. Then, the components you
822\ref api-graph-lc-add "add" to this graph can access this configured MIP
823version with bt_self_component_get_graph_mip_version() and behave
824accordingly. In other words, if the configured MIP version is 0, then a
825component cannot use features introduced by MIP version&nbsp;1. For
826example, should the project introduce a new type of \bt_fc, the MIP
827version would be bumped.
828
829A component which cannot honor a given MIP can fail at
830initialization time, making the corresponding
831<code>bt_graph_add_*_component*()</code> call fail too. To avoid any
832surprise, you can create a \bt_comp_descr_set with descriptors of the
833components you intend to add to a trace processing graph and call
834bt_get_greatest_operative_mip_version() to get the greatest (most
835recent) MIP version you can use.
836
837To get the library's latest MIP version, use
838bt_get_maximal_mip_version().
839
840The ultimate goal of the MIP version feature is for the \bt_name project
841to be able to introduce new features or even major breaking changes
842without breaking existing \bt_p_comp_cls. This is especially important
843considering that \bt_name supports \bt_p_plugin written by different
844authors. Of course one of the project's objectives is to bump the MIP
845version as rarely as possible. When it is required, though, it's a
846welcome tool to make the project evolve gracefully.
847
848The Message Interchange Protocol has no dedicated documentation as this
849very message module (and its submodules, like \ref api-tir)
850documentation is enough. You can consider that all the
851functions of the message and trace IR objects have an implicit MIP
852version \ref api-fund-pre-post "precondition". When a given
853function documentation does not explicitly document a MIP version
854precondition, it means that the effective MIP version has no effect on
855said function's behaviour.
856
857<h2>\anchor api-msg-seq Message sequence rules</h2>
858
859The purpose of a \bt_msg_iter is to iterate a sequence of messages.
860
861Those messages can be related to different \bt_p_stream:
862
863@image html trace-structure-msg-seq.png "Messages of multiple streams as a single message sequence for a given message iterator."
864
865However, for such a message sequence, the current \bt_mip
866(version \bt_max_mip_version) dictates that:
867
868<ul>
869 <li>
870 For a given \bt_stream:
871
872 - The sequence must begin with a \bt_sb_msg.
873 - The sequence must end with a \bt_se_msg.
874 - <strong>If the stream's \ref api-tir-stream-cls "class"
875 \ref api-tir-stream-cls-prop-supports-pkt "supports packets"</strong>:
876 - Any \bt_pb_msg must be followed with a \bt_pe_msg.
877 - All \bt_p_ev_msg must be between a packet beginning and a
878 packet end message.
879 - A \bt_disc_pkt_msg must be (one of):
880 - Before the first packet beginning message.
881 - Between a packet end message and a packet beginning message.
882 - After the last packet end message.
883
884 The rules above can be summarized by the following regular
885 expressions:
886
887 <dl>
888 <dt>Without packets</dt>
889 <dd>
890 @code{.unparsed}
891 SB (E | DE)* SE
892 @endcode
893 </dd>
894
895 <dt>With packets</dt>
896 <dd>
897 @code{.unparsed}
898 SB ((PB (E | DE)* PE) | DE | DP)* SE
899 @endcode
900 </dd>
901 </dl>
902
903 With this alphabet:
904
905 <dl>
906 <dt>SB</dt>
907 <dd>\bt_c_sb_msg</dd>
908
909 <dt>SE</dt>
910 <dd>\bt_c_se_msg</dd>
911
912 <dt>E</dt>
913 <dd>\bt_c_ev_msg</dd>
914
915 <dt>PB</dt>
916 <dd>\bt_c_pb_msg</dd>
917
918 <dt>PE</dt>
919 <dd>\bt_c_pe_msg</dd>
920
921 <dt>DE</dt>
922 <dd>\bt_c_disc_ev_msg</dd>
923
924 <dt>DP</dt>
925 <dd>\bt_c_disc_pkt_msg</dd>
926 </dl>
927 <li>
928 For a given message iterator, for any message with a \bt_cs, its
929 clock snapshot must be greater than or equal to any clock snapshot
930 of any previous message.
931
932 For the scope of this rule, the clock snapshot of a \bt_disc_ev_msg
933 or of a \bt_disc_pkt_msg is its beginning default clock snapshot.
934 <li>
935 For a given message iterator, the \bt_p_cs of all the messages of
936 the sequence with a clock snapshot must be correlatable
937 (see \ref api-tir-clock-cls-origin "Clock value vs. clock class origin").
938</ul>
939*/
940
941/*! @{ */
942
943/*!
944@name Type
945@{
946
947@typedef struct bt_message bt_message;
948
949@brief
950 Message.
951
952@}
953*/
954
955/*!
956@name Type query
957@{
958*/
959
960/*!
961@brief
962 Message type enumerators.
963*/
964typedef enum bt_message_type {
965 /*!
966 @brief
967 \bt_c_sb_msg.
968 */
969 BT_MESSAGE_TYPE_STREAM_BEGINNING = 1 << 0,
970
971 /*!
972 @brief
973 \bt_c_se_msg.
974 */
975 BT_MESSAGE_TYPE_STREAM_END = 1 << 1,
976
977 /*!
978 @brief
979 \bt_c_ev_msg.
980 */
981 BT_MESSAGE_TYPE_EVENT = 1 << 2,
982
983 /*!
984 @brief
985 \bt_c_pb_msg.
986 */
987 BT_MESSAGE_TYPE_PACKET_BEGINNING = 1 << 3,
988
989 /*!
990 @brief
991 \bt_c_pe_msg.
992 */
993 BT_MESSAGE_TYPE_PACKET_END = 1 << 4,
994
995 /*!
996 @brief
997 \bt_c_disc_ev_msg.
998 */
999 BT_MESSAGE_TYPE_DISCARDED_EVENTS = 1 << 5,
1000
1001 /*!
1002 @brief
1003 \bt_c_disc_pkt_msg.
1004 */
1005 BT_MESSAGE_TYPE_DISCARDED_PACKETS = 1 << 6,
1006
1007 /*!
1008 @brief
1009 \bt_c_inac_msg.
1010 */
1011 BT_MESSAGE_TYPE_MESSAGE_ITERATOR_INACTIVITY = 1 << 7,
1012} bt_message_type;
1013
1014/*!
1015@brief
1016 Returns the type enumerator of the message \bt_p{message}.
1017
1018@param[in] message
1019 Message of which to get the type enumerator
1020
1021@returns
1022 Type enumerator of \bt_p{message}.
1023
1024@bt_pre_not_null{message}
1025*/
1026extern bt_message_type bt_message_get_type(const bt_message *message);
1027
1028/*! @} */
1029
1030/*!
1031@name Common stream message
1032@{
1033*/
1034
1035/*!
1036@brief
1037 Return type of
1038 bt_message_stream_beginning_borrow_default_clock_snapshot_const()
1039 and
1040 bt_message_stream_end_borrow_default_clock_snapshot_const().
1041*/
1042typedef enum bt_message_stream_clock_snapshot_state {
1043 /*!
1044 @brief
1045 Known \bt_cs.
1046 */
1047 BT_MESSAGE_STREAM_CLOCK_SNAPSHOT_STATE_KNOWN = 1,
1048
1049 /*!
1050 @brief
1051 Unknown (no) \bt_cs.
1052 */
1053 BT_MESSAGE_STREAM_CLOCK_SNAPSHOT_STATE_UNKNOWN = 0,
1054} bt_message_stream_clock_snapshot_state;
1055
1056/*! @} */
1057
1058/*!
1059@name Stream beginning message
1060@{
1061*/
1062
1063/*!
1064@brief
1065 Creates a \bt_sb_msg for the \bt_stream \bt_p{stream} from the
1066 \bt_msg_iter \bt_p{self_message_iterator}.
1067
1068On success, the returned stream beginning message has the following
1069property values:
1070
1071<table>
1072 <tr>
1073 <th>Property
1074 <th>Value
1075 <tr>
1076 <td>\ref api-msg-sb-prop-stream "Stream"
1077 <td>\bt_p{stream}
1078 <tr>
1079 <td>\ref api-msg-sb-prop-cs "Default clock snapshot"
1080 <td>\em None
1081</table>
1082
1083@param[in] self_message_iterator
1084 Self message iterator from which to create the stream beginning
1085 message.
1086@param[in] stream
1087 Stream of which the message to create indicates the beginning.
1088
1089@returns
1090 New stream beginning message reference, or \c NULL on memory error.
1091
1092@bt_pre_not_null{self_message_iterator}
1093@bt_pre_not_null{stream}
1094
1095@bt_post_success_frozen{stream}
1096*/
1097extern
1098bt_message *bt_message_stream_beginning_create(
1099 bt_self_message_iterator *self_message_iterator,
1100 const bt_stream *stream);
1101
1102/*!
1103@brief
1104 Borrows the \bt_stream of the \bt_sb_msg \bt_p{message}.
1105
1106See the \ref api-msg-sb-prop-stream "stream" property.
1107
1108@param[in] message
1109 Stream beginning message from which to borrow the stream.
1110
1111@returns
1112 @parblock
1113 \em Borrowed reference of the stream of \bt_p{message}.
1114
1115 The returned pointer remains valid as long as \bt_p{message} exists.
1116 @endparblock
1117
1118@bt_pre_not_null{message}
1119@bt_pre_is_sb_msg{message}
1120
1121@sa bt_message_stream_beginning_borrow_stream_const() &mdash;
1122 \c const version of this function.
1123*/
1124extern bt_stream *bt_message_stream_beginning_borrow_stream(
1125 bt_message *message);
1126
1127/*!
1128@brief
1129 Borrows the \bt_stream of the \bt_sb_msg \bt_p{message}
1130 (\c const version).
1131
1132See bt_message_stream_beginning_borrow_stream().
1133*/
1134extern const bt_stream *bt_message_stream_beginning_borrow_stream_const(
1135 const bt_message *message);
1136
1137/*!
1138@brief
1139 Sets the value, in clock cycles, of the default \bt_cs of the
1140 \bt_sb_msg \bt_p{message} to \bt_p{value}.
1141
1142See the \ref api-msg-sb-prop-cs "default clock snapshot" property.
1143
1144@param[in] message
1145 Stream beginning message of which to set the default clock snapshot
1146 value to \bt_p{value}.
1147@param[in] value
1148 New value (clock cycles) of the default clock snapshot of
1149 \bt_p{message}.
1150
1151@bt_pre_not_null{message}
1152@bt_pre_hot{message}
1153@bt_pre_is_sb_msg{message}
1154@pre
1155 The \bt_stream_cls of \bt_p{message} has a
1156 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class".
1157
1158@sa bt_message_stream_beginning_borrow_default_clock_snapshot_const() &mdash;
1159 Borrows the default clock snapshot of a stream beginning message.
1160*/
1161extern
1162void bt_message_stream_beginning_set_default_clock_snapshot(
1163 bt_message *message, uint64_t value);
1164
1165/*!
1166@brief
1167 Borrows the default \bt_cs of the \bt_sb_msg \bt_p{message}.
1168
1169See the \ref api-msg-sb-prop-cs "default clock snapshot" property.
1170
1171@param[in] message
1172 Stream beginning message from which to borrow the default clock
1173 snapshot.
1174@param[out] clock_snapshot
1175 <strong>If this function returns
1176 #BT_MESSAGE_STREAM_CLOCK_SNAPSHOT_STATE_KNOWN</strong>,
1177 \bt_p{*clock_snapshot} is a \em borrowed reference of the default
1178 clock snapshot of \bt_p{message}.
1179
1180@retval #BT_MESSAGE_STREAM_CLOCK_SNAPSHOT_STATE_KNOWN
1181 The default clock snapshot of \bt_p{message} is known and returned
1182 as \bt_p{*clock_snapshot}.
1183@retval #BT_MESSAGE_STREAM_CLOCK_SNAPSHOT_STATE_UNKNOWN
1184 \bt_p{message} has no default clock snapshot: its time is unknown.
1185
1186@bt_pre_not_null{message}
1187@bt_pre_is_sb_msg{message}
1188@pre
1189 The \bt_stream_cls of \bt_p{message} has a
1190 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class".
1191@bt_pre_not_null{clock_snapshot}
1192
1193@sa bt_message_stream_beginning_set_default_clock_snapshot() &mdash;
1194 Sets the default clock snapshot of a stream beginning message.
1195*/
1196extern bt_message_stream_clock_snapshot_state
1197bt_message_stream_beginning_borrow_default_clock_snapshot_const(
1198 const bt_message *message,
1199 const bt_clock_snapshot **clock_snapshot);
1200
1201/*!
1202@brief
1203 Borrows the default \bt_clock_cls of the \bt_stream_cls
1204 of the \bt_sb_msg \bt_p{message}.
1205
1206See the stream class's
1207\ref api-tir-stream-cls-prop-def-clock-cls "default clock class"
1208property.
1209
1210This is a helper which is equivalent to
1211
1212@code
1213bt_stream_class_borrow_default_clock_class_const(
1214 bt_stream_borrow_class_const(
1215 bt_message_stream_beginning_borrow_stream_const(message)))
1216@endcode
1217
1218@param[in] message
1219 Stream beginning message from which to borrow its stream's class's
1220 default clock class.
1221
1222@returns
1223 \em Borrowed reference of the default clock class of
1224 the stream class of \bt_p{message}, or \c NULL if none.
1225
1226@bt_pre_not_null{message}
1227@bt_pre_is_sb_msg{message}
1228*/
1229extern const bt_clock_class *
1230bt_message_stream_beginning_borrow_stream_class_default_clock_class_const(
1231 const bt_message *message);
1232
1233/*! @} */
1234
1235/*!
1236@name Stream end message
1237@{
1238*/
1239
1240/*!
1241@brief
1242 Creates a \bt_se_msg for the \bt_stream \bt_p{stream} from the
1243 \bt_msg_iter \bt_p{self_message_iterator}.
1244
1245On success, the returned stream end message has the following
1246property values:
1247
1248<table>
1249 <tr>
1250 <th>Property
1251 <th>Value
1252 <tr>
1253 <td>\ref api-msg-se-prop-stream "Stream"
1254 <td>\bt_p{stream}
1255 <tr>
1256 <td>\ref api-msg-se-prop-cs "Default clock snapshot"
1257 <td>\em None
1258</table>
1259
1260@param[in] self_message_iterator
1261 Self message iterator from which to create the stream end
1262 message.
1263@param[in] stream
1264 Stream of which the message to create indicates the end.
1265
1266@returns
1267 New stream end message reference, or \c NULL on memory error.
1268
1269@bt_pre_not_null{self_message_iterator}
1270@bt_pre_not_null{stream}
1271
1272@bt_post_success_frozen{stream}
1273*/
1274extern
1275bt_message *bt_message_stream_end_create(
1276 bt_self_message_iterator *self_message_iterator,
1277 const bt_stream *stream);
1278
1279/*!
1280@brief
1281 Borrows the \bt_stream of the \bt_se_msg \bt_p{message}.
1282
1283See the \ref api-msg-se-prop-stream "stream" property.
1284
1285@param[in] message
1286 Stream end message from which to borrow the stream.
1287
1288@returns
1289 @parblock
1290 \em Borrowed reference of the stream of \bt_p{message}.
1291
1292 The returned pointer remains valid as long as \bt_p{message} exists.
1293 @endparblock
1294
1295@bt_pre_not_null{message}
1296@bt_pre_is_se_msg{message}
1297
1298@sa bt_message_stream_end_borrow_stream_const() &mdash;
1299 \c const version of this function.
1300*/
1301extern bt_stream *bt_message_stream_end_borrow_stream(
1302 bt_message *message);
1303
1304/*!
1305@brief
1306 Borrows the \bt_stream of the \bt_se_msg \bt_p{message}
1307 (\c const version).
1308
1309See bt_message_stream_end_borrow_stream().
1310*/
1311extern const bt_stream *bt_message_stream_end_borrow_stream_const(
1312 const bt_message *message);
1313
1314/*!
1315@brief
1316 Sets the value, in clock cycles, of the default \bt_cs of the
1317 \bt_se_msg \bt_p{message} to \bt_p{value}.
1318
1319See the \ref api-msg-se-prop-cs "default clock snapshot" property.
1320
1321@param[in] message
1322 Stream end message of which to set the default clock snapshot
1323 value to \bt_p{value}.
1324@param[in] value
1325 New value (clock cycles) of the default clock snapshot of
1326 \bt_p{message}.
1327
1328@bt_pre_not_null{message}
1329@bt_pre_hot{message}
1330@bt_pre_is_se_msg{message}
1331@pre
1332 The \bt_stream_cls of \bt_p{message} has a
1333 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class".
1334
1335@sa bt_message_stream_end_borrow_default_clock_snapshot_const() &mdash;
1336 Borrows the default clock snapshot of a stream end message.
1337*/
1338extern
1339void bt_message_stream_end_set_default_clock_snapshot(
1340 bt_message *message, uint64_t value);
1341
1342/*!
1343@brief
1344 Borrows the default \bt_cs of the \bt_se_msg \bt_p{message}.
1345
1346See the \ref api-msg-se-prop-cs "default clock snapshot" property.
1347
1348@param[in] message
1349 Stream end message from which to borrow the default clock
1350 snapshot.
1351@param[out] clock_snapshot
1352 <strong>If this function returns
1353 #BT_MESSAGE_STREAM_CLOCK_SNAPSHOT_STATE_KNOWN</strong>,
1354 \bt_p{*clock_snapshot} is a \em borrowed reference of the default
1355 clock snapshot of \bt_p{message}.
1356
1357@retval #BT_MESSAGE_STREAM_CLOCK_SNAPSHOT_STATE_KNOWN
1358 The default clock snapshot of \bt_p{message} is known and returned
1359 as \bt_p{*clock_snapshot}.
1360@retval #BT_MESSAGE_STREAM_CLOCK_SNAPSHOT_STATE_UNKNOWN
1361 \bt_p{message} has no default clock snapshot: its time is unknown.
1362
1363@bt_pre_not_null{message}
1364@bt_pre_is_se_msg{message}
1365@pre
1366 The \bt_stream_cls of \bt_p{message} has a
1367 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class".
1368@bt_pre_not_null{clock_snapshot}
1369
1370@sa bt_message_stream_end_set_default_clock_snapshot() &mdash;
1371 Sets the default clock snapshot of a stream end message.
1372*/
1373extern bt_message_stream_clock_snapshot_state
1374bt_message_stream_end_borrow_default_clock_snapshot_const(
1375 const bt_message *message,
1376 const bt_clock_snapshot **clock_snapshot);
1377
1378/*!
1379@brief
1380 Borrows the default \bt_clock_cls of the \bt_stream_cls
1381 of the \bt_se_msg \bt_p{message}.
1382
1383See the stream class's
1384\ref api-tir-stream-cls-prop-def-clock-cls "default clock class"
1385property.
1386
1387This is a helper which is equivalent to
1388
1389@code
1390bt_stream_class_borrow_default_clock_class_const(
1391 bt_stream_borrow_class_const(
1392 bt_message_stream_end_borrow_stream_const(message)))
1393@endcode
1394
1395@param[in] message
1396 Stream end message from which to borrow its stream's class's
1397 default clock class.
1398
1399@returns
1400 \em Borrowed reference of the default clock class of
1401 the stream class of \bt_p{message}, or \c NULL if none.
1402
1403@bt_pre_not_null{message}
1404@bt_pre_is_se_msg{message}
1405*/
1406extern const bt_clock_class *
1407bt_message_stream_end_borrow_stream_class_default_clock_class_const(
1408 const bt_message *message);
1409
1410/*! @} */
1411
1412/*!
1413@name Event message
1414@{
1415*/
1416
1417/*!
1418@brief
1419 Creates an \bt_ev_msg, having an instance of the \bt_ev_cls
1420 \bt_p{event_class}, for the \bt_stream \bt_p{stream} from the
1421 \bt_msg_iter \bt_p{self_message_iterator}.
1422
1423@attention
1424 @parblock
1425 Only use this function if
1426
1427 @code
1428 bt_stream_class_supports_packets(bt_stream_borrow_class_const(stream))
1429 @endcode
1430
1431 returns #BT_FALSE and
1432
1433 @code
1434 bt_stream_class_borrow_default_clock_class_const(bt_stream_borrow_class_const(stream))
1435 @endcode
1436
1437 returns \c NULL.
1438
1439 Otherwise, use
1440 bt_message_event_create_with_default_clock_snapshot(),
1441 bt_message_event_create_with_packet(), or
1442 bt_message_event_create_with_packet_and_default_clock_snapshot().
1443 @endparblock
1444
1445On success, the returned event message has the following property
1446values:
1447
1448<table>
1449 <tr>
1450 <th>Property
1451 <th>Value
1452 <tr>
1453 <td>\ref api-msg-ev-prop-ev "Event"
1454 <td>
1455 An instance (with \bt_p_field that are not set) of
1456 \bt_p{event_class}.
1457 <tr>
1458 <td>\ref api-msg-se-prop-cs "Default clock snapshot"
1459 <td>\em None
1460</table>
1461
1462@param[in] self_message_iterator
1463 Self message iterator from which to create the event message.
1464@param[in] event_class
1465 Class of the \bt_ev of the message to create.
1466@param[in] stream
1467 Stream conceptually containing the event of the message to create.
1468
1469@returns
1470 New event message reference, or \c NULL on memory error.
1471
1472@bt_pre_not_null{self_message_iterator}
1473@pre
1474 The \bt_stream_cls of \bt_p{event_class} is also the class of
1475 \bt_p{stream}, that is,
1476 <code>bt_event_class_borrow_stream_class_const(event_class)</code>
1477 and
1478 <code>bt_stream_borrow_class_const(stream)</code> have the
1479 same value.
1480@bt_pre_not_null{stream}
1481@pre
1482 <code>bt_stream_class_supports_packets(bt_stream_borrow_class_const(stream))</code>
1483 returns #BT_FALSE.
1484@pre
1485 <code>bt_stream_class_borrow_default_clock_class_const(bt_stream_borrow_class_const(stream))</code>
1486 returns \c NULL.
1487
1488@bt_post_success_frozen{event_class}
1489@bt_post_success_frozen{stream}
1490*/
1491extern
1492bt_message *bt_message_event_create(
1493 bt_self_message_iterator *self_message_iterator,
1494 const bt_event_class *event_class,
1495 const bt_stream *stream);
1496
1497/*!
1498@brief
1499 Creates an \bt_ev_msg, having an instance of the \bt_ev_cls
1500 \bt_p{event_class} and a default \bt_cs with the value
1501 \bt_p{clock_snapshot_value}, for the \bt_stream \bt_p{stream} from
1502 the \bt_msg_iter \bt_p{self_message_iterator}.
1503
1504@attention
1505 @parblock
1506 Only use this function if
1507
1508 @code
1509 bt_stream_class_supports_packets(bt_stream_borrow_class_const(stream))
1510 @endcode
1511
1512 returns #BT_FALSE and
1513
1514 @code
1515 bt_stream_class_borrow_default_clock_class_const(bt_stream_borrow_class_const(stream))
1516 @endcode
1517
1518 does \em not return \c NULL.
1519
1520 Otherwise, use
1521 bt_message_event_create(),
1522 bt_message_event_create_with_packet(), or
1523 bt_message_event_create_with_packet_and_default_clock_snapshot().
1524 @endparblock
1525
1526On success, the returned event message has the following property
1527values:
1528
1529<table>
1530 <tr>
1531 <th>Property
1532 <th>Value
1533 <tr>
1534 <td>\ref api-msg-ev-prop-ev "Event"
1535 <td>
1536 An instance (with \bt_p_field that are not set) of
1537 \bt_p{event_class}.
1538 <tr>
1539 <td>\ref api-msg-se-prop-cs "Default clock snapshot"
1540 <td>\bt_c_cs with the value \bt_p{clock_snapshot_value}.
1541</table>
1542
1543@param[in] self_message_iterator
1544 Self message iterator from which to create the event message.
1545@param[in] event_class
1546 Class of the \bt_ev of the message to create.
1547@param[in] stream
1548 Stream conceptually containing the event of the message to create.
1549@param[in] clock_snapshot_value
1550 Value (clock cycles) of the default clock snapshot of
1551 \bt_p{message}.
1552
1553@returns
1554 New event message reference, or \c NULL on memory error.
1555
1556@bt_pre_not_null{self_message_iterator}
1557@pre
1558 The \bt_stream_cls of \bt_p{event_class} is also the class of
1559 \bt_p{stream}, that is,
1560 <code>bt_event_class_borrow_stream_class_const(event_class)</code>
1561 and
1562 <code>bt_stream_borrow_class_const(stream)</code> have the
1563 same value.
1564@bt_pre_not_null{stream}
1565@pre
1566 <code>bt_stream_class_supports_packets(bt_stream_borrow_class_const(stream))</code>
1567 returns #BT_FALSE.
1568@pre
1569 <code>bt_stream_class_borrow_default_clock_class_const(bt_stream_borrow_class_const(stream))</code>
1570 does \em not return \c NULL.
1571
1572@bt_post_success_frozen{event_class}
1573@bt_post_success_frozen{stream}
1574*/
1575extern
1576bt_message *bt_message_event_create_with_default_clock_snapshot(
1577 bt_self_message_iterator *self_message_iterator,
1578 const bt_event_class *event_class,
1579 const bt_stream *stream, uint64_t clock_snapshot_value);
1580
1581/*!
1582@brief
1583 Creates an \bt_ev_msg, having an instance of the \bt_ev_cls
1584 \bt_p{event_class}, for the \bt_pkt \bt_p{packet} from the
1585 \bt_msg_iter \bt_p{self_message_iterator}.
1586
1587@attention
1588 @parblock
1589 Only use this function if
1590
1591 @code
1592 bt_stream_class_supports_packets(
1593 bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet)))
1594 @endcode
1595
1596 returns #BT_TRUE and
1597
1598 @code
1599 bt_stream_class_borrow_default_clock_class_const(
1600 bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet)))
1601 @endcode
1602
1603 returns \c NULL.
1604
1605 Otherwise, use
1606 bt_message_event_create(),
1607 bt_message_event_create_with_default_clock_snapshot(), or
1608 bt_message_event_create_with_packet_and_default_clock_snapshot().
1609 @endparblock
1610
1611On success, the returned event message has the following property
1612values:
1613
1614<table>
1615 <tr>
1616 <th>Property
1617 <th>Value
1618 <tr>
1619 <td>\ref api-msg-ev-prop-ev "Event"
1620 <td>
1621 An instance (with \bt_p_field that are not set) of
1622 \bt_p{event_class}.
1623 <tr>
1624 <td>\ref api-msg-se-prop-cs "Default clock snapshot"
1625 <td>\em None
1626</table>
1627
1628@param[in] self_message_iterator
1629 Self message iterator from which to create the event message.
1630@param[in] event_class
1631 Class of the \bt_ev of the message to create.
1632@param[in] packet
1633 Packet conceptually containing the event of the message to create.
1634
1635@returns
1636 New event message reference, or \c NULL on memory error.
1637
1638@bt_pre_not_null{self_message_iterator}
1639@pre
1640 The \bt_stream_cls of \bt_p{event_class} is also the stream class of
1641 \bt_p{packet}, that is,
1642 <code>bt_event_class_borrow_stream_class_const(event_class)</code>
1643 and
1644 <code>bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet))</code>
1645 have the same value.
1646@bt_pre_not_null{packet}
1647@pre
1648 <code>bt_stream_class_supports_packets(bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet)))</code>
1649 returns #BT_TRUE.
1650@pre
1651 <code>bt_stream_class_borrow_default_clock_class_const(bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet)))</code>
1652 returns \c NULL.
1653@pre
1654 The \ref api-tir-pkt-prop-ctx "context field" of \bt_p{packet}, if
1655 any, and all its contained \bt_p_field, recursively, are set.
1656
1657@bt_post_success_frozen{event_class}
1658@bt_post_success_frozen{packet}
1659*/
1660extern
1661bt_message *bt_message_event_create_with_packet(
1662 bt_self_message_iterator *self_message_iterator,
1663 const bt_event_class *event_class,
1664 const bt_packet *packet);
1665
1666/*!
1667@brief
1668 Creates an \bt_ev_msg, having an instance of the \bt_ev_cls
1669 \bt_p{event_class} and a default \bt_cs with the value
1670 \bt_p{clock_snapshot_value}, for the \bt_pkt \bt_p{packet} from
1671 the \bt_msg_iter \bt_p{self_message_iterator}.
1672
1673@attention
1674 @parblock
1675 Only use this function if
1676
1677 @code
1678 bt_stream_class_supports_packets(
1679 bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet)))
1680 @endcode
1681
1682 returns #BT_TRUE and
1683
1684 @code
1685 bt_stream_class_borrow_default_clock_class_const(
1686 bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet)))
1687 @endcode
1688
1689 does \em not return \c NULL.
1690
1691 Otherwise, use
1692 bt_message_event_create(),
1693 bt_message_event_create_with_default_clock_snapshot(), or
1694 bt_message_event_create_with_packet().
1695 @endparblock
1696
1697On success, the returned event message has the following property
1698values:
1699
1700<table>
1701 <tr>
1702 <th>Property
1703 <th>Value
1704 <tr>
1705 <td>\ref api-msg-ev-prop-ev "Event"
1706 <td>
1707 An instance (with \bt_p_field that are not set) of
1708 \bt_p{event_class}.
1709 <tr>
1710 <td>\ref api-msg-se-prop-cs "Default clock snapshot"
1711 <td>\bt_c_cs with the value \bt_p{clock_snapshot_value}.
1712</table>
1713
1714@param[in] self_message_iterator
1715 Self message iterator from which to create the event message.
1716@param[in] event_class
1717 Class of the \bt_ev of the message to create.
1718@param[in] packet
1719 Packet conceptually containing the event of the message to create.
1720@param[in] clock_snapshot_value
1721 Value (clock cycles) of the default clock snapshot of
1722 \bt_p{message}.
1723
1724@returns
1725 New event message reference, or \c NULL on memory error.
1726
1727@bt_pre_not_null{self_message_iterator}
1728@pre
1729 The \bt_stream_cls of \bt_p{event_class} is also the stream class of
1730 \bt_p{packet}, that is,
1731 <code>bt_event_class_borrow_stream_class_const(event_class)</code>
1732 and
1733 <code>bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet))</code>
1734 have the same value.
1735@bt_pre_not_null{packet}
1736@pre
1737 <code>bt_stream_class_supports_packets(bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet)))</code>
1738 returns #BT_TRUE.
1739@pre
1740 <code>bt_stream_class_borrow_default_clock_class_const(bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet)))</code>
1741 does \em not return \c NULL.
1742@pre
1743 The \ref api-tir-pkt-prop-ctx "context field" of \bt_p{packet}, if
1744 any, and all its contained \bt_p_field, recursively, are set.
1745
1746@bt_post_success_frozen{event_class}
1747@bt_post_success_frozen{stream}
1748*/
1749extern
1750bt_message *bt_message_event_create_with_packet_and_default_clock_snapshot(
1751 bt_self_message_iterator *self_message_iterator,
1752 const bt_event_class *event_class,
1753 const bt_packet *packet, uint64_t clock_snapshot_value);
1754
1755/*!
1756@brief
1757 Borrows the \bt_ev of the \bt_ev_msg \bt_p{message}.
1758
1759See the \ref api-msg-ev-prop-ev "event" property.
1760
1761@param[in] message
1762 Event message from which to borrow the event.
1763
1764@returns
1765 @parblock
1766 \em Borrowed reference of the event of \bt_p{message}.
1767
1768 The returned pointer remains valid as long as \bt_p{message} exists.
1769 @endparblock
1770
1771@bt_pre_not_null{message}
1772@bt_pre_is_ev_msg{message}
1773
1774@sa bt_message_event_borrow_event_const() &mdash;
1775 \c const version of this function.
1776*/
1777extern bt_event *bt_message_event_borrow_event(
1778 bt_message *message);
1779
1780/*!
1781@brief
1782 Borrows the \bt_ev of the \bt_ev_msg \bt_p{message}
1783 (\c const version).
1784
1785See bt_message_event_borrow_event().
1786*/
1787extern const bt_event *bt_message_event_borrow_event_const(
1788 const bt_message *message);
1789
1790/*!
1791@brief
1792 Borrows the default \bt_cs of the \bt_ev_msg \bt_p{message}.
1793
1794See the \ref api-msg-ev-prop-cs "default clock snapshot" property.
1795
1796@param[in] message
1797 Event message from which to borrow the default clock snapshot.
1798
1799@returns
1800 Default clock snapshot of \bt_p{message}.
1801
1802@bt_pre_not_null{message}
1803@bt_pre_is_ev_msg{message}
1804@pre
1805 The \bt_stream_cls of \bt_p{message} has a
1806 \ref api-tir-stream-cls-prop-def-clock-cls "default clock class".
1807*/
1808extern const bt_clock_snapshot *
1809bt_message_event_borrow_default_clock_snapshot_const(const bt_message *message);
1810
1811/*!
1812@brief
1813 Borrows the default \bt_clock_cls of the \bt_stream_cls
1814 of the \bt_ev_msg \bt_p{message}.
1815
1816See the stream class's
1817\ref api-tir-stream-cls-prop-def-clock-cls "default clock class"
1818property.
1819
1820This is a helper which is equivalent to
1821
1822@code
1823bt_stream_class_borrow_default_clock_class_const(
1824 bt_stream_borrow_class_const(
1825 bt_event_borrow_stream_const(
1826 bt_message_event_borrow_event_const(message))))
1827@endcode
1828
1829@param[in] message
1830 Event message from which to borrow its stream's class's
1831 default clock class.
1832
1833@returns
1834 \em Borrowed reference of the default clock class of
1835 the stream class of \bt_p{message}, or \c NULL if none.
1836
1837@bt_pre_not_null{message}
1838@bt_pre_is_ev_msg{message}
1839*/
1840extern const bt_clock_class *
1841bt_message_event_borrow_stream_class_default_clock_class_const(
1842 const bt_message *message);
1843
1844/*! @} */
1845
1846/*!
1847@name Packet beginning message
1848@{
1849*/
1850
1851/*!
1852@brief
1853 Creates a \bt_pb_msg for the \bt_pkt \bt_p{packet} from the
1854 \bt_msg_iter \bt_p{self_message_iterator}.
1855
1856@attention
1857 @parblock
1858 Only use this function if
1859
1860 @code
1861 bt_stream_class_packets_have_beginning_default_clock_snapshot(
1862 bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet)))
1863 @endcode
1864
1865 returns #BT_FALSE.
1866
1867 Otherwise, use
1868 bt_message_packet_beginning_create_with_default_clock_snapshot().
1869 @endparblock
1870
1871On success, the returned packet beginning message has the following
1872property values:
1873
1874<table>
1875 <tr>
1876 <th>Property
1877 <th>Value
1878 <tr>
1879 <td>\ref api-msg-pb-prop-pkt "Packet"
1880 <td>\bt_p{packet}
1881 <tr>
1882 <td>\ref api-msg-pb-prop-cs "Default clock snapshot"
1883 <td>\em None
1884</table>
1885
1886@param[in] self_message_iterator
1887 Self message iterator from which to create the packet beginning
1888 message.
1889@param[in] packet
1890 Packet of which the message to create indicates the beginning.
1891
1892@returns
1893 New packet beginning message reference, or \c NULL on memory error.
1894
1895@bt_pre_not_null{self_message_iterator}
1896@bt_pre_not_null{packet}
1897@pre
1898 bt_stream_class_packets_have_beginning_default_clock_snapshot()
1899 returns #BT_FALSE for
1900 <code>bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet))</code>.
1901@pre
1902 The \ref api-tir-pkt-prop-ctx "context field" of \bt_p{packet}, if
1903 any, and all its contained \bt_p_field, recursively, are set.
1904
1905@bt_post_success_frozen{packet}
1906*/
1907extern
1908bt_message *bt_message_packet_beginning_create(
1909 bt_self_message_iterator *self_message_iterator,
1910 const bt_packet *packet);
1911
1912/*!
1913@brief
1914 Creates a \bt_pb_msg having a default \bt_cs with the value
1915 \bt_p{clock_snapshot_value} for the \bt_pkt \bt_p{packet} from the
1916 \bt_msg_iter \bt_p{self_message_iterator}.
1917
1918@attention
1919 @parblock
1920 Only use this function if
1921
1922 @code
1923 bt_stream_class_packets_have_beginning_default_clock_snapshot(
1924 bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet)))
1925 @endcode
1926
1927 returns #BT_TRUE.
1928
1929 Otherwise, use
1930 bt_message_packet_beginning_create().
1931 @endparblock
1932
1933On success, the returned packet beginning message has the following
1934property values:
1935
1936<table>
1937 <tr>
1938 <th>Property
1939 <th>Value
1940 <tr>
1941 <td>\ref api-msg-pb-prop-pkt "Packet"
1942 <td>\bt_p{packet}
1943 <tr>
1944 <td>\ref api-msg-pb-prop-cs "Default clock snapshot"
1945 <td>\bt_c_cs with the value \bt_p{clock_snapshot_value}.
1946</table>
1947
1948@param[in] self_message_iterator
1949 Self message iterator from which to create the packet beginning
1950 message.
1951@param[in] packet
1952 Packet of which the message to create indicates the beginning.
1953@param[in] clock_snapshot_value
1954 Value (clock cycles) of the default clock snapshot of
1955 \bt_p{message}.
1956
1957@returns
1958 New packet beginning message reference, or \c NULL on memory error.
1959
1960@bt_pre_not_null{self_message_iterator}
1961@bt_pre_not_null{packet}
1962@pre
1963 bt_stream_class_packets_have_beginning_default_clock_snapshot()
1964 returns #BT_TRUE for
1965 <code>bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet))</code>.
1966@pre
1967 The \ref api-tir-pkt-prop-ctx "context field" of \bt_p{packet}, if
1968 any, and all its contained \bt_p_field, recursively, are set.
1969
1970@bt_post_success_frozen{packet}
1971*/
1972extern
1973bt_message *bt_message_packet_beginning_create_with_default_clock_snapshot(
1974 bt_self_message_iterator *self_message_iterator,
1975 const bt_packet *packet, uint64_t clock_snapshot_value);
1976
1977/*!
1978@brief
1979 Borrows the \bt_pkt of the \bt_pb_msg \bt_p{message}.
1980
1981See the \ref api-msg-pb-prop-pkt "packet" property.
1982
1983@param[in] message
1984 Packet beginning message from which to borrow the packet.
1985
1986@returns
1987 @parblock
1988 \em Borrowed reference of the packet of \bt_p{message}.
1989
1990 The returned pointer remains valid as long as \bt_p{message} exists.
1991 @endparblock
1992
1993@bt_pre_not_null{message}
1994@bt_pre_is_pb_msg{message}
1995
1996@sa bt_message_packet_beginning_borrow_packet_const() &mdash;
1997 \c const version of this function.
1998*/
1999extern bt_packet *bt_message_packet_beginning_borrow_packet(
2000 bt_message *message);
2001
2002/*!
2003@brief
2004 Borrows the \bt_pkt of the \bt_pb_msg \bt_p{message}
2005 (\c const version).
2006
2007See bt_message_packet_beginning_borrow_packet().
2008*/
2009extern const bt_packet *bt_message_packet_beginning_borrow_packet_const(
2010 const bt_message *message);
2011
2012/*!
2013@brief
2014 Borrows the default \bt_cs of the \bt_pb_msg \bt_p{message}.
2015
2016See the \ref api-msg-pb-prop-cs "default clock snapshot" property.
2017
2018@param[in] message
2019 Packet beginning message from which to borrow the default clock
2020 snapshot.
2021
2022@returns
2023 Default clock snapshot of \bt_p{message}.
2024
2025@bt_pre_not_null{message}
2026@bt_pre_is_pb_msg{message}
2027@pre
2028 The packets of the \bt_stream_cls of \bt_p{message}
2029 \ref api-tir-stream-cls-prop-pkt-beg-cs "have a beginning default clock snapshot".
2030*/
2031extern const bt_clock_snapshot *
2032bt_message_packet_beginning_borrow_default_clock_snapshot_const(
2033 const bt_message *message);
2034
2035/*!
2036@brief
2037 Borrows the default \bt_clock_cls of the \bt_stream_cls
2038 of the \bt_pb_msg \bt_p{message}.
2039
2040See the stream class's
2041\ref api-tir-stream-cls-prop-def-clock-cls "default clock class"
2042property.
2043
2044This is a helper which is equivalent to
2045
2046@code
2047bt_stream_class_borrow_default_clock_class_const(
2048 bt_stream_borrow_class_const(
2049 bt_packet_borrow_stream_const(
2050 bt_message_packet_beginning_borrow_packet_const(message))))
2051@endcode
2052
2053@param[in] message
2054 Packet beginning message from which to borrow its stream's class's
2055 default clock class.
2056
2057@returns
2058 \em Borrowed reference of the default clock class of
2059 the stream class of \bt_p{message}, or \c NULL if none.
2060
2061@bt_pre_not_null{message}
2062@bt_pre_is_pb_msg{message}
2063*/
2064extern const bt_clock_class *
2065bt_message_packet_beginning_borrow_stream_class_default_clock_class_const(
2066 const bt_message *message);
2067
2068/*! @} */
2069
2070/*!
2071@name Packet end message
2072@{
2073*/
2074
2075/*!
2076@brief
2077 Creates a \bt_pe_msg for the \bt_pkt \bt_p{packet} from the
2078 \bt_msg_iter \bt_p{self_message_iterator}.
2079
2080@attention
2081 @parblock
2082 Only use this function if
2083
2084 @code
2085 bt_stream_class_packets_have_end_default_clock_snapshot(
2086 bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet)))
2087 @endcode
2088
2089 returns #BT_FALSE.
2090
2091 Otherwise, use
2092 bt_message_packet_end_create_with_default_clock_snapshot().
2093 @endparblock
2094
2095On success, the returned packet end message has the following
2096property values:
2097
2098<table>
2099 <tr>
2100 <th>Property
2101 <th>Value
2102 <tr>
2103 <td>\ref api-msg-pe-prop-pkt "Packet"
2104 <td>\bt_p{packet}
2105 <tr>
2106 <td>\ref api-msg-pe-prop-cs "Default clock snapshot"
2107 <td>\em None
2108</table>
2109
2110@param[in] self_message_iterator
2111 Self message iterator from which to create the packet end message.
2112@param[in] packet
2113 Packet of which the message to create indicates the end.
2114
2115@returns
2116 New packet end message reference, or \c NULL on memory error.
2117
2118@bt_pre_not_null{self_message_iterator}
2119@bt_pre_not_null{packet}
2120@pre
2121 bt_stream_class_packets_have_end_default_clock_snapshot()
2122 returns #BT_FALSE for
2123 <code>bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet))</code>.
2124@pre
2125 The \ref api-tir-pkt-prop-ctx "context field" of \bt_p{packet}, if
2126 any, and all its contained \bt_p_field, recursively, are set.
2127
2128@bt_post_success_frozen{packet}
2129*/
2130extern
2131bt_message *bt_message_packet_end_create(
2132 bt_self_message_iterator *self_message_iterator,
2133 const bt_packet *packet);
2134
2135/*!
2136@brief
2137 Creates a \bt_pe_msg having a default \bt_cs with the value
2138 \bt_p{clock_snapshot_value} for the \bt_pkt \bt_p{packet} from the
2139 \bt_msg_iter \bt_p{self_message_iterator}.
2140
2141@attention
2142 @parblock
2143 Only use this function if
2144
2145 @code
2146 bt_stream_class_packets_have_end_default_clock_snapshot(
2147 bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet)))
2148 @endcode
2149
2150 returns #BT_TRUE.
2151
2152 Otherwise, use
2153 bt_message_packet_end_create().
2154 @endparblock
2155
2156On success, the returned packet end message has the following
2157property values:
2158
2159<table>
2160 <tr>
2161 <th>Property
2162 <th>Value
2163 <tr>
2164 <td>\ref api-msg-pe-prop-pkt "Packet"
2165 <td>\bt_p{packet}
2166 <tr>
2167 <td>\ref api-msg-pe-prop-cs "Default clock snapshot"
2168 <td>\bt_c_cs with the value \bt_p{clock_snapshot_value}.
2169</table>
2170
2171@param[in] self_message_iterator
2172 Self message iterator from which to create the packet end
2173 message.
2174@param[in] packet
2175 Packet of which the message to create indicates the end.
2176@param[in] clock_snapshot_value
2177 Value (clock cycles) of the default clock snapshot of
2178 \bt_p{message}.
2179
2180@returns
2181 New packet end message reference, or \c NULL on memory error.
2182
2183@bt_pre_not_null{self_message_iterator}
2184@bt_pre_not_null{packet}
2185@pre
2186 bt_stream_class_packets_have_end_default_clock_snapshot()
2187 returns #BT_TRUE for
2188 <code>bt_stream_borrow_class_const(bt_packet_borrow_stream_const(packet))</code>.
2189@pre
2190 The \ref api-tir-pkt-prop-ctx "context field" of \bt_p{packet}, if
2191 any, and all its contained \bt_p_field, recursively, are set.
2192
2193@bt_post_success_frozen{packet}
2194*/
2195extern
2196bt_message *bt_message_packet_end_create_with_default_clock_snapshot(
2197 bt_self_message_iterator *self_message_iterator,
2198 const bt_packet *packet, uint64_t clock_snapshot_value);
2199
2200/*!
2201@brief
2202 Borrows the \bt_pkt of the \bt_pe_msg \bt_p{message}.
2203
2204See the \ref api-msg-pe-prop-pkt "packet" property.
2205
2206@param[in] message
2207 Packet end message from which to borrow the packet.
2208
2209@returns
2210 @parblock
2211 \em Borrowed reference of the packet of \bt_p{message}.
2212
2213 The returned pointer remains valid as long as \bt_p{message} exists.
2214 @endparblock
2215
2216@bt_pre_not_null{message}
2217@bt_pre_is_pe_msg{message}
2218
2219@sa bt_message_packet_end_borrow_packet_const() &mdash;
2220 \c const version of this function.
2221*/
2222extern bt_packet *bt_message_packet_end_borrow_packet(
2223 bt_message *message);
2224
2225/*!
2226@brief
2227 Borrows the \bt_pkt of the \bt_pe_msg \bt_p{message}
2228 (\c const version).
2229
2230See bt_message_packet_end_borrow_packet().
2231*/
2232extern const bt_packet *bt_message_packet_end_borrow_packet_const(
2233 const bt_message *message);
2234
2235/*!
2236@brief
2237 Borrows the default \bt_cs of the \bt_pe_msg \bt_p{message}.
2238
2239See the \ref api-msg-pe-prop-cs "default clock snapshot" property.
2240
2241@param[in] message
2242 Packet end message from which to borrow the default clock
2243 snapshot.
2244
2245@returns
2246 Default clock snapshot of \bt_p{message}.
2247
2248@bt_pre_not_null{message}
2249@bt_pre_is_pe_msg{message}
2250@pre
2251 The packets of the \bt_stream_cls of \bt_p{message}
2252 \ref api-tir-stream-cls-prop-pkt-end-cs "have an end default clock snapshot".
2253*/
2254extern const bt_clock_snapshot *
2255bt_message_packet_end_borrow_default_clock_snapshot_const(
2256 const bt_message *message);
2257
2258/*!
2259@brief
2260 Borrows the default \bt_clock_cls of the \bt_stream_cls
2261 of the \bt_pe_msg \bt_p{message}.
2262
2263See the stream class's
2264\ref api-tir-stream-cls-prop-def-clock-cls "default clock class"
2265property.
2266
2267This is a helper which is equivalent to
2268
2269@code
2270bt_stream_class_borrow_default_clock_class_const(
2271 bt_stream_borrow_class_const(
2272 bt_packet_borrow_stream_const(
2273 bt_message_packet_end_borrow_packet_const(message))))
2274@endcode
2275
2276@param[in] message
2277 Packet end message from which to borrow its stream's class's
2278 default clock class.
2279
2280@returns
2281 \em Borrowed reference of the default clock class of
2282 the stream class of \bt_p{message}, or \c NULL if none.
2283
2284@bt_pre_not_null{message}
2285@bt_pre_is_pe_msg{message}
2286*/
2287extern const bt_clock_class *
2288bt_message_packet_end_borrow_stream_class_default_clock_class_const(
2289 const bt_message *message);
2290
2291/*! @} */
2292
2293/*!
2294@name Discarded events message
2295@{
2296*/
2297
2298/*!
2299@brief
2300 Creates a \bt_disc_ev_msg for the \bt_stream \bt_p{stream} from the
2301 \bt_msg_iter \bt_p{self_message_iterator}.
2302
2303@attention
2304 @parblock
2305 Only use this function if
2306
2307 @code
2308 bt_stream_class_discarded_events_have_default_clock_snapshots(
2309 bt_stream_borrow_class_const(stream))
2310 @endcode
2311
2312 returns #BT_FALSE.
2313
2314 Otherwise, use
2315 bt_message_discarded_events_create_with_default_clock_snapshots().
2316 @endparblock
2317
2318On success, the returned discarded events message has the following
2319property values:
2320
2321<table>
2322 <tr>
2323 <th>Property
2324 <th>Value
2325 <tr>
2326 <td>\ref api-msg-disc-ev-prop-stream "Stream"
2327 <td>\bt_p{stream}
2328 <tr>
2329 <td>\ref api-msg-disc-ev-prop-cs-beg "Beginning default clock snapshot"
2330 <td>\em None
2331 <tr>
2332 <td>\ref api-msg-disc-ev-prop-cs-end "End default clock snapshot"
2333 <td>\em None
2334 <tr>
2335 <td>\ref api-msg-disc-ev-prop-count "Discarded event count"
2336 <td>\em None
2337</table>
2338
2339@param[in] self_message_iterator
2340 Self message iterator from which to create the discarded events
2341 message.
2342@param[in] stream
2343 Stream from which the events were discarded.
2344
2345@returns
2346 New discarded events message reference, or \c NULL on memory error.
2347
2348@bt_pre_not_null{self_message_iterator}
2349@bt_pre_not_null{stream}
2350@pre
2351 <code>bt_stream_class_discarded_events_have_default_clock_snapshots(bt_stream_borrow_class_const(stream))</code>
2352 returns #BT_FALSE.
2353
2354@bt_post_success_frozen{stream}
2355*/
2356extern bt_message *bt_message_discarded_events_create(
2357 bt_self_message_iterator *self_message_iterator,
2358 const bt_stream *stream);
2359
2360/*!
2361@brief
2362 Creates a \bt_disc_ev_msg having the beginning and end default
2363 \bt_p_cs with the values \bt_p{beginning_clock_snapshot_value} and
2364 \bt_p{end_clock_snapshot_value} for the \bt_stream \bt_p{stream}
2365 from the \bt_msg_iter \bt_p{self_message_iterator}.
2366
2367@attention
2368 @parblock
2369 Only use this function if
2370
2371 @code
2372 bt_stream_class_discarded_events_have_default_clock_snapshots(
2373 bt_stream_borrow_class_const(stream))
2374 @endcode
2375
2376 returns #BT_TRUE.
2377
2378 Otherwise, use
2379 bt_message_discarded_events_create().
2380 @endparblock
2381
2382On success, the returned discarded events message has the following
2383property values:
2384
2385<table>
2386 <tr>
2387 <th>Property
2388 <th>Value
2389 <tr>
2390 <td>\ref api-msg-disc-ev-prop-stream "Stream"
2391 <td>\bt_p{stream}
2392 <tr>
2393 <td>\ref api-msg-disc-ev-prop-cs-beg "Beginning default clock snapshot"
2394 <td>\bt_c_cs with the value \bt_p{beginning_clock_snapshot_value}.
2395 <tr>
2396 <td>\ref api-msg-disc-ev-prop-cs-end "End default clock snapshot"
2397 <td>\bt_c_cs with the value \bt_p{end_clock_snapshot_value}.
2398 <tr>
2399 <td>\ref api-msg-disc-ev-prop-count "Discarded event count"
2400 <td>\em None
2401</table>
2402
2403@param[in] self_message_iterator
2404 Self message iterator from which to create the discarded events
2405 message.
2406@param[in] stream
2407 Stream from which the events were discarded.
2408@param[in] beginning_clock_snapshot_value
2409 Value (clock cycles) of the beginning default clock snapshot of
2410 \bt_p{message}.
2411@param[in] end_clock_snapshot_value
2412 Value (clock cycles) of the end default clock snapshot of
2413 \bt_p{message}.
2414
2415@returns
2416 New discarded events message reference, or \c NULL on memory error.
2417
2418@bt_pre_not_null{self_message_iterator}
2419@bt_pre_not_null{stream}
2420@pre
2421 <code>bt_stream_class_discarded_events_have_default_clock_snapshots(bt_stream_borrow_class_const(stream))</code>
2422 returns #BT_TRUE.
2423
2424@bt_post_success_frozen{stream}
2425*/
2426extern bt_message *bt_message_discarded_events_create_with_default_clock_snapshots(
2427 bt_self_message_iterator *self_message_iterator,
2428 const bt_stream *stream,
2429 uint64_t beginning_clock_snapshot_value,
2430 uint64_t end_clock_snapshot_value);
2431
2432/*!
2433@brief
2434 Borrows the \bt_stream of the \bt_disc_ev_msg \bt_p{message}.
2435
2436See the \ref api-msg-disc-ev-prop-stream "stream" property.
2437
2438@param[in] message
2439 Discarded events message from which to borrow the stream.
2440
2441@returns
2442 @parblock
2443 \em Borrowed reference of the stream of \bt_p{message}.
2444
2445 The returned pointer remains valid as long as \bt_p{message} exists.
2446 @endparblock
2447
2448@bt_pre_not_null{message}
2449@bt_pre_is_disc_ev_msg{message}
2450
2451@sa bt_message_discarded_events_borrow_stream_const() &mdash;
2452 \c const version of this function.
2453*/
2454extern bt_stream *bt_message_discarded_events_borrow_stream(
2455 bt_message *message);
2456
2457/*!
2458@brief
2459 Borrows the \bt_stream of the \bt_disc_ev_msg \bt_p{message}
2460 (\c const version).
2461
2462See bt_message_discarded_events_borrow_stream().
2463*/
2464extern const bt_stream *
2465bt_message_discarded_events_borrow_stream_const(const bt_message *message);
2466
2467/*!
2468@brief
2469 Borrows the beginning default \bt_cs of the \bt_disc_ev_msg
2470 \bt_p{message}.
2471
2472See the
2473\ref api-msg-disc-ev-prop-cs-beg "beginning default clock snapshot"
2474property.
2475
2476@param[in] message
2477 Discarded events message from which to borrow the beginning default
2478 clock snapshot.
2479
2480@returns
2481 Beginning default clock snapshot of \bt_p{message}.
2482
2483@bt_pre_not_null{message}
2484@bt_pre_is_disc_ev_msg{message}
2485@pre
2486 The discarded packets messages of the \bt_stream_cls of
2487 \bt_p{message}
2488 \ref api-tir-stream-cls-prop-disc-pkt-cs "have default clock snapshots".
2489*/
2490extern const bt_clock_snapshot *
2491bt_message_discarded_events_borrow_beginning_default_clock_snapshot_const(
2492 const bt_message *message);
2493
2494/*!
2495@brief
2496 Borrows the end default \bt_cs of the \bt_disc_ev_msg
2497 \bt_p{message}.
2498
2499See the
2500\ref api-msg-disc-ev-prop-cs-end "end default clock snapshot"
2501property.
2502
2503@param[in] message
2504 Discarded events message from which to borrow the end default clock
2505 snapshot.
2506
2507@returns
2508 End default clock snapshot of \bt_p{message}.
2509
2510@bt_pre_not_null{message}
2511@bt_pre_is_disc_ev_msg{message}
2512@pre
2513 The discarded packets messages of the \bt_stream_cls of
2514 \bt_p{message}
2515 \ref api-tir-stream-cls-prop-disc-pkt-cs "have default clock snapshots".
2516*/
2517extern const bt_clock_snapshot *
2518bt_message_discarded_events_borrow_end_default_clock_snapshot_const(
2519 const bt_message *message);
2520
2521/*!
2522@brief
2523 Borrows the default \bt_clock_cls of the \bt_stream_cls
2524 of the \bt_disc_ev_msg \bt_p{message}.
2525
2526See the stream class's
2527\ref api-tir-stream-cls-prop-def-clock-cls "default clock class"
2528property.
2529
2530This is a helper which is equivalent to
2531
2532@code
2533bt_stream_class_borrow_default_clock_class_const(
2534 bt_stream_borrow_class_const(
2535 bt_message_discarded_events_borrow_stream_const(message)))
2536@endcode
2537
2538@param[in] message
2539 Discarded events message from which to borrow its stream's class's
2540 default clock class.
2541
2542@returns
2543 \em Borrowed reference of the default clock class of
2544 the stream class of \bt_p{message}, or \c NULL if none.
2545
2546@bt_pre_not_null{message}
2547@bt_pre_is_disc_ev_msg{message}
2548*/
2549extern const bt_clock_class *
2550bt_message_discarded_events_borrow_stream_class_default_clock_class_const(
2551 const bt_message *message);
2552
2553/*!
2554@brief
2555 Sets the number of discarded events of the \bt_disc_ev_msg
2556 \bt_p{message} to \bt_p{count}.
2557
2558See the \ref api-msg-disc-ev-prop-count "discarded event count"
2559property.
2560
2561@param[in] message
2562 Discarded events message of which to set the number of discarded
2563 events to \bt_p{count}.
2564@param[in] count
2565 New number of discarded events of \bt_p{message}.
2566
2567@bt_pre_not_null{message}
2568@bt_pre_hot{message}
2569@bt_pre_is_disc_ev_msg{message}
2570
2571@sa bt_message_discarded_events_get_count() &mdash;
2572 Returns the number of discarded events of a discarded events
2573 message.
2574*/
2575extern void bt_message_discarded_events_set_count(bt_message *message,
2576 uint64_t count);
2577
2578/*!
2579@brief
2580 Returns the number of discarded events of the \bt_disc_ev_msg
2581 \bt_p{message}.
2582
2583See the \ref api-msg-disc-ev-prop-count "discarded event count"
2584property.
2585
2586@param[in] message
2587 Discarded events message of which to get the number of discarded
2588 events.
2589@param[out] count
2590 <strong>If this function returns
2591 #BT_PROPERTY_AVAILABILITY_AVAILABLE</strong>, \bt_p{*count} is
2592 the number of discarded events of \bt_p{message}.
2593
2594@retval #BT_PROPERTY_AVAILABILITY_AVAILABLE
2595 The number of discarded events of \bt_p{message} is available.
2596@retval #BT_PROPERTY_AVAILABILITY_NOT_AVAILABLE
2597 The number of discarded events of \bt_p{message} is not available.
2598
2599@bt_pre_not_null{message}
2600@bt_pre_is_disc_ev_msg{message}
2601@bt_pre_not_null{count}
2602
2603@sa bt_message_discarded_events_set_count() &mdash;
2604 Sets the number of discarded events of a discarded events message.
2605*/
2606extern bt_property_availability bt_message_discarded_events_get_count(
2607 const bt_message *message, uint64_t *count);
2608
2609/*! @} */
2610
2611/*!
2612@name Discarded packets message
2613@{
2614*/
2615
2616/*!
2617@brief
2618 Creates a \bt_disc_pkt_msg for the \bt_stream \bt_p{stream} from the
2619 \bt_msg_iter \bt_p{self_message_iterator}.
2620
2621@attention
2622 @parblock
2623 Only use this function if
2624
2625 @code
2626 bt_stream_class_discarded_packets_have_default_clock_snapshots(
2627 bt_stream_borrow_class_const(stream))
2628 @endcode
2629
2630 returns #BT_FALSE.
2631
2632 Otherwise, use
2633 bt_message_discarded_packets_create_with_default_clock_snapshots().
2634 @endparblock
2635
2636On success, the returned discarded packets message has the following
2637property values:
2638
2639<table>
2640 <tr>
2641 <th>Property
2642 <th>Value
2643 <tr>
2644 <td>\ref api-msg-disc-pkt-prop-stream "Stream"
2645 <td>\bt_p{stream}
2646 <tr>
2647 <td>\ref api-msg-disc-pkt-prop-cs-beg "Beginning default clock snapshot"
2648 <td>\em None
2649 <tr>
2650 <td>\ref api-msg-disc-pkt-prop-cs-end "End default clock snapshot"
2651 <td>\em None
2652 <tr>
2653 <td>\ref api-msg-disc-pkt-prop-count "Discarded packet count"
2654 <td>\em None
2655</table>
2656
2657@param[in] self_message_iterator
2658 Self message iterator from which to create the discarded packets
2659 message.
2660@param[in] stream
2661 Stream from which the packets were discarded.
2662
2663@returns
2664 New discarded packets message reference, or \c NULL on memory error.
2665
2666@bt_pre_not_null{self_message_iterator}
2667@bt_pre_not_null{stream}
2668@pre
2669 <code>bt_stream_class_discarded_packets_have_default_clock_snapshots(bt_stream_borrow_class_const(stream))</code>
2670 returns #BT_FALSE.
2671
2672@bt_post_success_frozen{stream}
2673*/
2674extern bt_message *bt_message_discarded_packets_create(
2675 bt_self_message_iterator *self_message_iterator,
2676 const bt_stream *stream);
2677
2678/*!
2679@brief
2680 Creates a \bt_disc_pkt_msg having the beginning and end default
2681 \bt_p_cs with the values \bt_p{beginning_clock_snapshot_value} and
2682 \bt_p{end_clock_snapshot_value} for the \bt_stream \bt_p{stream}
2683 from the \bt_msg_iter \bt_p{self_message_iterator}.
2684
2685@attention
2686 @parblock
2687 Only use this function if
2688
2689 @code
2690 bt_stream_class_discarded_packets_have_default_clock_snapshots(
2691 bt_stream_borrow_class_const(stream))
2692 @endcode
2693
2694 returns #BT_TRUE.
2695
2696 Otherwise, use
2697 bt_message_discarded_packets_create().
2698 @endparblock
2699
2700On success, the returned discarded packets message has the following
2701property values:
2702
2703<table>
2704 <tr>
2705 <th>Property
2706 <th>Value
2707 <tr>
2708 <td>\ref api-msg-disc-pkt-prop-stream "Stream"
2709 <td>\bt_p{stream}
2710 <tr>
2711 <td>\ref api-msg-disc-pkt-prop-cs-beg "Beginning default clock snapshot"
2712 <td>\bt_c_cs with the value \bt_p{beginning_clock_snapshot_value}.
2713 <tr>
2714 <td>\ref api-msg-disc-pkt-prop-cs-end "End default clock snapshot"
2715 <td>\bt_c_cs with the value \bt_p{end_clock_snapshot_value}.
2716 <tr>
2717 <td>\ref api-msg-disc-pkt-prop-count "Discarded packet count"
2718 <td>\em None
2719</table>
2720
2721@param[in] self_message_iterator
2722 Self message iterator from which to create the discarded packets
2723 message.
2724@param[in] stream
2725 Stream from which the packets were discarded.
2726@param[in] beginning_clock_snapshot_value
2727 Value (clock cycles) of the beginning default clock snapshot of
2728 \bt_p{message}.
2729@param[in] end_clock_snapshot_value
2730 Value (clock cycles) of the end default clock snapshot of
2731 \bt_p{message}.
2732
2733@returns
2734 New discarded packets message reference, or \c NULL on memory error.
2735
2736@bt_pre_not_null{self_message_iterator}
2737@bt_pre_not_null{stream}
2738@pre
2739 <code>bt_stream_class_discarded_packets_have_default_clock_snapshots(bt_stream_borrow_class_const(stream))</code>
2740 returns #BT_TRUE.
2741
2742@bt_post_success_frozen{stream}
2743*/
2744extern bt_message *bt_message_discarded_packets_create_with_default_clock_snapshots(
2745 bt_self_message_iterator *self_message_iterator,
2746 const bt_stream *stream, uint64_t beginning_clock_snapshot_value,
2747 uint64_t end_clock_snapshot_value);
2748
2749/*!
2750@brief
2751 Borrows the \bt_stream of the \bt_disc_pkt_msg \bt_p{message}.
2752
2753See the \ref api-msg-disc-ev-prop-stream "stream" property.
2754
2755@param[in] message
2756 Discarded packets message from which to borrow the stream.
2757
2758@returns
2759 @parblock
2760 \em Borrowed reference of the stream of \bt_p{message}.
2761
2762 The returned pointer remains valid as long as \bt_p{message} exists.
2763 @endparblock
2764
2765@bt_pre_not_null{message}
2766@bt_pre_is_disc_pkt_msg{message}
2767
2768@sa bt_message_discarded_packets_borrow_stream_const() &mdash;
2769 \c const version of this function.
2770*/
2771extern bt_stream *bt_message_discarded_packets_borrow_stream(
2772 bt_message *message);
2773
2774/*!
2775@brief
2776 Borrows the \bt_stream of the \bt_disc_pkt_msg \bt_p{message}
2777 (\c const version).
2778
2779See bt_message_discarded_packets_borrow_stream().
2780*/
2781extern const bt_stream *
2782bt_message_discarded_packets_borrow_stream_const(const bt_message *message);
2783
2784/*!
2785@brief
2786 Borrows the beginning default \bt_cs of the \bt_disc_pkt_msg
2787 \bt_p{message}.
2788
2789See the
2790\ref api-msg-disc-pkt-prop-cs-beg "beginning default clock snapshot"
2791property.
2792
2793@param[in] message
2794 Discarded packets message from which to borrow the beginning default
2795 clock snapshot.
2796
2797@returns
2798 Beginning default clock snapshot of \bt_p{message}.
2799
2800@bt_pre_not_null{message}
2801@bt_pre_is_disc_pkt_msg{message}
2802@pre
2803 The discarded packets messages of the \bt_stream_cls of
2804 \bt_p{message}
2805 \ref api-tir-stream-cls-prop-disc-pkt-cs "have default clock snapshots".
2806*/
2807extern const bt_clock_snapshot *
2808bt_message_discarded_packets_borrow_beginning_default_clock_snapshot_const(
2809 const bt_message *message);
2810
2811/*!
2812@brief
2813 Borrows the end default \bt_cs of the \bt_disc_pkt_msg
2814 \bt_p{message}.
2815
2816See the
2817\ref api-msg-disc-pkt-prop-cs-end "end default clock snapshot"
2818property.
2819
2820@param[in] message
2821 Discarded packets message from which to borrow the end default clock
2822 snapshot.
2823
2824@returns
2825 End default clock snapshot of \bt_p{message}.
2826
2827@bt_pre_not_null{message}
2828@bt_pre_is_disc_pkt_msg{message}
2829@pre
2830 The discarded packets messages of the \bt_stream_cls of
2831 \bt_p{message}
2832 \ref api-tir-stream-cls-prop-disc-pkt-cs "have default clock snapshots".
2833*/
2834extern const bt_clock_snapshot *
2835bt_message_discarded_packets_borrow_end_default_clock_snapshot_const(
2836 const bt_message *message);
2837
2838/*!
2839@brief
2840 Borrows the default \bt_clock_cls of the \bt_stream_cls
2841 of the \bt_disc_pkt_msg \bt_p{message}.
2842
2843See the stream class's
2844\ref api-tir-stream-cls-prop-def-clock-cls "default clock class"
2845property.
2846
2847This is a helper which is equivalent to
2848
2849@code
2850bt_stream_class_borrow_default_clock_class_const(
2851 bt_stream_borrow_class_const(
2852 bt_message_discarded_packets_borrow_stream_const(message)))
2853@endcode
2854
2855@param[in] message
2856 Discarded packets message from which to borrow its stream's class's
2857 default clock class.
2858
2859@returns
2860 \em Borrowed reference of the default clock class of
2861 the stream class of \bt_p{message}, or \c NULL if none.
2862
2863@bt_pre_not_null{message}
2864@bt_pre_is_disc_pkt_msg{message}
2865*/
2866extern const bt_clock_class *
2867bt_message_discarded_packets_borrow_stream_class_default_clock_class_const(
2868 const bt_message *message);
2869
2870/*!
2871@brief
2872 Sets the number of discarded packets of the \bt_disc_pkt_msg
2873 \bt_p{message} to \bt_p{count}.
2874
2875See the \ref api-msg-disc-ev-prop-count "discarded packet count"
2876property.
2877
2878@param[in] message
2879 Discarded packets message of which to set the number of discarded
2880 packets to \bt_p{count}.
2881@param[in] count
2882 New number of discarded packets of \bt_p{message}.
2883
2884@bt_pre_not_null{message}
2885@bt_pre_hot{message}
2886@bt_pre_is_disc_pkt_msg{message}
2887
2888@sa bt_message_discarded_packets_get_count() &mdash;
2889 Returns the number of discarded packets of a discarded packets
2890 message.
2891*/
2892extern void bt_message_discarded_packets_set_count(bt_message *message,
2893 uint64_t count);
2894
2895/*!
2896@brief
2897 Returns the number of discarded packets of the \bt_disc_pkt_msg
2898 \bt_p{message}.
2899
2900See the \ref api-msg-disc-ev-prop-count "discarded packet count"
2901property.
2902
2903@param[in] message
2904 Discarded packets message of which to get the number of discarded
2905 packets.
2906@param[out] count
2907 <strong>If this function returns
2908 #BT_PROPERTY_AVAILABILITY_AVAILABLE</strong>, \bt_p{*count} is
2909 the number of discarded packets of \bt_p{message}.
2910
2911@retval #BT_PROPERTY_AVAILABILITY_AVAILABLE
2912 The number of discarded packets of \bt_p{message} is available.
2913@retval #BT_PROPERTY_AVAILABILITY_NOT_AVAILABLE
2914 The number of discarded packets of \bt_p{message} is not available.
2915
2916@bt_pre_not_null{message}
2917@bt_pre_is_disc_pkt_msg{message}
2918@bt_pre_not_null{count}
2919
2920@sa bt_message_discarded_packets_set_count() &mdash;
2921 Sets the number of discarded packets of a discarded packets message.
2922*/
2923extern bt_property_availability bt_message_discarded_packets_get_count(
2924 const bt_message *message, uint64_t *count);
2925
2926/*! @} */
2927
2928/*!
2929@name Message iterator inactivity message
2930@{
2931*/
2932
2933/*!
2934@brief
2935 Creates a \bt_inac_msg having a \bt_cs of a fictitious instance of
2936 the \bt_clock_cls \bt_p{clock_class} with the value
2937 \bt_p{clock_snapshot_value} from the \bt_msg_iter
2938 \bt_p{self_message_iterator}.
2939
2940On success, the returned message iterator inactivity message has the
2941following property values:
2942
2943<table>
2944 <tr>
2945 <th>Property
2946 <th>Value
2947 <tr>
2948 <td>\ref api-msg-inac-prop-cs "Clock snapshot"
2949 <td>
2950 \bt_c_cs (snapshot of a fictitious instance of \bt_p{clock_class})
2951 with the value \bt_p{clock_snapshot_value}.
2952</table>
2953
2954@param[in] self_message_iterator
2955 Self message iterator from which to create the message iterator
2956 inactivity message.
2957@param[in] clock_class
2958 Class of the fictitious instance of which
2959 \bt_p{clock_snapshot_value} is the value of its snapshot.
2960@param[in] clock_snapshot_value
2961 Value (clock cycles) of the clock snapshot of \bt_p{message}.
2962
2963@returns
2964 New message iterator inactivity message reference, or \c NULL on
2965 memory error.
2966
2967@bt_pre_not_null{self_message_iterator}
2968@bt_pre_not_null{clock_class}
2969
2970@bt_post_success_frozen{clock_class}
2971*/
2972extern
2973bt_message *bt_message_message_iterator_inactivity_create(
2974 bt_self_message_iterator *self_message_iterator,
2975 const bt_clock_class *clock_class,
2976 uint64_t clock_snapshot_value);
2977
2978/*!
2979@brief
2980 Borrows the \bt_cs of the \bt_inac_msg \bt_p{message}.
2981
2982See the \ref api-msg-inac-prop-cs "clock snapshot" property.
2983
2984@param[in] message
2985 Message iterator inactivity message from which to borrow the clock
2986 snapshot.
2987
2988@returns
2989 Clock snapshot of \bt_p{message}.
2990
2991@bt_pre_not_null{message}
2992@bt_pre_is_inac_msg{message}
2993*/
2994extern const bt_clock_snapshot *
2995bt_message_message_iterator_inactivity_borrow_clock_snapshot_const(
2996 const bt_message *message);
2997
2998/*! @} */
2999
3000/*!
3001@name Message reference count
3002@{
3003*/
3004
3005/*!
3006@brief
3007 Increments the \ref api-fund-shared-object "reference count" of
3008 the message \bt_p{message}.
3009
3010@param[in] message
3011 @parblock
3012 Message of which to increment the reference count.
3013
3014 Can be \c NULL.
3015 @endparblock
3016
3017@sa bt_message_put_ref() &mdash;
3018 Decrements the reference count of a message.
3019*/
3020extern void bt_message_get_ref(const bt_message *message);
3021
3022/*!
3023@brief
3024 Decrements the \ref api-fund-shared-object "reference count" of
3025 the message \bt_p{message}.
3026
3027@param[in] message
3028 @parblock
3029 Message of which to decrement the reference count.
3030
3031 Can be \c NULL.
3032 @endparblock
3033
3034@sa bt_message_get_ref() &mdash;
3035 Increments the reference count of a message.
3036*/
3037extern void bt_message_put_ref(const bt_message *message);
3038
3039/*!
3040@brief
3041 Decrements the reference count of the message \bt_p{_message}, and
3042 then sets \bt_p{_message} to \c NULL.
3043
3044@param _message
3045 @parblock
3046 Message of which to decrement the reference count.
3047
3048 Can contain \c NULL.
3049 @endparblock
3050
3051@bt_pre_assign_expr{_message}
3052*/
3053#define BT_MESSAGE_PUT_REF_AND_RESET(_message) \
3054 do { \
3055 bt_message_put_ref(_message); \
3056 (_message) = NULL; \
3057 } while (0)
3058
3059/*!
3060@brief
3061 Decrements the reference count of the message \bt_p{_dst}, sets
3062 \bt_p{_dst} to \bt_p{_src}, and then sets \bt_p{_src} to \c NULL.
3063
3064This macro effectively moves a message reference from the expression
3065\bt_p{_src} to the expression \bt_p{_dst}, putting the existing
3066\bt_p{_dst} reference.
3067
3068@param _dst
3069 @parblock
3070 Destination expression.
3071
3072 Can contain \c NULL.
3073 @endparblock
3074@param _src
3075 @parblock
3076 Source expression.
3077
3078 Can contain \c NULL.
3079 @endparblock
3080
3081@bt_pre_assign_expr{_dst}
3082@bt_pre_assign_expr{_src}
3083*/
3084#define BT_MESSAGE_MOVE_REF(_dst, _src) \
3085 do { \
3086 bt_message_put_ref(_dst); \
3087 (_dst) = (_src); \
3088 (_src) = NULL; \
3089 } while (0)
3090
3091/*! @} */
3092
43c59509
PP
3093/*!
3094@name Message Interchange Protocol version
3095@{
3096*/
3097
3098/*!
3099@brief
3100 Status codes for bt_get_greatest_operative_mip_version().
3101*/
3102typedef enum bt_get_greatest_operative_mip_version_status {
3103 /*!
3104 @brief
3105 Success.
3106 */
3107 BT_GET_GREATEST_OPERATIVE_MIP_VERSION_STATUS_OK = __BT_FUNC_STATUS_OK,
3108
3109 /*!
3110 @brief
3111 No match found.
3112 */
3113 BT_GET_GREATEST_OPERATIVE_MIP_VERSION_STATUS_NO_MATCH = __BT_FUNC_STATUS_NO_MATCH,
3114
3115 /*!
3116 @brief
3117 Out of memory.
3118 */
3119 BT_GET_GREATEST_OPERATIVE_MIP_VERSION_STATUS_MEMORY_ERROR = __BT_FUNC_STATUS_MEMORY_ERROR,
3120
3121 /*!
3122 @brief
3123 Other error.
3124 */
3125 BT_GET_GREATEST_OPERATIVE_MIP_VERSION_STATUS_ERROR = __BT_FUNC_STATUS_ERROR,
3126} bt_get_greatest_operative_mip_version_status;
3127
3128/*!
3129@brief
3130 Computes the greatest \bt_mip version which
3131 you can use to create a trace processing \bt_graph to which you
3132 intend to \ref api-graph-lc-add "add components" described by the
3133 component descriptors \bt_p{component_descriptors}, and sets
3134 \bt_p{*mip_version} to the result.
3135
3136This function calls the
3137\link api-comp-cls-dev-meth-mip "get supported MIP versions"\endlink
3138method for each component descriptor in \bt_p{component_descriptors},
3139and then returns the greatest common (operative) MIP version, if any.
3140The "get supported MIP versions" method receives \bt_p{logging_level} as
3141its \bt_p{logging_level} parameter.
3142
3143If this function does not find an operative MIP version for the
3144component descriptors of \bt_p{component_descriptors}, it returns
3145#BT_GET_GREATEST_OPERATIVE_MIP_VERSION_STATUS_NO_MATCH.
3146
3147@note
3148 As of \bt_name_version_min_maj, because bt_get_maximal_mip_version()
3149 returns 0, this function always sets \bt_p{*mip_version} to
3150 0 on success.
3151
3152@param[in] component_descriptors
3153 Component descriptors for which to get the supported MIP versions
3154 to compute the greatest operative MIP version.
3155@param[in] logging_level
3156 Logging level to use when calling the "get supported MIP versions"
3157 method for each component descriptor in
3158 \bt_p{component_descriptors}.
3159@param[out] mip_version
3160 <strong>On success</strong>, \bt_p{*mip_version} is the greatest
3161 operative MIP version of all the component descriptors in
3162 \bt_p{component_descriptors}.
3163
3164@retval #BT_GET_GREATEST_OPERATIVE_MIP_VERSION_STATUS_OK
3165 Success.
3166@retval #BT_GET_GREATEST_OPERATIVE_MIP_VERSION_STATUS_NO_MATCH
3167 No operative MIP version exists for the component descriptors of
3168 \bt_p{component_descriptors}.
3169@retval #BT_GET_GREATEST_OPERATIVE_MIP_VERSION_STATUS_MEMORY_ERROR
3170 Out of memory.
3171@retval #BT_GET_GREATEST_OPERATIVE_MIP_VERSION_STATUS_ERROR
3172 Other error.
3173
3174@bt_pre_not_null{component_descriptors}
3175@pre
3176 \bt_p{component_descriptors} contains one or more component
3177 descriptors.
3178@bt_pre_not_null{mip_version}
3179*/
3180extern bt_get_greatest_operative_mip_version_status
3181bt_get_greatest_operative_mip_version(
3182 const bt_component_descriptor_set *component_descriptors,
3183 bt_logging_level logging_level, uint64_t *mip_version);
3184
3185/*!
3186@brief
3187 Returns the maximal available \bt_mip version as of
3188 \bt_name_version_min_maj.
3189
3190As of \bt_name_version_min_maj, this function returns
3191\bt_max_mip_version.
3192
3193@returns
3194 Maximal available MIP version (\bt_max_mip_version).
3195*/
3196extern uint64_t bt_get_maximal_mip_version(void);
3197
3198/*! @} */
3199
3200/*! @} */
3201
3202#ifdef __cplusplus
3203}
3204#endif
3205
3206#endif /* BABELTRACE2_GRAPH_MESSAGE_H */
This page took 0.138094 seconds and 4 git commands to generate.