ovni/doc/dev/channels.md

2.9 KiB

Channels

As the emulation progresses, information is written in the PRV trace to record the new states. The emulator has specific mechanism to handle the output of new states in the PRV trace via channels. A channel stores a value that represents an state at a given point in time and typically corresponds to the value that will be observed in the Paraver timeline.

!!! Note

The emulator receives input *events* and performs *state*
transitions which are written into the Paraver trace.

Channels become dirty when a new value is written to them. No other modifications are allowed by default until the channel is flushed by calling chan_flush(). This behavior can be controlled with the CHAN_DIRTY_WRITE property. By default, a duplicated value cannot be written into a channel, unless the CHAN_ALLOW_DUP or CHAN_IGNORE_DUP properties are set.

A channel has an unique name used to identify the channel when debugging and also to create derived channels. The name can be set following the printf style when calling chan_init().

Types

There are two types of channels, single and stack. The type single only stores one value which is updated by chan_set(). The stack type allows the channel to record multiple values in a stack by using chan_push() and chan_pop(). The value of the channels is the topmost in the stack (the last pushed).

Notice that the chan_pop() function uses the same value being pop()'ed as argument. The function checks that the stack contains the expected value, forcing the emulator to always receive a matching pair of push and pop values.

After the channel initialization, the value of the channels is null. A channel with an empty stack also returns the value null when being read.

Data value

The data type of a channel is handled by the value structure. This structure can store a null value, a 64 bit integer or a double. Any data type can be written to a channel and multiple data types can be stored in the stack.

!!! Note

For now only null and int64 types are allowed when the channel is connected
to a Paraver trace.

Properties

Channels have properties that can be set by chan_prop_set(). Setting the CHAN_DIRTY_WRITE property to true allows a channel to modify its value while being in the dirty state.

Duplicate values

By default, writing the same value to a channel twice is forbidden and will result in a error. The property CHAN_ALLOW_DUP allows writing the same value to the channel. However, the property CHAN_IGNORE_DUP will ignore the attempt to write the duplicated value with no error.

Callback

A unique function can be set to each channel which will be called once a channel becomes dirty with chan_set_dirty_cb(). This callback will be called before chan_set(), chan_push() or chan_pop() returns. The patch bay uses this callback to detect when a channel is modified an run other callbacks.