|
#!/usr/bin/python3
|
|
|
|
from babeltrace import *
|
|
import tempfile
|
|
|
|
trace_path = tempfile.mkdtemp()
|
|
|
|
print('trace path: {}'.format(trace_path))
|
|
|
|
writer = CTFWriter.Writer(trace_path)
|
|
|
|
clock = CTFWriter.Clock('my_clock')
|
|
clock.description = 'this is my clock'
|
|
writer.add_clock(clock)
|
|
|
|
stream_class = CTFWriter.StreamClass('my_stream')
|
|
stream_class.clock = clock
|
|
|
|
event_class = CTFWriter.EventClass('my_event')
|
|
|
|
# 32-bit signed integer field declaration
|
|
int32_field_decl = CTFWriter.IntegerFieldDeclaration(32)
|
|
int32_field_decl.signed = True
|
|
|
|
# string field declaration
|
|
string_field_decl = CTFWriter.StringFieldDeclaration()
|
|
string_field_decl.encoding = CTFStringEncoding.UTF8
|
|
|
|
# enumeration field declaration (variant's tag)
|
|
enum_field_decl = CTFWriter.EnumerationFieldDeclaration(int32_field_decl)
|
|
enum_field_decl.add_mapping('INT', 0, 0)
|
|
enum_field_decl.add_mapping('STRING', 1, 1)
|
|
|
|
# variant field declaration (variant's tag field will be named `vartag`)
|
|
variant_field_decl = CTFWriter.VariantFieldDeclaration(enum_field_decl, 'vartag')
|
|
|
|
# register selectable fields to variant
|
|
variant_field_decl.add_field(int32_field_decl, 'INT')
|
|
variant_field_decl.add_field(string_field_decl, 'STRING')
|
|
|
|
event_class.add_field(enum_field_decl, 'vartag')
|
|
event_class.add_field(variant_field_decl, 'var')
|
|
|
|
stream_class.add_event_class(event_class)
|
|
|
|
stream = writer.create_stream(stream_class)
|
|
|
|
# first event: integer is selected
|
|
event = CTFWriter.Event(event_class)
|
|
tag_field = event.payload('vartag')
|
|
tag_field.value = 0
|
|
print (" ==> {} ({})".format(tag_field.value, tag_field))
|
|
event.payload('var').field(tag_field).value = 23
|
|
stream.append_event(event)
|
|
|
|
## second event: string is selected
|
|
#event = CTFWriter.Event(event_class)
|
|
#tag_field = event.payload('vartag')
|
|
#tag_field.value = 1
|
|
#event.payload('var').field(tag_field).value = 'The Battle of Evermore'
|
|
#stream.append_event(event)
|
|
|
|
stream.flush()
|