#define LTT_PRIVATE_H
#include <glib.h>
+#include <sys/types.h>
#include <ltt/ltt.h>
-#include <ltt/LTTTypes.h>
#include <ltt/type.h>
#include <ltt/trace.h>
+#define LTT_PACKED_STRUCT __attribute__ ((packed))
+
/* enumeration definition */
typedef enum _BuildinEvent{
TRACE_FACILITY_LOAD = 0,
TRACE_BLOCK_START = 17,
TRACE_BLOCK_END = 18,
- TRACE_TIME_HEARTBEAT= 22
+ TRACE_TIME_HEARTBEAT= 19
} BuildinEvent;
typedef struct _FacilityLoad{
char * name;
LttChecksum checksum;
- uint32_t base_code;
+ guint32 base_code;
} LTT_PACKED_STRUCT FacilityLoad;
typedef struct _BlockStart {
LttTime time; //Time stamp of this block
LttCycleCount cycle_count; //cycle count of the event
- uint32_t block_id; //block id
+ guint32 block_id; //block id
} LTT_PACKED_STRUCT BlockStart;
typedef struct _BlockEnd {
LttTime time; //Time stamp of this block
LttCycleCount cycle_count; //cycle count of the event
- uint32_t block_id; //block id
+ guint32 block_id; //block id
} LTT_PACKED_STRUCT BlockEnd;
typedef struct _TimeHeartbeat {
struct _LttType{
- char * element_name; //elements name of the struct or type name
+ char * type_name; //type name if it is a named type
+ char * element_name; //elements name of the struct
char * fmt;
int size;
LttTypeEnum type_class; //which type
int field_size; //>0: size of the field,
//0 : uncertain
//-1: uninitialize
+ int sequ_number_size; //the size of unsigned used to save the
+ //number of elements in the sequence
+
int element_size; //the element size of the sequence
int field_fixed; //0: field has string or sequence
//1: field has no string or sequenc
};
struct _LttEvent{
- uint16_t event_id;
- uint32_t time_delta;
+ guint16 event_id;
+ guint32 time_delta;
LttTime event_time;
LttCycleCount event_cycle_count;
LttTracefile * tracefile;
void * data; //event data
+ int which_block; //the current block of the event
+ int which_event; //the position of the event
};
struct _LttFacility{
char * name; //facility name
int event_number; //number of events in the facility
LttChecksum checksum; //checksum of the facility
- uint32_t base_id; //base id of the facility
+ guint32 base_id; //base id of the facility
LttEventType ** events; //array of event types
LttType ** named_types;
int named_types_number;
void * buffer; //the buffer containing the block
double cycle_per_nsec; //Cycles per nsec
unsigned cur_heart_beat_number; //current number of heart beat in the buf
+ LttCycleCount cur_cycle_count; //current cycle count of the event
+ void * last_event_pos;
LttTime prev_block_end_time; //the end time of previous block
LttTime prev_event_time; //the time of the previous event
+ LttEvent an_event;
};
struct _LttTrace{
guint control_tracefile_number; //the number of control files
guint per_cpu_tracefile_number; //the number of per cpu files
LttSystemDescription * system_description;//system description
+
GPtrArray *control_tracefiles; //array of control tracefiles
GPtrArray *per_cpu_tracefiles; //array of per cpu tracefiles
GPtrArray *facilities; //array of facilities
LttArchEndian my_arch_endian; //endian type of the local machine
};
+struct _LttEventPosition{
+ unsigned block_num; //block which contains the event
+ unsigned event_num; //event index in the block
+ unsigned event_offset; //event position in the block
+ LttTime event_time; //the time of the event
+ LttCycleCount event_cycle_count; //the cycle count of the event
+ unsigned heart_beat_number; //current number of heart beats
+ LttTracefile *tf; //tracefile containing the event
+ gboolean old_position; //flag to show if it is the position
+ //being remembered
+};
/*****************************************************************************
macro for size of some data types
*****************************************************************************/
-#define EVENT_ID_SIZE sizeof(uint16_t)
-#define TIME_DELTA_SIZE sizeof(uint32_t)
+#define EVENT_ID_SIZE sizeof(guint16)
+#define TIME_DELTA_SIZE sizeof(guint32)
#define EVENT_HEADER_SIZE (EVENT_ID_SIZE + TIME_DELTA_SIZE)
/* get the data type size and endian type of the local machine */
void getDataEndianType(LttArchSize * size, LttArchEndian * endian);
+/* get an integer number */
+int getIntNumber(int size1, void *evD);
+
/* open facility */
void ltt_facility_open(LttTrace * t, char * facility_name);