X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=ltt%2Ftags%2FLinuxTraceToolkitViewer-0.10.0-pre-115102007%2Fltt%2Fevent.h;fp=ltt%2Ftags%2FLinuxTraceToolkitViewer-0.10.0-pre-115102007%2Fltt%2Fevent.h;h=697b400ea4c5a08e1e7a8d2761010bb34870b3fa;hb=0bc7c2cd6b4ed143cbc8a5b046c2097c116cf05e;hp=0000000000000000000000000000000000000000;hpb=43b4fdf3a9fb8d67210f5efe1c10283d67517494;p=lttv.git diff --git a/ltt/tags/LinuxTraceToolkitViewer-0.10.0-pre-115102007/ltt/event.h b/ltt/tags/LinuxTraceToolkitViewer-0.10.0-pre-115102007/ltt/event.h new file mode 100644 index 00000000..697b400e --- /dev/null +++ b/ltt/tags/LinuxTraceToolkitViewer-0.10.0-pre-115102007/ltt/event.h @@ -0,0 +1,112 @@ +#ifndef _LTT_EVENT_H +#define _LTT_EVENT_H + +#include +#include +#include +#include +#include +#include +#include + +/* + * Structure LttEvent and LttEventPosition must begin with the _exact_ same + * fields in the exact same order. LttEventPosition is a parent of LttEvent. + */ +struct LttEvent { + /* Begin of LttEventPosition fields */ + LttTracefile *tracefile; + unsigned int block; + unsigned int offset; + + /* Timekeeping */ + uint64_t tsc; /* Current timestamp counter */ + + /* End of LttEventPosition fields */ + guint32 timestamp; /* truncated timestamp */ + + guint16 event_id; + + LttTime event_time; + + void *data; /* event data */ + guint data_size; + guint event_size; /* event_size field of the header : + used to verify data_size from facility. */ + uint32_t compact_data; + + int count; /* the number of overflow of cycle count */ + gint64 overflow_nsec; /* precalculated nsec for overflows */ +}; + +struct LttEventPosition { + LttTracefile *tracefile; + unsigned int block; + unsigned int offset; + + /* Timekeeping */ + uint64_t tsc; /* Current timestamp counter */ +}; + +static inline guint16 ltt_event_id(struct LttEvent *event) +{ + return event->event_id; +} + +static inline LttTime ltt_event_time(struct LttEvent *event) +{ + return event->event_time; +} + +/* Obtain the position of the event within the tracefile. This + is used to seek back to this position later or to seek to another + position, computed relative to this position. The event position + structure is opaque and contains several fields, only two + of which are user accessible: block number and event index + within the block. */ + +void ltt_event_position(LttEvent *e, LttEventPosition *ep); + +LttEventPosition * ltt_event_position_new(); + +void ltt_event_position_get(LttEventPosition *ep, LttTracefile **tf, + guint *block, guint *offset, guint64 *tsc); + +void ltt_event_position_set(LttEventPosition *ep, LttTracefile *tf, + guint block, guint offset, guint64 tsc); + +gint ltt_event_position_compare(const LttEventPosition *ep1, + const LttEventPosition *ep2); + +void ltt_event_position_copy(LttEventPosition *dest, + const LttEventPosition *src); + +LttTracefile *ltt_event_position_tracefile(LttEventPosition *ep); + +/* These functions extract data from an event after architecture specific + * conversions. */ + +guint32 ltt_event_get_unsigned(LttEvent *e, struct marker_field *f); + +gint32 ltt_event_get_int(LttEvent *e, struct marker_field *f); + +guint64 ltt_event_get_long_unsigned(LttEvent *e, struct marker_field *f); + +gint64 ltt_event_get_long_int(LttEvent *e, struct marker_field *f); + +float ltt_event_get_float(LttEvent *e, struct marker_field *f); + +double ltt_event_get_double(LttEvent *e, struct marker_field *f); + + +/* The string obtained is only valid until the next read from + * the same tracefile. */ + +gchar *ltt_event_get_string(LttEvent *e, struct marker_field *f); + +static inline LttCycleCount ltt_event_cycle_count(const LttEvent *e) +{ + return e->tsc; +} + +#endif //_LTT_EVENT_H