4 * Babeltrace Python Module interface file
6 * Copyright 2012 EfficiOS Inc.
8 * Author: Danny Serres <danny.serres@efficios.com>
9 * Author: Jérémie Galarneau <jeremie.galarneau@efficios.com>
11 * Permission is hereby granted, free of charge, to any person obtaining a copy
12 * of this software and associated documentation files (the "Software"), to deal
13 * in the Software without restriction, including without limitation the rights
14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15 * copies of the Software, and to permit persons to whom the Software is
16 * furnished to do so, subject to the following conditions:
18 * The above copyright notice and this permission notice shall be included in
19 * all copies or substantial portions of the Software.
24 "BABELTRACE_VERSION_STR
26 Babeltrace is a trace viewer and converter reading and writing the
27 Common Trace Format (CTF). Its main use is to pretty-print CTF
28 traces into a human-readable text output.
30 To use this module, the first step is to create a TraceCollection and add a
34 %module(docstring=DOCSTRING) babeltrace
38 #define SWIG_FILE_WITH_INIT
39 #include <babeltrace/babeltrace.h>
40 #include <babeltrace/babeltrace-internal.h>
41 #include <babeltrace/trace-handle.h>
42 #include <babeltrace/trace-handle-internal.h>
43 #include <babeltrace/context.h>
44 #include <babeltrace/context-internal.h>
45 #include <babeltrace/iterator.h>
46 #include <babeltrace/iterator-internal.h>
47 #include <babeltrace/format.h>
48 #include <babeltrace/list.h>
49 #include <babeltrace/types.h>
50 #include <babeltrace/ctf/iterator.h>
51 #include "python-complements.h"
52 #include <babeltrace/ctf-writer/clock.h>
53 #include <babeltrace/ctf-writer/event-fields.h>
54 #include <babeltrace/ctf-writer/event-types.h>
55 #include <babeltrace/ctf-writer/event.h>
56 #include <babeltrace/ctf-writer/stream.h>
57 #include <babeltrace/ctf-writer/writer.h>
60 typedef unsigned long long uint64_t;
61 typedef long long int64_t;
62 typedef int bt_intern_str;
64 /* =================================================================
66 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
69 FILE *_bt_file_open(char *file_path, char *mode);
70 void _bt_file_close(FILE *fp);
71 struct bt_definition **_bt_python_field_listcaller(
72 const struct bt_ctf_event *ctf_event,
73 const struct bt_definition *scope,
74 unsigned int *OUTPUT);
75 struct bt_definition *_bt_python_field_one_from_list(
76 struct bt_definition **list, int index);
77 struct bt_ctf_event_decl **_bt_python_event_decl_listcaller(
79 struct bt_context *ctx,
80 unsigned int *OUTPUT);
81 struct bt_ctf_event_decl *_bt_python_decl_one_from_list(
82 struct bt_ctf_event_decl **list, int index);
83 struct bt_ctf_field_decl **_by_python_field_decl_listcaller(
84 struct bt_ctf_event_decl *event_decl,
85 enum bt_ctf_scope scope,
86 unsigned int *OUTPUT);
87 struct bt_ctf_field_decl *_bt_python_field_decl_one_from_list(
88 struct bt_ctf_field_decl **list, int index);
89 struct definition_array *_bt_python_get_array_from_def(
90 struct bt_definition *field);
91 struct definition_sequence *_bt_python_get_sequence_from_def(
92 struct bt_definition *field);
93 int _bt_python_field_integer_get_signedness(const struct bt_ctf_field *field);
94 enum ctf_type_id _bt_python_get_field_type(const struct bt_ctf_field *field);
96 /* =================================================================
97 CONTEXT.H, CONTEXT-INTERNAL.H
98 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
101 %rename("_bt_context_create") bt_context_create(void);
102 %rename("_bt_context_add_trace") bt_context_add_trace(
103 struct bt_context *ctx, const char *path, const char *format,
104 void (*packet_seek)(struct bt_stream_pos *pos, size_t index, int whence),
105 struct bt_mmap_stream_list *stream_list, FILE *metadata);
106 %rename("_bt_context_remove_trace") bt_context_remove_trace(
107 struct bt_context *ctx, int trace_id);
108 %rename("_bt_context_get") bt_context_get(struct bt_context *ctx);
109 %rename("_bt_context_put") bt_context_put(struct bt_context *ctx);
110 %rename("_bt_ctf_event_get_context") bt_ctf_event_get_context(
111 const struct bt_ctf_event *event);
113 struct bt_context *bt_context_create(void);
114 int bt_context_add_trace(struct bt_context *ctx, const char *path, const char *format,
115 void (*packet_seek)(struct bt_stream_pos *pos, size_t index, int whence),
116 struct bt_mmap_stream_list *stream_list, FILE *metadata);
117 void bt_context_remove_trace(struct bt_context *ctx, int trace_id);
118 void bt_context_get(struct bt_context *ctx);
119 void bt_context_put(struct bt_context *ctx);
120 struct bt_context *bt_ctf_event_get_context(const struct bt_ctf_event *event);
122 // class TraceCollection to prevent direct access to struct bt_context
124 class TraceCollection:
126 The TraceCollection is the object that contains all currently opened traces.
130 self._tc = _bt_context_create()
133 _bt_context_put(self._tc)
135 def add_trace(self, path, format_str):
137 Add a trace by path to the TraceCollection.
141 path is the path to the trace, it is not recursive.
142 If "path" is None, stream_list is used instead as a list
143 of mmap streams to open for the trace.
145 format is a string containing the format name in which the trace was
148 Return: the corresponding TraceHandle on success or None on error.
150 ret = _bt_context_add_trace(self._tc, path, format_str, None, None, None)
154 th = TraceHandle.__new__(TraceHandle)
156 th._trace_collection = self
159 def add_traces_recursive(self, path, format_str):
161 Open a trace recursively.
163 Find each trace present in the subdirectory starting from the given
164 path, and add them to the TraceCollection.
166 Return a dict of TraceHandle instances (the full path is the key).
167 Return None on error.
177 for fullpath, dirs, files in os.walk(path):
178 if "metadata" in files:
179 trace_handle = self.add_trace(fullpath, format_str)
180 if trace_handle is None:
184 trace_handles[fullpath] = trace_handle
187 if noTrace and error:
191 def remove_trace(self, trace_handle):
193 Remove a trace from the TraceCollection.
194 Effectively closing the trace.
197 _bt_context_remove_trace(self._tc, trace_handle._id)
198 except AttributeError:
199 raise TypeError("in remove_trace, "
200 "argument 2 must be a TraceHandle instance")
205 Generator function to iterate over the events of open in the current
208 begin_pos_ptr = _bt_iter_pos()
209 end_pos_ptr = _bt_iter_pos()
210 begin_pos_ptr.type = SEEK_BEGIN
211 end_pos_ptr.type = SEEK_LAST
213 for event in self._events(begin_pos_ptr, end_pos_ptr):
216 def events_timestamps(self, timestamp_begin, timestamp_end):
218 Generator function to iterate over the events of open in the current
219 TraceCollection from timestamp_begin to timestamp_end.
221 begin_pos_ptr = _bt_iter_pos()
222 end_pos_ptr = _bt_iter_pos()
223 begin_pos_ptr.type = end_pos_ptr.type = SEEK_TIME
224 begin_pos_ptr.u.seek_time = timestamp_begin
225 end_pos_ptr.u.seek_time = timestamp_end
227 for event in self._events(begin_pos_ptr, end_pos_ptr):
231 def timestamp_begin(self):
232 pos_ptr = _bt_iter_pos()
233 pos_ptr.type = SEEK_BEGIN
234 return self._timestamp_at_pos(pos_ptr)
237 def timestamp_end(self):
238 pos_ptr = _bt_iter_pos()
239 pos_ptr.type = SEEK_LAST
240 return self._timestamp_at_pos(pos_ptr)
242 def _timestamp_at_pos(self, pos_ptr):
243 ctf_it_ptr = _bt_ctf_iter_create(self._tc, pos_ptr, pos_ptr)
244 if ctf_it_ptr is None:
245 raise NotImplementedError("Creation of multiple iterators is unsupported.")
246 ev_ptr = _bt_ctf_iter_read_event(ctf_it_ptr)
247 _bt_ctf_iter_destroy(ctf_it_ptr)
251 def _events(self, begin_pos_ptr, end_pos_ptr):
252 ctf_it_ptr = _bt_ctf_iter_create(self._tc, begin_pos_ptr, end_pos_ptr)
253 if ctf_it_ptr is None:
254 raise NotImplementedError(
255 "Creation of multiple iterators is unsupported.")
258 ev_ptr = _bt_ctf_iter_read_event(ctf_it_ptr)
262 ev = Event.__new__(Event)
266 except GeneratorExit:
269 ret = _bt_iter_next(_bt_ctf_get_iter(ctf_it_ptr))
273 _bt_ctf_iter_destroy(ctf_it_ptr)
279 /* =================================================================
284 %rename("lookup_format") bt_lookup_format(bt_intern_str qname);
285 %rename("_bt_print_format_list") bt_fprintf_format_list(FILE *fp);
286 %rename("register_format") bt_register_format(struct format *format);
287 %rename("unregister_format") bt_unregister_format(struct bt_format *format);
289 extern struct format *bt_lookup_format(bt_intern_str qname);
290 extern void bt_fprintf_format_list(FILE *fp);
291 extern int bt_register_format(struct bt_format *format);
292 extern void bt_unregister_format(struct bt_format *format);
296 def print_format_list(babeltrace_file):
298 Print a list of available formats to file.
300 babeltrace_file must be a File instance opened in write mode.
303 if babeltrace_file._file is not None:
304 _bt_print_format_list(babeltrace_file._file)
305 except AttributeError:
306 raise TypeError("in print_format_list, "
307 "argument 1 must be a File instance")
312 /* =================================================================
313 ITERATOR.H, ITERATOR-INTERNAL.H
314 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
317 %rename("_bt_iter_create") bt_iter_create(struct bt_context *ctx,
318 const struct bt_iter_pos *begin_pos, const struct bt_iter_pos *end_pos);
319 %rename("_bt_iter_destroy") bt_iter_destroy(struct bt_iter *iter);
320 %rename("_bt_iter_next") bt_iter_next(struct bt_iter *iter);
321 %rename("_bt_iter_get_pos") bt_iter_get_pos(struct bt_iter *iter);
322 %rename("_bt_iter_free_pos") bt_iter_free_pos(struct bt_iter_pos *pos);
323 %rename("_bt_iter_set_pos") bt_iter_set_pos(struct bt_iter *iter,
324 const struct bt_iter_pos *pos);
325 %rename("_bt_iter_create_time_pos") bt_iter_create_time_pos(struct bt_iter *iter,
328 struct bt_iter *bt_iter_create(struct bt_context *ctx,
329 const struct bt_iter_pos *begin_pos, const struct bt_iter_pos *end_pos);
330 void bt_iter_destroy(struct bt_iter *iter);
331 int bt_iter_next(struct bt_iter *iter);
332 struct bt_iter_pos *bt_iter_get_pos(struct bt_iter *iter);
333 void bt_iter_free_pos(struct bt_iter_pos *pos);
334 int bt_iter_set_pos(struct bt_iter *iter, const struct bt_iter_pos *pos);
335 struct bt_iter_pos *bt_iter_create_time_pos(struct bt_iter *iter, uint64_t timestamp);
337 %rename("_bt_iter_pos") bt_iter_pos;
338 %rename("SEEK_TIME") BT_SEEK_TIME;
339 %rename("SEEK_RESTORE") BT_SEEK_RESTORE;
340 %rename("SEEK_CUR") BT_SEEK_CUR;
341 %rename("SEEK_BEGIN") BT_SEEK_BEGIN;
342 %rename("SEEK_LAST") BT_SEEK_LAST;
344 // This struct is taken from iterator.h
345 // All changes to the struct must also be made here
348 BT_SEEK_TIME, /* uses u.seek_time */
349 BT_SEEK_RESTORE, /* uses u.restore */
356 struct bt_saved_pos *restore;
360 /* =================================================================
361 TRACE-HANDLE.H, TRACE-HANDLE-INTERNAL.H
362 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
365 %rename("_bt_trace_handle_create") bt_trace_handle_create(struct bt_context *ctx);
366 %rename("_bt_trace_handle_destroy") bt_trace_handle_destroy(struct bt_trace_handle *bt);
367 struct bt_trace_handle *bt_trace_handle_create(struct bt_context *ctx);
368 void bt_trace_handle_destroy(struct bt_trace_handle *bt);
370 %rename("_bt_trace_handle_get_path") bt_trace_handle_get_path(struct bt_context *ctx,
372 %rename("_bt_trace_handle_get_timestamp_begin") bt_trace_handle_get_timestamp_begin(
373 struct bt_context *ctx, int handle_id, enum bt_clock_type type);
374 %rename("_bt_trace_handle_get_timestamp_end") bt_trace_handle_get_timestamp_end(
375 struct bt_context *ctx, int handle_id, enum bt_clock_type type);
376 const char *bt_trace_handle_get_path(struct bt_context *ctx, int handle_id);
377 uint64_t bt_trace_handle_get_timestamp_begin(struct bt_context *ctx, int handle_id,
378 enum bt_clock_type type);
379 uint64_t bt_trace_handle_get_timestamp_end(struct bt_context *ctx, int handle_id,
380 enum bt_clock_type type);
382 %rename("_bt_ctf_event_get_handle_id") bt_ctf_event_get_handle_id(
383 const struct bt_ctf_event *event);
384 int bt_ctf_event_get_handle_id(const struct bt_ctf_event *event);
389 # Based on enum bt_clock_type in clock-type.h
394 class TraceHandle(object):
396 The TraceHandle allows the user to manipulate a trace file directly.
397 It is a unique identifier representing a trace file.
402 raise NotImplementedError("TraceHandle cannot be instantiated")
405 return "Babeltrace TraceHandle: trace_id('{0}')".format(self._id)
409 """Return the TraceHandle id."""
414 """Return the path of a TraceHandle."""
415 return _bt_trace_handle_get_path(self._trace_collection._tc, self._id)
418 def timestamp_begin(self):
419 """Return the creation time of the buffers of a trace."""
420 return _bt_trace_handle_get_timestamp_begin(
421 self._trace_collection._tc, self._id, ClockType.CLOCK_REAL)
424 def timestamp_end(self):
425 """Return the destruction timestamp of the buffers of a trace."""
426 return _bt_trace_handle_get_timestamp_end(
427 self._trace_collection._tc, self._id, ClockType.CLOCK_REAL)
432 Generator returning all events (EventDeclaration) in a trace.
434 ret = _bt_python_event_decl_listcaller(self.id, self._trace_collection._tc)
436 if not isinstance(ret, list):
439 ptr_list, count = ret
440 for i in range(count):
441 tmp = EventDeclaration.__new__(EventDeclaration)
442 tmp._ed = _bt_python_decl_one_from_list(ptr_list, i)
449 // =================================================================
451 // =================================================================
453 /* =================================================================
459 %rename("_bt_ctf_iter_create") bt_ctf_iter_create(struct bt_context *ctx,
460 const struct bt_iter_pos *begin_pos,
461 const struct bt_iter_pos *end_pos);
462 %rename("_bt_ctf_get_iter") bt_ctf_get_iter(struct bt_ctf_iter *iter);
463 %rename("_bt_ctf_iter_destroy") bt_ctf_iter_destroy(struct bt_ctf_iter *iter);
464 %rename("_bt_ctf_iter_read_event") bt_ctf_iter_read_event(struct bt_ctf_iter *iter);
466 struct bt_ctf_iter *bt_ctf_iter_create(struct bt_context *ctx,
467 const struct bt_iter_pos *begin_pos,
468 const struct bt_iter_pos *end_pos);
469 struct bt_iter *bt_ctf_get_iter(struct bt_ctf_iter *iter);
470 void bt_ctf_iter_destroy(struct bt_ctf_iter *iter);
471 struct bt_ctf_event *bt_ctf_iter_read_event(struct bt_ctf_iter *iter);
475 %rename("_bt_ctf_get_top_level_scope") bt_ctf_get_top_level_scope(const struct
476 bt_ctf_event *event, enum bt_ctf_scope scope);
477 %rename("_bt_ctf_event_name") bt_ctf_event_name(const struct bt_ctf_event *ctf_event);
478 %rename("_bt_ctf_get_timestamp") bt_ctf_get_timestamp(
479 const struct bt_ctf_event *ctf_event);
480 %rename("_bt_ctf_get_cycles") bt_ctf_get_cycles(
481 const struct bt_ctf_event *ctf_event);
483 %rename("_bt_ctf_get_field") bt_ctf_get_field(const struct bt_ctf_event *ctf_event,
484 const struct bt_definition *scope, const char *field);
485 %rename("_bt_ctf_get_index") bt_ctf_get_index(const struct bt_ctf_event *ctf_event,
486 const struct bt_definition *field, unsigned int index);
487 %rename("_bt_ctf_field_name") bt_ctf_field_name(const struct bt_definition *field);
488 %rename("_bt_ctf_field_type") bt_ctf_field_type(const struct bt_declaration *field);
489 %rename("_bt_ctf_get_int_signedness") bt_ctf_get_int_signedness(
490 const struct bt_declaration *field);
491 %rename("_bt_ctf_get_int_base") bt_ctf_get_int_base(const struct bt_declaration *field);
492 %rename("_bt_ctf_get_int_byte_order") bt_ctf_get_int_byte_order(
493 const struct bt_declaration *field);
494 %rename("_bt_ctf_get_int_len") bt_ctf_get_int_len(const struct bt_declaration *field);
495 %rename("_bt_ctf_get_enum_int") bt_ctf_get_enum_int(const struct bt_definition *field);
496 %rename("_bt_ctf_get_enum_str") bt_ctf_get_enum_str(const struct bt_definition *field);
497 %rename("_bt_ctf_get_encoding") bt_ctf_get_encoding(const struct bt_declaration *field);
498 %rename("_bt_ctf_get_array_len") bt_ctf_get_array_len(const struct bt_declaration *field);
499 %rename("_bt_ctf_get_uint64") bt_ctf_get_uint64(const struct bt_definition *field);
500 %rename("_bt_ctf_get_int64") bt_ctf_get_int64(const struct bt_definition *field);
501 %rename("_bt_ctf_get_char_array") bt_ctf_get_char_array(const struct bt_definition *field);
502 %rename("_bt_ctf_get_string") bt_ctf_get_string(const struct bt_definition *field);
503 %rename("_bt_ctf_get_float") bt_ctf_get_float(const struct bt_definition *field);
504 %rename("_bt_ctf_get_variant") bt_ctf_get_variant(const struct bt_definition *field);
505 %rename("_bt_ctf_field_get_error") bt_ctf_field_get_error(void);
506 %rename("_bt_ctf_get_decl_event_name") bt_ctf_get_decl_event_name(const struct
507 bt_ctf_event_decl *event);
508 %rename("_bt_ctf_get_decl_field_name") bt_ctf_get_decl_field_name(
509 const struct bt_ctf_field_decl *field);
510 %rename("_bt_ctf_get_decl_from_def") bt_ctf_get_decl_from_def(
511 const struct bt_definition *field);
512 %rename("_bt_ctf_get_decl_from_field_decl") bt_ctf_get_decl_from_field_decl(
513 const struct bt_ctf_field_decl *field);
514 %rename("_bt_array_index") bt_array_index(struct definition_array *array, uint64_t i);
515 %rename("_bt_sequence_len") bt_sequence_len(struct definition_sequence *sequence);
516 %rename("_bt_sequence_index") bt_sequence_index(struct definition_sequence *sequence, uint64_t i);
517 %rename("_bt_ctf_get_struct_field_count") bt_ctf_get_struct_field_count(const struct bt_definition *structure);
518 %rename("_bt_ctf_get_struct_field_index") bt_ctf_get_struct_field_index(const struct bt_definition *structure, uint64_t i);
520 const struct bt_definition *bt_ctf_get_top_level_scope(const struct bt_ctf_event *ctf_event,
521 enum bt_ctf_scope scope);
522 const char *bt_ctf_event_name(const struct bt_ctf_event *ctf_event);
523 uint64_t bt_ctf_get_timestamp(const struct bt_ctf_event *ctf_event);
524 uint64_t bt_ctf_get_cycles(const struct bt_ctf_event *ctf_event);
525 const struct bt_definition *bt_ctf_get_field(const struct bt_ctf_event *ctf_event,
526 const struct bt_definition *scope,
528 const struct bt_definition *bt_ctf_get_index(const struct bt_ctf_event *ctf_event,
529 const struct bt_definition *field,
531 const char *bt_ctf_field_name(const struct bt_definition *field);
532 enum ctf_type_id bt_ctf_field_type(const struct bt_declaration *field);
533 int bt_ctf_get_int_signedness(const struct bt_declaration *field);
534 int bt_ctf_get_int_base(const struct bt_declaration *field);
535 int bt_ctf_get_int_byte_order(const struct bt_declaration *field);
536 ssize_t bt_ctf_get_int_len(const struct bt_declaration *field);
537 const struct bt_definition *bt_ctf_get_enum_int(const struct bt_definition *field);
538 const char *bt_ctf_get_enum_str(const struct bt_definition *field);
539 enum ctf_string_encoding bt_ctf_get_encoding(const struct bt_declaration *field);
540 int bt_ctf_get_array_len(const struct bt_declaration *field);
541 struct bt_definition *bt_array_index(struct definition_array *array, uint64_t i);
542 uint64_t bt_ctf_get_uint64(const struct bt_definition *field);
543 int64_t bt_ctf_get_int64(const struct bt_definition *field);
544 char *bt_ctf_get_char_array(const struct bt_definition *field);
545 char *bt_ctf_get_string(const struct bt_definition *field);
546 double bt_ctf_get_float(const struct bt_definition *field);
547 const struct bt_definition *bt_ctf_get_variant(const struct bt_definition *field);
548 int bt_ctf_field_get_error(void);
549 const char *bt_ctf_get_decl_event_name(const struct bt_ctf_event_decl *event);
550 const char *bt_ctf_get_decl_field_name(const struct bt_ctf_field_decl *field);
551 const struct bt_declaration *bt_ctf_get_decl_from_def(const struct bt_definition *field);
552 const struct bt_declaration *bt_ctf_get_decl_from_field_decl(const struct bt_ctf_field_decl *field);
553 uint64_t bt_sequence_len(struct definition_sequence *sequence);
554 struct bt_definition *bt_sequence_index(struct definition_sequence *sequence, uint64_t i);
555 uint64_t bt_ctf_get_struct_field_count(const struct bt_definition *structure);
556 const struct bt_definition *bt_ctf_get_struct_field_index(const struct bt_definition *structure, uint64_t i);
560 class CTFStringEncoding:
566 # Based on the enum in ctf-writer/writer.h
568 BYTE_ORDER_NATIVE = 0
569 BYTE_ORDER_LITTLE_ENDIAN = 1
570 BYTE_ORDER_BIG_ENDIAN = 2
571 BYTE_ORDER_NETWORK = 3
572 BYTE_ORDER_UNKNOWN = 4 # Python-specific entry
574 #enum equivalent, accessible constants
575 #These are taken directly from ctf/events.h
576 #All changes to enums must also be made here
591 name = "UNKNOWN_TYPE"
592 constants = [attr for attr in dir(CTFTypeId) if not callable(getattr(CTFTypeId, attr)) and not attr.startswith("__")]
593 for attr in constants:
594 if getattr(CTFTypeId, attr) == id:
600 TRACE_PACKET_HEADER = 0
601 STREAM_PACKET_CONTEXT = 1
602 STREAM_EVENT_HEADER = 2
603 STREAM_EVENT_CONTEXT = 3
607 def scope_name(scope):
608 name = "UNKNOWN_SCOPE"
609 constants = [attr for attr in dir(CTFScope) if not callable(getattr(CTFScope, attr)) and not attr.startswith("__")]
610 for attr in constants:
611 if getattr(CTFScope, attr) == scope:
616 # Priority of the scopes when searching for event fields
617 _scopes = [CTFScope.EVENT_FIELDS, CTFScope.EVENT_CONTEXT, CTFScope.STREAM_EVENT_CONTEXT,
618 CTFScope.STREAM_EVENT_HEADER, CTFScope.STREAM_PACKET_CONTEXT, CTFScope.TRACE_PACKET_HEADER]
621 class Event(collections.Mapping):
623 This class represents an event from the trace.
624 It is obtained using the TraceCollection generator functions.
628 raise NotImplementedError("Event cannot be instantiated")
632 """Return the name of the event or None on error."""
633 return _bt_ctf_event_name(self._e)
638 Return the timestamp of the event as written in
639 the packet (in cycles) or -1ULL on error.
641 return _bt_ctf_get_cycles(self._e)
646 Return the timestamp of the event offset with the
647 system clock source or -1ULL on error.
649 return _bt_ctf_get_timestamp(self._e)
651 def field_with_scope(self, field_name, scope):
653 Get field_name's value in scope.
654 None is returned if no field matches field_name.
656 if not scope in _scopes:
657 raise ValueError("Invalid scope provided")
658 field = self._field_with_scope(field_name, scope)
659 if field is not None:
663 def field_list_with_scope(self, scope):
664 """Return a list of field names in scope."""
665 if not scope in _scopes:
666 raise ValueError("Invalid scope provided")
668 for field in self._field_list_with_scope(scope):
669 field_names.append(field.name)
675 Get the TraceHandle associated with this event
678 ret = _bt_ctf_event_get_handle_id(self._e)
682 th = TraceHandle.__new__(TraceHandle)
684 th._trace_collection = self.get_trace_collection()
688 def trace_collection(self):
690 Get the TraceCollection associated with this event.
691 Return None on error.
693 trace_collection = TraceCollection()
694 trace_collection._tc = _bt_ctf_event_get_context(self._e);
695 if trace_collection._tc is None:
698 return trace_collection
700 def __getitem__(self, field_name):
702 Get field_name's value. If the field_name exists in multiple
703 scopes, the first field found is returned. The scopes are searched
704 in the following order:
707 3) STREAM_EVENT_CONTEXT
708 4) STREAM_EVENT_HEADER
709 5) STREAM_PACKET_CONTEXT
710 6) TRACE_PACKET_HEADER
711 None is returned if no field matches field_name.
713 Use field_with_scope() to explicitly access fields in a given
716 field = self._field(field_name)
717 if field is not None:
719 raise KeyError(field_name)
722 for key in self.keys():
727 for scope in _scopes:
728 scope_ptr = _bt_ctf_get_top_level_scope(self._e, scope)
729 ret = _bt_python_field_listcaller(self._e, scope_ptr)
730 if isinstance(ret, list):
734 def __contains__(self, field_name):
735 return self._field(field_name) is not None
738 """Return a list of field names."""
740 for scope in _scopes:
741 for name in self.field_list_with_scope(scope):
742 field_names.add(name)
743 return list(field_names)
745 def get(self, field_name, default = None):
746 field = self._field(field_name)
752 for field in self.keys():
753 yield (field, self[field])
755 def _field_with_scope(self, field_name, scope):
756 scope_ptr = _bt_ctf_get_top_level_scope(self._e, scope)
757 if scope_ptr is None:
760 definition_ptr = _bt_ctf_get_field(self._e, scope_ptr, field_name)
761 if definition_ptr is None:
764 field = _Definition(definition_ptr, scope)
767 def _field(self, field_name):
769 for scope in _scopes:
770 field = self._field_with_scope(field_name, scope)
771 if field is not None:
775 def _field_list_with_scope(self, scope):
777 scope_ptr = _bt_ctf_get_top_level_scope(self._e, scope)
779 # Returns a list [list_ptr, count]. If list_ptr is NULL, SWIG will only
780 # provide the "count" return value
783 ret = _bt_python_field_listcaller(self._e, scope_ptr)
784 if isinstance(ret, list):
785 list_ptr, count = ret
787 for i in range(count):
788 definition_ptr = _bt_python_field_one_from_list(list_ptr, i)
789 if definition_ptr is not None:
790 definition = _Definition(definition_ptr, scope)
791 fields.append(definition)
794 class FieldError(Exception):
795 def __init__(self, value):
799 return repr(self.value)
801 class EventDeclaration(object):
802 """Event declaration class. Do not instantiate."""
805 raise NotImplementedError("EventDeclaration cannot be instantiated")
809 """Return the name of the event or None on error"""
810 return _bt_ctf_get_decl_event_name(self._ed)
815 Generator returning all FieldDeclarations of an event, going through
816 each scope in the following order:
819 3) STREAM_EVENT_CONTEXT
820 4) STREAM_EVENT_HEADER
821 5) STREAM_PACKET_CONTEXT
822 6) TRACE_PACKET_HEADER
824 for scope in _scopes:
825 for declaration in self.fields_scope(scope):
828 def fields_scope(self, scope):
830 Generator returning FieldDeclarations of the current event in scope.
832 ret = _by_python_field_decl_listcaller(self._ed, scope)
834 if not isinstance(ret, list):
837 list_ptr, count = ret
838 for i in range(count):
839 field_declaration_ptr = _bt_python_field_decl_one_from_list(list_ptr, i)
840 if field_declaration_ptr is not None:
841 declaration_ptr = _bt_ctf_get_decl_from_field_decl(field_declaration_ptr)
842 field_declaration = _create_field_declaration(declaration_ptr, _bt_ctf_get_decl_field_name(field_declaration_ptr), scope)
843 yield field_declaration
845 class FieldDeclaration(object):
846 """Field declaration class. Do not instantiate."""
848 raise NotImplementedError("FieldDeclaration cannot be instantiated")
851 return "({0}) {1} {2}".format(CTFScope.scope_name(self.scope), CTFTypeId.type_name(self.type), self.name)
855 """Return the name of a FieldDeclaration or None on error."""
861 Return the FieldDeclaration's type. One of the entries in class
864 return _bt_ctf_field_type(self._fd)
869 Return the FieldDeclaration's scope.
873 class IntegerFieldDeclaration(FieldDeclaration):
874 """Do not instantiate."""
876 raise NotImplementedError("IntegerFieldDeclaration cannot be instantiated")
879 def signedness(self):
881 Return the signedness of an integer:
882 0 if unsigned; 1 if signed; -1 on error.
884 return _bt_ctf_get_int_signedness(self._fd)
888 """Return the base of an int or a negative value on error."""
889 return _bt_ctf_get_int_base(self._fd)
892 def byte_order(self):
894 Return the byte order. One of class ByteOrder's entries.
896 ret = _bt_ctf_get_int_byte_order(self._fd)
898 return ByteOrder.BYTE_ORDER_LITTLE_ENDIAN
900 return ByteOrder.BYTE_ORDER_BIG_ENDIAN
902 return ByteOrder.BYTE_ORDER_UNKNOWN
907 Return the size, in bits, of an int or a negative
910 return _bt_ctf_get_int_len(self._fd)
915 Return the encoding. One of class CTFStringEncoding's entries.
916 Return a negative value on error.
918 return _bt_ctf_get_encoding(self._fd)
920 class EnumerationFieldDeclaration(FieldDeclaration):
921 """Do not instantiate."""
923 raise NotImplementedError("EnumerationFieldDeclaration cannot be instantiated")
925 class ArrayFieldDeclaration(FieldDeclaration):
926 """Do not instantiate."""
928 raise NotImplementedError("ArrayFieldDeclaration cannot be instantiated")
933 Return the length of an array or a negative
936 return _bt_ctf_get_array_len(self._fd)
938 class SequenceFieldDeclaration(FieldDeclaration):
939 """Do not instantiate."""
941 raise NotImplementedError("SequenceFieldDeclaration cannot be instantiated")
943 class FloatFieldDeclaration(FieldDeclaration):
944 """Do not instantiate."""
946 raise NotImplementedError("FloatFieldDeclaration cannot be instantiated")
948 class StructureFieldDeclaration(FieldDeclaration):
949 """Do not instantiate."""
951 raise NotImplementedError("StructureFieldDeclaration cannot be instantiated")
953 class StringFieldDeclaration(FieldDeclaration):
954 """Do not instantiate."""
956 raise NotImplementedError("StringFieldDeclaration cannot be instantiated")
958 class VariantFieldDeclaration(FieldDeclaration):
959 """Do not instantiate."""
961 raise NotImplementedError("VariantFieldDeclaration cannot be instantiated")
965 Return the last error code encountered while
966 accessing a field and reset the error flag.
967 Return 0 if no error, a negative value otherwise.
969 return _bt_ctf_field_get_error()
971 def _create_field_declaration(declaration_ptr, name, scope):
973 Private field declaration factory.
975 if declaration_ptr is None:
976 raise ValueError("declaration_ptr must be valid")
977 if not scope in _scopes:
978 raise ValueError("Invalid scope provided")
980 type = _bt_ctf_field_type(declaration_ptr)
982 if type == CTFTypeId.INTEGER:
983 declaration = IntegerFieldDeclaration.__new__(IntegerFieldDeclaration)
984 elif type == CTFTypeId.ENUM:
985 declaration = EnumerationFieldDeclaration.__new__(EnumerationFieldDeclaration)
986 elif type == CTFTypeId.ARRAY:
987 declaration = ArrayFieldDeclaration.__new__(ArrayFieldDeclaration)
988 elif type == CTFTypeId.SEQUENCE:
989 declaration = SequenceFieldDeclaration.__new__(SequenceFieldDeclaration)
990 elif type == CTFTypeId.FLOAT:
991 declaration = FloatFieldDeclaration.__new__(FloatFieldDeclaration)
992 elif type == CTFTypeId.STRUCT:
993 declaration = StructureFieldDeclaration.__new__(StructureFieldDeclaration)
994 elif type == CTFTypeId.STRING:
995 declaration = StringFieldDeclaration.__new__(StringFieldDeclaration)
996 elif type == CTFTypeId.VARIANT:
997 declaration = VariantFieldDeclaration.__new__(VariantFieldDeclaration)
1001 declaration._fd = declaration_ptr
1002 declaration._s = scope
1003 declaration._name = name
1006 class _Definition(object):
1007 def __init__(self, definition_ptr, scope):
1008 self._d = definition_ptr
1010 if not scope in _scopes:
1011 ValueError("Invalid scope provided")
1015 """Return the name of a field or None on error."""
1016 return _bt_ctf_field_name(self._d)
1020 """Return the type of a field or -1 if unknown."""
1021 return _bt_ctf_field_type(_bt_ctf_get_decl_from_def(self._d))
1024 def declaration(self):
1025 """Return the associated Definition object."""
1026 return _create_field_declaration(_bt_ctf_get_decl_from_def(self._d), self.name, self.scope)
1028 def _get_enum_str(self):
1030 Return the string matching the current enumeration.
1031 Return None on error.
1033 return _bt_ctf_get_enum_str(self._d)
1035 def _get_array_element_at(self, index):
1037 Return the array's element at position index.
1038 Return None on error
1040 array_ptr = _bt_python_get_array_from_def(self._d)
1041 if array_ptr is None:
1044 definition_ptr = _bt_array_index(array_ptr, index)
1045 if definition_ptr is None:
1047 return _Definition(definition_ptr, self.scope)
1049 def _get_sequence_len(self):
1051 Return the len of a sequence or a negative
1054 seq = _bt_python_get_sequence_from_def(self._d)
1055 return _bt_sequence_len(seq)
1057 def _get_sequence_element_at(self, index):
1059 Return the sequence's element at position index,
1060 otherwise return None
1062 seq = _bt_python_get_sequence_from_def(self._d)
1064 definition_ptr = _bt_sequence_index(seq, index)
1065 if definition_ptr is not None:
1066 return _Definition(definition_ptr, self.scope)
1069 def _get_uint64(self):
1071 Return the value associated with the field.
1072 If the field does not exist or is not of the type requested,
1073 the value returned is undefined. To check if an error occured,
1074 use the field_error() function after accessing a field.
1076 return _bt_ctf_get_uint64(self._d)
1078 def _get_int64(self):
1080 Return the value associated with the field.
1081 If the field does not exist or is not of the type requested,
1082 the value returned is undefined. To check if an error occured,
1083 use the field_error() function after accessing a field.
1085 return _bt_ctf_get_int64(self._d)
1087 def _get_char_array(self):
1089 Return the value associated with the field.
1090 If the field does not exist or is not of the type requested,
1091 the value returned is undefined. To check if an error occurred,
1092 use the field_error() function after accessing a field.
1094 return _bt_ctf_get_char_array(self._d)
1098 Return the value associated with the field.
1099 If the field does not exist or is not of the type requested,
1100 the value returned is undefined. To check if an error occurred,
1101 use the field_error() function after accessing a field.
1103 return _bt_ctf_get_string(self._d)
1105 def _get_float(self):
1107 Return the value associated with the field.
1108 If the field does not exist or is not of the type requested,
1109 the value returned is undefined. To check if an error occurred,
1110 use the field_error() function after accessing a field.
1112 return _bt_ctf_get_float(self._d)
1114 def _get_variant(self):
1116 Return the variant's selected field.
1117 If the field does not exist or is not of the type requested,
1118 the value returned is undefined. To check if an error occurred,
1119 use the field_error() function after accessing a field.
1121 return _bt_ctf_get_variant(self._d)
1123 def _get_struct_field_count(self):
1125 Return the number of fields contained in the structure.
1126 If the field does not exist or is not of the type requested,
1127 the value returned is undefined.
1129 return _bt_ctf_get_struct_field_count(self._d)
1131 def _get_struct_field_at(self, i):
1133 Return the structure's field at position i.
1134 If the field does not exist or is not of the type requested,
1135 the value returned is undefined. To check if an error occurred,
1136 use the field_error() function after accessing a field.
1138 return _bt_ctf_get_struct_field_index(self._d, i)
1143 Return the value associated with the field according to its type.
1144 Return None on error.
1148 if id == CTFTypeId.STRING:
1149 value = self._get_str()
1150 elif id == CTFTypeId.ARRAY:
1152 for i in range(self.declaration.length):
1153 element = self._get_array_element_at(i)
1154 value.append(element.value)
1155 elif id == CTFTypeId.INTEGER:
1156 if self.declaration.signedness == 0:
1157 value = self._get_uint64()
1159 value = self._get_int64()
1160 elif id == CTFTypeId.ENUM:
1161 value = self._get_enum_str()
1162 elif id == CTFTypeId.SEQUENCE:
1163 seq_len = self._get_sequence_len()
1165 for i in range(seq_len):
1166 evDef = self._get_sequence_element_at(i)
1167 value.append(evDef.value)
1168 elif id == CTFTypeId.FLOAT:
1169 value = self._get_float()
1170 elif id == CTFTypeId.VARIANT:
1171 variant = _Definition.__new__(_Definition)
1172 variant._d = self._get_variant();
1173 value = variant.value
1174 elif id == CTFTypeId.STRUCT:
1176 for i in range(self._get_struct_field_count()):
1177 member = _Definition(self._get_struct_field_at(i), self.scope)
1178 value[member.name] = member.value
1181 raise FieldError("Error occurred while accessing field {} of type {}".format(self.name, CTFTypeId.type_name(self.declaration.type)))
1186 """Return the scope of a field or None on error."""
1192 // =================================================================
1194 // =================================================================
1196 /* =================================================================
1198 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
1200 %rename("_bt_ctf_clock_create") bt_ctf_clock_create(const char *name);
1201 %rename("_bt_ctf_clock_set_description") bt_ctf_clock_set_description(struct bt_ctf_clock *clock, const char *desc);
1202 %rename("_bt_ctf_clock_set_frequency") bt_ctf_clock_set_frequency(struct bt_ctf_clock *clock, uint64_t freq);
1203 %rename("_bt_ctf_clock_set_precision") bt_ctf_clock_set_precision(struct bt_ctf_clock *clock, uint64_t precision);
1204 %rename("_bt_ctf_clock_set_offset_s") bt_ctf_clock_set_offset_s(struct bt_ctf_clock *clock, uint64_t offset_s);
1205 %rename("_bt_ctf_clock_set_offset") bt_ctf_clock_set_offset(struct bt_ctf_clock *clock, uint64_t offset);
1206 %rename("_bt_ctf_clock_set_is_absolute") bt_ctf_clock_set_is_absolute(struct bt_ctf_clock *clock, int is_absolute);
1207 %rename("_bt_ctf_clock_set_time") bt_ctf_clock_set_time(struct bt_ctf_clock *clock, uint64_t time);
1208 %rename("_bt_ctf_clock_get") bt_ctf_clock_get(struct bt_ctf_clock *clock);
1209 %rename("_bt_ctf_clock_put") bt_ctf_clock_put(struct bt_ctf_clock *clock);
1211 struct bt_ctf_clock *bt_ctf_clock_create(const char *name);
1212 int bt_ctf_clock_set_description(struct bt_ctf_clock *clock, const char *desc);
1213 int bt_ctf_clock_set_frequency(struct bt_ctf_clock *clock, uint64_t freq);
1214 int bt_ctf_clock_set_precision(struct bt_ctf_clock *clock, uint64_t precision);
1215 int bt_ctf_clock_set_offset_s(struct bt_ctf_clock *clock, uint64_t offset_s);
1216 int bt_ctf_clock_set_offset(struct bt_ctf_clock *clock, uint64_t offset);
1217 int bt_ctf_clock_set_is_absolute(struct bt_ctf_clock *clock, int is_absolute);
1218 int bt_ctf_clock_set_time(struct bt_ctf_clock *clock, uint64_t time);
1219 void bt_ctf_clock_get(struct bt_ctf_clock *clock);
1220 void bt_ctf_clock_put(struct bt_ctf_clock *clock);
1222 /* =================================================================
1224 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
1226 %rename("_bt_ctf_field_type_integer_create") bt_ctf_field_type_integer_create(unsigned int size);
1227 %rename("_bt_ctf_field_type_integer_set_signed") bt_ctf_field_type_integer_set_signed(struct bt_ctf_field_type *integer, int is_signed);
1228 %rename("_bt_ctf_field_type_integer_set_base") bt_ctf_field_type_integer_set_base(struct bt_ctf_field_type *integer, enum bt_ctf_integer_base base);
1229 %rename("_bt_ctf_field_type_integer_set_encoding") bt_ctf_field_type_integer_set_encoding(struct bt_ctf_field_type *integer, enum ctf_string_encoding encoding);
1230 %rename("_bt_ctf_field_type_enumeration_create") bt_ctf_field_type_enumeration_create(struct bt_ctf_field_type *integer_container_type);
1231 %rename("_bt_ctf_field_type_enumeration_add_mapping") bt_ctf_field_type_enumeration_add_mapping(struct bt_ctf_field_type *enumeration, const char *string, int64_t range_start, int64_t range_end);
1232 %rename("_bt_ctf_field_type_floating_point_create") bt_ctf_field_type_floating_point_create(void);
1233 %rename("_bt_ctf_field_type_floating_point_set_exponent_digits") bt_ctf_field_type_floating_point_set_exponent_digits(struct bt_ctf_field_type *floating_point, unsigned int exponent_digits);
1234 %rename("_bt_ctf_field_type_floating_point_set_mantissa_digits") bt_ctf_field_type_floating_point_set_mantissa_digits(struct bt_ctf_field_type *floating_point, unsigned int mantissa_digits);
1235 %rename("_bt_ctf_field_type_structure_create") bt_ctf_field_type_structure_create(void);
1236 %rename("_bt_ctf_field_type_structure_add_field") bt_ctf_field_type_structure_add_field(struct bt_ctf_field_type *structure, struct bt_ctf_field_type *field_type, const char *field_name);
1237 %rename("_bt_ctf_field_type_variant_create") bt_ctf_field_type_variant_create(struct bt_ctf_field_type *enum_tag, const char *tag_name);
1238 %rename("_bt_ctf_field_type_variant_add_field") bt_ctf_field_type_variant_add_field(struct bt_ctf_field_type *variant, struct bt_ctf_field_type *field_type, const char *field_name);
1239 %rename("_bt_ctf_field_type_array_create") bt_ctf_field_type_array_create(struct bt_ctf_field_type *element_type, unsigned int length);
1240 %rename("_bt_ctf_field_type_sequence_create") bt_ctf_field_type_sequence_create(struct bt_ctf_field_type *element_type, const char *length_field_name);
1241 %rename("_bt_ctf_field_type_string_create") bt_ctf_field_type_string_create(void);
1242 %rename("_bt_ctf_field_type_string_set_encoding") bt_ctf_field_type_string_set_encoding(struct bt_ctf_field_type *string, enum ctf_string_encoding encoding);
1243 %rename("_bt_ctf_field_type_set_alignment") bt_ctf_field_type_set_alignment(struct bt_ctf_field_type *type, unsigned int alignment);
1244 %rename("_bt_ctf_field_type_set_byte_order") bt_ctf_field_type_set_byte_order(struct bt_ctf_field_type *type, enum bt_ctf_byte_order byte_order);
1245 %rename("_bt_ctf_field_type_get") bt_ctf_field_type_get(struct bt_ctf_field_type *type);
1246 %rename("_bt_ctf_field_type_put") bt_ctf_field_type_put(struct bt_ctf_field_type *type);
1248 struct bt_ctf_field_type *bt_ctf_field_type_integer_create(unsigned int size);
1249 int bt_ctf_field_type_integer_set_signed(struct bt_ctf_field_type *integer, int is_signed);
1250 int bt_ctf_field_type_integer_set_base(struct bt_ctf_field_type *integer, enum bt_ctf_integer_base base);
1251 int bt_ctf_field_type_integer_set_encoding(struct bt_ctf_field_type *integer, enum ctf_string_encoding encoding);
1252 struct bt_ctf_field_type *bt_ctf_field_type_enumeration_create(struct bt_ctf_field_type *integer_container_type);
1253 int bt_ctf_field_type_enumeration_add_mapping(struct bt_ctf_field_type *enumeration, const char *string, int64_t range_start, int64_t range_end);
1254 struct bt_ctf_field_type *bt_ctf_field_type_floating_point_create(void);
1255 int bt_ctf_field_type_floating_point_set_exponent_digits(struct bt_ctf_field_type *floating_point, unsigned int exponent_digits);
1256 int bt_ctf_field_type_floating_point_set_mantissa_digits(struct bt_ctf_field_type *floating_point, unsigned int mantissa_digits);
1257 struct bt_ctf_field_type *bt_ctf_field_type_structure_create(void);
1258 int bt_ctf_field_type_structure_add_field(struct bt_ctf_field_type *structure, struct bt_ctf_field_type *field_type, const char *field_name);
1259 struct bt_ctf_field_type *bt_ctf_field_type_variant_create(struct bt_ctf_field_type *enum_tag, const char *tag_name);
1260 int bt_ctf_field_type_variant_add_field(struct bt_ctf_field_type *variant, struct bt_ctf_field_type *field_type, const char *field_name);
1261 struct bt_ctf_field_type *bt_ctf_field_type_array_create(struct bt_ctf_field_type *element_type, unsigned int length);
1262 struct bt_ctf_field_type *bt_ctf_field_type_sequence_create(struct bt_ctf_field_type *element_type, const char *length_field_name);
1263 struct bt_ctf_field_type *bt_ctf_field_type_string_create(void);
1264 int bt_ctf_field_type_string_set_encoding(struct bt_ctf_field_type *string, enum ctf_string_encoding encoding);
1265 int bt_ctf_field_type_set_alignment(struct bt_ctf_field_type *type, unsigned int alignment);
1266 int bt_ctf_field_type_set_byte_order(struct bt_ctf_field_type *type, enum bt_ctf_byte_order byte_order);
1267 void bt_ctf_field_type_get(struct bt_ctf_field_type *type);
1268 void bt_ctf_field_type_put(struct bt_ctf_field_type *type);
1270 /* =================================================================
1272 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
1274 %rename("_bt_ctf_field_create") bt_ctf_field_create(struct bt_ctf_field_type *type);
1275 %rename("_bt_ctf_field_structure_get_field") bt_ctf_field_structure_get_field(struct bt_ctf_field *structure, const char *name);
1276 %rename("_bt_ctf_field_array_get_field") bt_ctf_field_array_get_field(struct bt_ctf_field *array, uint64_t index);
1277 %rename("_bt_ctf_field_sequence_set_length") bt_ctf_field_sequence_set_length(struct bt_ctf_field *sequence, struct bt_ctf_field *length_field);
1278 %rename("_bt_ctf_field_sequence_get_field") bt_ctf_field_sequence_get_field(struct bt_ctf_field *sequence, uint64_t index);
1279 %rename("_bt_ctf_field_variant_get_field") bt_ctf_field_variant_get_field(struct bt_ctf_field *variant, struct bt_ctf_field *tag);
1280 %rename("_bt_ctf_field_enumeration_get_container") bt_ctf_field_enumeration_get_container(struct bt_ctf_field *enumeration);
1281 %rename("_bt_ctf_field_signed_integer_set_value") bt_ctf_field_signed_integer_set_value(struct bt_ctf_field *integer, int64_t value);
1282 %rename("_bt_ctf_field_unsigned_integer_set_value") bt_ctf_field_unsigned_integer_set_value(struct bt_ctf_field *integer, uint64_t value);
1283 %rename("_bt_ctf_field_floating_point_set_value") bt_ctf_field_floating_point_set_value(struct bt_ctf_field *floating_point, double value);
1284 %rename("_bt_ctf_field_string_set_value") bt_ctf_field_string_set_value(struct bt_ctf_field *string, const char *value);
1285 %rename("_bt_ctf_field_get") bt_ctf_field_get(struct bt_ctf_field *field);
1286 %rename("_bt_ctf_field_put") bt_ctf_field_put(struct bt_ctf_field *field);
1288 struct bt_ctf_field *bt_ctf_field_create(struct bt_ctf_field_type *type);
1289 struct bt_ctf_field *bt_ctf_field_structure_get_field(struct bt_ctf_field *structure, const char *name);
1290 struct bt_ctf_field *bt_ctf_field_array_get_field(struct bt_ctf_field *array, uint64_t index);
1291 int bt_ctf_field_sequence_set_length(struct bt_ctf_field *sequence, struct bt_ctf_field *length_field);
1292 struct bt_ctf_field *bt_ctf_field_sequence_get_field(struct bt_ctf_field *sequence, uint64_t index);
1293 struct bt_ctf_field *bt_ctf_field_variant_get_field(struct bt_ctf_field *variant, struct bt_ctf_field *tag);
1294 struct bt_ctf_field *bt_ctf_field_enumeration_get_container(struct bt_ctf_field *enumeration);
1295 int bt_ctf_field_signed_integer_set_value(struct bt_ctf_field *integer, int64_t value);
1296 int bt_ctf_field_unsigned_integer_set_value(struct bt_ctf_field *integer, uint64_t value);
1297 int bt_ctf_field_floating_point_set_value(struct bt_ctf_field *floating_point, double value);
1298 int bt_ctf_field_string_set_value(struct bt_ctf_field *string, const char *value);
1299 void bt_ctf_field_get(struct bt_ctf_field *field);
1300 void bt_ctf_field_put(struct bt_ctf_field *field);
1302 /* =================================================================
1304 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
1306 %rename("_bt_ctf_event_class_create") bt_ctf_event_class_create(const char *name);
1307 %rename("_bt_ctf_event_class_add_field") bt_ctf_event_class_add_field(struct bt_ctf_event_class *event_class, struct bt_ctf_field_type *type, const char *name);
1308 %rename("_bt_ctf_event_class_get") bt_ctf_event_class_get(struct bt_ctf_event_class *event_class);
1309 %rename("_bt_ctf_event_class_put") bt_ctf_event_class_put(struct bt_ctf_event_class *event_class);
1310 %rename("_bt_ctf_event_create") bt_ctf_event_create(struct bt_ctf_event_class *event_class);
1311 %rename("_bt_ctf_event_set_payload") bt_ctf_event_set_payload(struct bt_ctf_event *event, const char *name, struct bt_ctf_field *value);
1312 %rename("_bt_ctf_event_get_payload") bt_ctf_event_get_payload(struct bt_ctf_event *event, const char *name);
1313 %rename("_bt_ctf_event_get") bt_ctf_event_get(struct bt_ctf_event *event);
1314 %rename("_bt_ctf_event_put") bt_ctf_event_put(struct bt_ctf_event *event);
1316 struct bt_ctf_event_class *bt_ctf_event_class_create(const char *name);
1317 int bt_ctf_event_class_add_field(struct bt_ctf_event_class *event_class, struct bt_ctf_field_type *type, const char *name);
1318 void bt_ctf_event_class_get(struct bt_ctf_event_class *event_class);
1319 void bt_ctf_event_class_put(struct bt_ctf_event_class *event_class);
1320 struct bt_ctf_event *bt_ctf_event_create(struct bt_ctf_event_class *event_class);
1321 int bt_ctf_event_set_payload(struct bt_ctf_event *event, const char *name, struct bt_ctf_field *value);
1322 struct bt_ctf_field *bt_ctf_event_get_payload(struct bt_ctf_event *event, const char *name);
1323 void bt_ctf_event_get(struct bt_ctf_event *event);
1324 void bt_ctf_event_put(struct bt_ctf_event *event);
1326 /* =================================================================
1328 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
1330 %rename("_bt_ctf_stream_class_create") bt_ctf_stream_class_create(const char *name);
1331 %rename("_bt_ctf_stream_class_set_clock") bt_ctf_stream_class_set_clock(struct bt_ctf_stream_class *stream_class, struct bt_ctf_clock *clock);
1332 %rename("_bt_ctf_stream_class_add_event_class") bt_ctf_stream_class_add_event_class(struct bt_ctf_stream_class *stream_class, struct bt_ctf_event_class *event_class);
1333 %rename("_bt_ctf_stream_class_get") bt_ctf_stream_class_get(struct bt_ctf_stream_class *stream_class);
1334 %rename("_bt_ctf_stream_class_put") bt_ctf_stream_class_put(struct bt_ctf_stream_class *stream_class);
1335 %rename("_bt_ctf_stream_append_discarded_events") bt_ctf_stream_append_discarded_events(struct bt_ctf_stream *stream, uint64_t event_count);
1336 %rename("_bt_ctf_stream_append_event") bt_ctf_stream_append_event(struct bt_ctf_stream *stream, struct bt_ctf_event *event);
1337 %rename("_bt_ctf_stream_flush") bt_ctf_stream_flush(struct bt_ctf_stream *stream);
1338 %rename("_bt_ctf_stream_get") bt_ctf_stream_get(struct bt_ctf_stream *stream);
1339 %rename("_bt_ctf_stream_put") bt_ctf_stream_put(struct bt_ctf_stream *stream);
1341 struct bt_ctf_stream_class *bt_ctf_stream_class_create(const char *name);
1342 int bt_ctf_stream_class_set_clock(struct bt_ctf_stream_class *stream_class, struct bt_ctf_clock *clock);
1343 int bt_ctf_stream_class_add_event_class(struct bt_ctf_stream_class *stream_class, struct bt_ctf_event_class *event_class);
1344 void bt_ctf_stream_class_get(struct bt_ctf_stream_class *stream_class);
1345 void bt_ctf_stream_class_put(struct bt_ctf_stream_class *stream_class);
1346 void bt_ctf_stream_append_discarded_events(struct bt_ctf_stream *stream, uint64_t event_count);
1347 int bt_ctf_stream_append_event(struct bt_ctf_stream *stream, struct bt_ctf_event *event);
1348 int bt_ctf_stream_flush(struct bt_ctf_stream *stream);
1349 void bt_ctf_stream_get(struct bt_ctf_stream *stream);
1350 void bt_ctf_stream_put(struct bt_ctf_stream *stream);
1352 /* =================================================================
1354 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
1356 %rename("_bt_ctf_writer_create") bt_ctf_writer_create(const char *path);
1357 %rename("_bt_ctf_writer_create_stream") bt_ctf_writer_create_stream(struct bt_ctf_writer *writer, struct bt_ctf_stream_class *stream_class);
1358 %rename("_bt_ctf_writer_add_environment_field") bt_ctf_writer_add_environment_field(struct bt_ctf_writer *writer, const char *name, const char *value);
1359 %rename("_bt_ctf_writer_add_clock") bt_ctf_writer_add_clock(struct bt_ctf_writer *writer, struct bt_ctf_clock *clock);
1360 %newobject bt_ctf_writer_get_metadata_string;
1361 %rename("_bt_ctf_writer_get_metadata_string") bt_ctf_writer_get_metadata_string(struct bt_ctf_writer *writer);
1362 %rename("_bt_ctf_writer_flush_metadata") bt_ctf_writer_flush_metadata(struct bt_ctf_writer *writer);
1363 %rename("_bt_ctf_writer_set_byte_order") bt_ctf_writer_set_byte_order(struct bt_ctf_writer *writer, enum bt_ctf_byte_order byte_order);
1364 %rename("_bt_ctf_writer_get") bt_ctf_writer_get(struct bt_ctf_writer *writer);
1365 %rename("_bt_ctf_writer_put") bt_ctf_writer_put(struct bt_ctf_writer *writer);
1367 struct bt_ctf_writer *bt_ctf_writer_create(const char *path);
1368 struct bt_ctf_stream *bt_ctf_writer_create_stream(struct bt_ctf_writer *writer, struct bt_ctf_stream_class *stream_class);
1369 int bt_ctf_writer_add_environment_field(struct bt_ctf_writer *writer, const char *name, const char *value);
1370 int bt_ctf_writer_add_clock(struct bt_ctf_writer *writer, struct bt_ctf_clock *clock);
1371 char *bt_ctf_writer_get_metadata_string(struct bt_ctf_writer *writer);
1372 void bt_ctf_writer_flush_metadata(struct bt_ctf_writer *writer);
1373 int bt_ctf_writer_set_byte_order(struct bt_ctf_writer *writer, enum bt_ctf_byte_order byte_order);
1374 void bt_ctf_writer_get(struct bt_ctf_writer *writer);
1375 void bt_ctf_writer_put(struct bt_ctf_writer *writer);
1382 def __init__(self, name):
1383 self._c = _bt_ctf_clock_create(name)
1385 raise ValueError("Invalid clock name.")
1388 _bt_ctf_clock_put(self._c)
1391 Set the clock's description. The description appears in the clock's TSDL
1394 def set_description(self, desc):
1395 ret = _bt_ctf_clock_set_description(self._c, desc)
1397 raise ValueError("Invalid clock description.")
1400 Set the clock's frequency (Hz).
1402 def set_frequency(self, freq):
1403 ret = _bt_ctf_clock_set_frequency(self._c, freq)
1405 raise ValueError("Invalid frequency value.")
1408 Set the clock's precision (in clock ticks).
1410 def set_precision(self, precision):
1411 ret = _bt_ctf_clock_set_precision(self._c, precision)
1414 Set the clock's offset in seconds from POSIX.1 Epoch.
1416 def set_offset_seconds(self, offset_s):
1417 ret = _bt_ctf_clock_set_offset_s(self._c, offset_s)
1419 raise ValueError("Invalid offset value.")
1422 Set the clock's offset in ticks from POSIX.1 Epoch + offset in seconds.
1424 def set_offset_seconds(self, offset):
1425 ret = _bt_ctf_clock_set_offset(self._c, offset)
1427 raise ValueError("Invalid offset value.")
1430 Set a clock's absolute attribute. A clock is absolute if the clock
1431 is a global reference across the trace's other clocks.
1433 def set_is_absolute(self, is_absolute):
1434 ret = _bt_ctf_clock_set_is_absolute(self._c, is_absolute)
1436 raise ValueError("Could not set the clock's absolute attribute.")
1439 Set the current time in nanoseconds since the clock's origin (offset and
1440 offset_s attributes). The clock's value will be sampled as events are
1441 appended to a stream.
1443 def set_time(self, time):
1444 ret = _bt_ctf_clock_set_time(self._c, time)
1446 raise ValueError("Invalid time value.")
1450 FieldType should not be instantiated directly. Please instantiate
1451 one of the concrete FieldType classes.
1454 # These values are based on the bt_ctf_integer_base enum
1455 # declared in event-types.h.
1456 INTEGER_BASE_UNKNOWN = -1
1457 INTEGER_BASE_BINARY = 2
1458 INTEGER_BASE_OCTAL = 8
1459 INTEGER_BASE_DECIMAL = 10
1460 INTEGER_BASE_HEXADECIMAL = 16
1463 if self._ft is None:
1464 raise ValueError("FieldType creation failed.")
1467 _bt_ctf_field_type_put(self._ft)
1470 Set the field type's alignment. Defaults to 1 (bit-aligned). However,
1471 some types, such as structures and string, may impose other alignment
1474 def set_alignment(self, alignment):
1475 ret = _bt_ctf_field_type_set_alignment(self._ft, alignment)
1477 raise ValueError("Invalid alignment value.")
1480 Set the field type's byte order. Use constants defined in the ByteOrder
1483 def set_byte_order(self, byte_order):
1484 ret = _bt_ctf_field_type_set_byte_order(self._ft, byte_order)
1486 raise ValueError("Could not set byte order value.")
1488 class FieldTypeInteger(FieldType):
1490 Create a new integer field type of the given size.
1492 def __init__(self, size):
1493 self._ft = _bt_ctf_field_type_integer_create(size)
1497 Set an integer type's signedness attribute.
1499 def set_signed(self, signed):
1500 ret = _bt_ctf_field_type_integer_set_signed(self._ft, signed)
1502 raise ValueError("Could not set signed attribute.")
1505 Set the integer type's base used to pretty-print the resulting trace.
1506 The base must be a constant of the IntegerBase class.
1508 def set_base(self, base):
1509 ret = _bt_ctf_field_type_integer_set_base(self._ft, base)
1511 raise ValueError("Could not set base value.")
1514 An integer encoding may be set to signal that the integer must be printed
1515 as a text character. Must be a constant from the CTFStringEncoding class.
1517 def set_encoding(self, encoding):
1518 ret = _bt_ctf_field_type_integer_set_encoding(self._ft, encoding)
1520 raise ValueError("Could not set integer encoding.")
1522 class FieldTypeEnumeration(FieldType):
1524 Create a new enumeration field type with the given underlying type.
1526 def __init__(self, integer_type):
1527 if integer_type is None or not isinstance(integer_type, CTFWriter.FieldTypeInteger):
1528 raise TypeError("Invalid integer container.")
1530 self._ft = _bt_ctf_field_type_enumeration_create(integer_type._ft)
1534 Add a mapping to the enumeration. The range's values are inclusive.
1536 def add_mapping(self, name, range_start, range_end):
1537 ret = _bt_ctf_field_type_enumeration_add_mapping(self._ft, name, range_start, range_end)
1539 raise ValueError("Could not add mapping to enumeration type.")
1541 class FieldTypeFloatingPoint(FieldType):
1548 Create a new floating point field type.
1551 self._ft = _bt_ctf_field_type_floating_point_create()
1555 Set the number of exponent digits to use to store the floatingpoint field.
1556 The only values currently supported are FLT_EXP_DIG and DBL_EXP_DIG which
1557 are defined as constants of this class.
1559 def set_exponent_digits(self, exponent_digits):
1560 ret = _bt_ctf_field_type_floating_point_set_exponent_digits(self._ft, exponent_digits)
1562 raise ValueError("Could not set exponent digit count.")
1565 Set the numberof mantissa digits to use to store the floatingpoint field.
1566 The only values currently supported are FLT_MANT_DIG and DBL_MANT_DIG which
1567 are defined as constants of this class.
1569 def set_mantissa_digits(self, mantissa_digits):
1570 ret = _bt_ctf_field_type_floating_point_set_mantissa_digits(self._ft, mantissa_digits)
1572 raise ValueError("Could not set mantissa digit count.")
1574 class FieldTypeStructure(FieldType):
1576 Create a new structure field type.
1579 self._ft = _bt_ctf_field_type_structure_create()
1583 Add a field of type "field_type" to the structure.
1585 def add_field(self, field_type, field_name):
1586 ret = _bt_ctf_field_type_structure_add_field(self._ft, field_type._ft, field_name)
1588 raise ValueError("Could not add field to structure.")
1590 class FieldTypeVariant(FieldType):
1592 Create a new variant field type.
1594 def __init__(self, enum_tag, tag_name):
1595 if enum_tag is None or not isinstance(enum_tag, CTFWriter.FieldTypeEnumeration):
1596 raise TypeError("Invalid tag type; must be of type FieldTypeEnumeration.")
1598 self._ft = _bt_ctf_field_type_variant_create(enum_tag._ft, tag_name)
1602 Add a field of type "field_type" to the variant.
1604 def add_field(self, field_type, field_name):
1605 ret = _bt_ctf_field_type_variant_add_field(self._ft, field_type._ft, field_name)
1607 raise ValueError("Could not add field to variant.")
1609 class FieldTypeArray(FieldType):
1611 Create a new array field type.
1613 def __init__(self, element_type, length):
1614 self._ft = _bt_ctf_field_type_array_create(element_type._ft, length)
1617 class FieldTypeSequence(FieldType):
1619 Create a new sequence field type.
1621 def __init__(self, element_type, length_field_name):
1622 self._ft = _bt_ctf_field_type_sequence_create(element_type._ft, length_field_name)
1625 class FieldTypeString(FieldType):
1627 Create a new string field type.
1630 self._ft = _bt_ctf_field_type_string_create()
1634 Set a string type's encoding. Must be a constant from the CTFStringEncoding class.
1636 def set_encoding(self, encoding):
1637 ret = _bt_ctf_field_type_string_set_encoding(self._ft, encoding)
1639 raise ValueError("Could not set string encoding.")
1642 Create an instance of a field.
1645 def create_field(self, field_type):
1646 if field_type is None or not isinstance(field_type, CTFWriter.FieldType):
1647 raise TypeError("Invalid field_type. Type must be a FieldType-derived class.")
1649 if isinstance(field_type, CTFWriter.FieldTypeInteger):
1650 return CTFWriter.FieldInteger(field_type)
1651 elif isinstance(field_type, CTFWriter.FieldTypeEnumeration):
1652 return CTFWriter.FieldEnumeration(field_type)
1653 elif isinstance(field_type, CTFWriter.FieldTypeFloatingPoint):
1654 return CTFWriter.FieldFloatingPoint(field_type)
1655 elif isinstance(field_type, CTFWriter.FieldTypeStructure):
1656 return CTFWriter.FieldStructure(field_type)
1657 elif isinstance(field_type, CTFWriter.FieldTypeVariant):
1658 return CTFWriter.FieldVariant(field_type)
1659 elif isinstance(field_type, CTFWriter.FieldTypeArray):
1660 return CTFWriter.FieldArray(field_type)
1661 elif isinstance(field_type, CTFWriter.FieldTypeSequence):
1662 return CTFWriter.FieldSequence(field_type)
1663 elif isinstance(field_type, CTFWriter.FieldTypeString):
1664 return CTFWriter.FieldString(field_type)
1668 Base class, do not instantiate.
1670 def __init__(self, field_type):
1671 if not isinstance(field_type, CTFWriter.FieldType):
1672 raise TypeError("Invalid field_type argument.")
1674 self._f = _bt_ctf_field_create(field_type._ft)
1676 raise ValueError("Field creation failed.")
1679 _bt_ctf_field_put(self._f)
1682 def _create_field_from_native_instance(native_field_instance):
1684 CTFTypeId.INTEGER : CTFWriter.FieldInteger,
1685 CTFTypeId.FLOAT : CTFWriter.FieldFloatingPoint,
1686 CTFTypeId.ENUM : CTFWriter.FieldEnumeration,
1687 CTFTypeId.STRING : CTFWriter.FieldString,
1688 CTFTypeId.STRUCT : CTFWriter.FieldStructure,
1689 CTFTypeId.VARIANT : CTFWriter.FieldVariant,
1690 CTFTypeId.ARRAY : CTFWriter.FieldArray,
1691 CTFTypeId.SEQUENCE : CTFWriter.FieldSequence
1694 field_type = _bt_python_get_field_type(native_field_instance)
1695 if field_type == CTFTypeId.UNKNOWN:
1696 raise TypeError("Invalid field instance")
1698 field = CTFWriter.Field.__new__(CTFWriter.Field)
1699 field._f = native_field_instance
1700 field.__class__ = type_dict[field_type]
1703 class FieldInteger(Field):
1705 Set an integer field's value.
1707 def set_value(self, value):
1708 signedness = _bt_python_field_integer_get_signedness(self._f)
1710 raise TypeError("Invalid integer instance.")
1713 ret = _bt_ctf_field_unsigned_integer_set_value(self._f, value)
1715 ret = _bt_ctf_field_signed_integer_set_value(self._f, value)
1718 raise ValueError("Could not set integer field value.")
1720 class FieldEnumeration(Field):
1722 Return the enumeration's underlying container field (an integer field).
1724 def get_container(self):
1725 container = CTFWriter.FieldInteger.__new__(CTFWriter.FieldInteger)
1726 container._f = _bt_ctf_field_enumeration_get_container(self._f)
1727 if container._f is None:
1728 raise TypeError("Invalid enumeration field type.")
1731 class FieldFloatingPoint(Field):
1733 Set a floating point field's value.
1735 def set_value(self, value):
1736 ret = _bt_ctf_field_floating_point_set_value(self._f, value)
1738 raise ValueError("Could not set floating point field value.")
1740 class FieldStructure(Field):
1742 Get the structure's field corresponding to the provided field name.
1744 def get_field(self, field_name):
1745 native_instance = _bt_ctf_field_structure_get_field(self._f, field_name)
1746 if native_instance is None:
1747 raise ValueError("Invalid field_name provided.")
1748 return CTFWriter.Field._create_field_from_native_instance(native_instance)
1750 class FieldVariant(Field):
1752 Return the variant's selected field. The "tag" field is the selector enum field.
1754 def get_field(self, tag):
1755 native_instance = _bt_ctf_field_variant_get_field(self._f, tag._f)
1756 if native_instance is None:
1757 raise ValueError("Invalid tag provided.")
1758 return CTFWriter.Field._create_field_from_native_instance(native_instance)
1760 class FieldArray(Field):
1762 Return the array's field at position "index".
1764 def get_field(self, index):
1765 native_instance = _bt_ctf_field_array_get_field(self._f, index)
1766 if native_instance is None:
1767 raise IndexError("Invalid index provided.")
1768 return CTFWriter.Field._create_field_from_native_instance(native_instance)
1770 class FieldSequence(Field):
1772 Set the sequence's length field (IntegerField).
1774 def set_length(self, length):
1775 if not isinstance(length, CTFWriter.FieldInteger):
1776 raise TypeError("Invalid length field.")
1777 ret = _bt_ctf_field_sequence_set_length(self._f, length._f)
1779 raise ValueError("Could not set sequence length.")
1782 Return the sequence's field at position "index".
1784 def get_field(self, index):
1785 native_instance = _bt_ctf_field_sequence_get_field(self._f, index)
1786 if native_instance is None:
1787 raise ValueError("Could not get sequence element at index.")
1788 return CTFWriter.Field._create_field_from_native_instance(native_instance)
1790 class FieldString(Field):
1792 Set a string field's value.
1794 def set_value(self, value):
1795 ret = _bt_ctf_field_string_set_value(self._f, value)
1797 raise ValueError("Could not set string field value.")
1801 Create a new event class of the given name.
1803 def __init__(self, name):
1804 self._ec = _bt_ctf_event_class_create(name)
1805 if self._ec is None:
1806 raise ValueError("Event class creation failed.")
1809 _bt_ctf_event_class_put(self._ec)
1812 Add a field of type "field_type" to the event class.
1814 def add_field(self, field_type, field_name):
1815 ret = _bt_ctf_event_class_add_field(self._ec, field_type._ft, field_name)
1817 raise ValueError("Could not add field to event class.")
1821 Create a new event of the given event class.
1823 def __init__(self, event_class):
1824 if not isinstance(event_class, CTFWriter.EventClass):
1825 raise TypeError("Invalid event_class argument.")
1827 self._e = _bt_ctf_event_create(event_class._ec)
1829 raise ValueError("Event creation failed.")
1832 _bt_ctf_event_put(self._e)
1835 Set a manually created field as an event's payload.
1837 def set_payload(self, field_name, value):
1838 if not isinstance(value, CTFWriter.Field):
1839 raise TypeError("Invalid value type.")
1840 ret = _bt_ctf_event_set_payload(self._e, field_name, value._f)
1842 raise ValueError("Could not set event field payload.")
1845 Set a manually created field as an event's payload.
1847 def get_payload(self, field_name):
1848 native_instance = _bt_ctf_event_get_payload(self._e, field_name)
1849 if native_instance is None:
1850 raise ValueError("Could not get event payload.")
1851 return CTFWriter.Field._create_field_from_native_instance(native_instance)
1855 Create a new stream class of the given name.
1857 def __init__(self, name):
1858 self._sc = _bt_ctf_stream_class_create(name)
1859 if self._sc is None:
1860 raise ValueError("Stream class creation failed.")
1863 _bt_ctf_stream_class_put(self._sc)
1866 Assign a clock to a stream class.
1868 def set_clock(self, clock):
1869 if not isinstance(clock, CTFWriter.Clock):
1870 raise TypeError("Invalid clock type.")
1872 ret = _bt_ctf_stream_class_set_clock(self._sc, clock._c)
1874 raise ValueError("Could not set stream class clock.")
1877 Add an event class to a stream class. New events can be added even after a
1878 stream has beem instanciated and events have been appended. However, a stream
1879 will not accept events of a class that has not been registered beforehand.
1881 def add_event_class(self, event_class):
1882 if not isinstance(event_class, CTFWriter.EventClass):
1883 raise TypeError("Invalid event_class type.")
1885 ret = _bt_ctf_stream_class_add_event_class(self._sc, event_class._ec)
1887 raise ValueError("Could not add event class.")
1891 Create a stream of the given class.
1893 def __init__(self, stream_class):
1894 if not isinstance(stream_class, CTFWriter.StreamClass):
1895 raise TypeError("Invalid stream_class type.")
1897 self._s = _bt_ctf_stream_create(stream_class._sc)
1899 raise ValueError("Stream creation failed.")
1902 _bt_ctf_stream_put(self._s)
1905 Increase the current packet's discarded event count.
1907 def append_discarded_events(self, event_count):
1908 ret = _bt_ctf_stream_append_discarded_events(self._s, event_count)
1910 raise ValueError("Could not append discarded events.")
1913 Append "event" to the stream's current packet. The stream's associated clock
1914 will be sampled during this call. The event shall not be modified after
1915 being appended to a stream.
1917 def append_event(self, event):
1918 ret = _bt_ctf_stream_append_event(self._s, event._e)
1920 raise ValueError("Could not append event to stream.")
1923 The stream's current packet's events will be flushed to disk. Events
1924 subsequently appended to the stream will be added to a new packet.
1927 ret = _bt_ctf_stream_flush(self._s)
1929 raise ValueError("Could not flush stream.")
1933 Create a new writer that will produce a trace in the given path.
1935 def __init__(self, path):
1936 self._w = _bt_ctf_writer_create(path)
1938 raise ValueError("Writer creation failed.")
1941 _bt_ctf_writer_put(self._w)
1944 Create a new stream instance and register it to the writer.
1946 def create_stream(self, stream_class):
1947 if not isinstance(stream_class, CTFWriter.StreamClass):
1948 raise TypeError("Invalid stream_class type.")
1950 stream = CTFWriter.Stream.__new__(CTFWriter.Stream)
1951 stream._s = _bt_ctf_writer_create_stream(self._w, stream_class._sc)
1955 Add an environment field to the trace.
1957 def add_environment_field(self, name, value):
1958 ret = _bt_ctf_writer_add_environment_field(self._w, name, value)
1960 raise ValueError("Could not add environment field to trace.")
1963 Add a clock to the trace. Clocks assigned to stream classes must be
1964 registered to the writer.
1966 def add_clock(self, clock):
1967 ret = _bt_ctf_writer_add_clock(self._w, clock._c)
1969 raise ValueError("Could not add clock to Writer.")
1972 Get the trace's TSDL meta-data.
1974 def get_metadata(self):
1975 return _bt_ctf_writer_get_metadata_string(self._w)
1978 Flush the trace's metadata to the metadata file.
1980 def flush_metadata(self):
1981 _bt_ctf_writer_flush_metadata(self._w)
1984 Set the trace's byte order. Must be a constant from the ByteOrder
1985 class. Defaults to BYTE_ORDER_NATIVE, the host machine's endianness.
1987 def set_byte_order(self, byte_order):
1988 ret = _bt_ctf_writer_set_byte_order(self._w, byte_order)
1990 raise ValueError("Could not set trace's byte order.")