Project

General

Profile

Bug #1112 ยป writer2.py

Costin Zanfir, 05/23/2017 09:24 AM

 
#!/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()
    (1-1/1)