The code to print events is now part of textDump.c. If part of it is useful
[lttv.git] / ltt / branches / poly / misc / EventAPI.h
CommitLineData
5a1bc7d3 1#define LTT_PACKED_STRUCT __attribute__ ((packed))
2#define TRACER_MAGIC_NUMBER 0x00D6B7ED /* That day marks an important historical event ... */
3
4void initFacilities();
5void freeFacilities(); //not implimented yet
6
7
8//following part is for event reading API
9typedef struct _trace_header_event {
10 //information of the machine type
11 uint32_t arch_type; /* Type of architecture */
12 uint32_t arch_variant; /* Variant of the given type of architecture */
13 uint32_t system_type; /* Operating system type */
14 uint32_t magic_number; /* Magic number to identify a trace */
15
16 //format of fields
17 uint8_t time_size; /* time size */
18 uint8_t time_granul; /* time granularity */
19 uint8_t id_size; /* size of combined facility/event ids */
20
21 //other elements
22 uint32_t ip_addr; /* IP of the machine */
23 uint8_t nbCpu; /* number of CPU */
24 uint8_t cpuID; /* cpu id */
25 uint32_t buffer_size; /* Size of blocks */
26} LTT_PACKED_STRUCT trace_header_event;
27
28
29typedef struct _block_header {
30 struct timeval time; /* Time stamp of this block */
31 uint32_t tsc; /* TSC of this block, if applicable */
32 uint32_t time_delta; /* Time between now and prev event */
33 uint32_t event_count; /* event count */
34} LTT_PACKED_STRUCT block_header;
35
36
37typedef struct _block_footer {
38 uint32_t unused_bytes; /* unused bytes at the end of the block */
39 struct timeval time; /* Time stamp of this block */
40 uint32_t tsc; /* TSC of this block, if applicable */
41 uint32_t time_delta; /* Time between now and prev event */
42} LTT_PACKED_STRUCT block_footer;
43
44
45typedef struct _ltt_descriptor{
46 int fd; /* file descriptor */
47 off_t file_size; /* file size */
48 int nbBlocks; /* number of blocks in the file */
49 int which_block; /* which block the current block is */
50 int which_event; /* which event of the current block is currently processed */
51 uint32_t current_event_time; /* time of the current event */
52 trace_header_event * trace_header; /* the first event in the first block */
53 block_header * a_block_header; /* block header of the block*/
54 block_footer * a_block_footer; /* block footer of the block*/
55 void * first_event_pos; /* the position of the first event in blockBuf */
56 void * cur_event_pos; /* the position of the current event in blockBuf */
57 void * buffer; /* the buffer to contain the content of the block */
58 int byte_rev; /* Byte-reverse trace data */
59 double TSCPerUsec; /* Cycles per usec */
60} ltt_descriptor;
61
62typedef struct _field_handle{
63 char * name; /* field name */
64 data_type field_type; /* field type : integer, float, string, enum, array, sequence */
65 int size; /* number of bytes for a primitive type */
66 data_type element_type; /* element type for array or sequence */
67 int nbElements; /* number of fields for a struct, and of elements for array or sequence */
68 int sequence_size; /* the length size of uint which stores the number of elements of the sequence */
69 char * fmt; /* printf format string for primitive type */
70 off_t offset; /* offset from the beginning of the current event */
71 off_t end_field; /* end of the field: offset of the next field */
72} field_handle;
73
74typedef struct _event_handle{
75 char * name; /* event name */
76 int id; /* event code */
77 int size_fixed; /* indicate whether or not the event has string or sequence */
78 sequence base_field; /* base field */
79 int latest_block; /* the latest block which uses the event handle */
80 int latest_event; /* the latest event which uses the event handle */
81} event_handle;
82
83
84typedef struct _facility_handle{
85 char * name; /* facility name */
86 int nbEvents; /* number of events in the facility */
87 unsigned long checksum; /* checksum of the facility */
88 event_handle ** events; /* array of event types */
89} facility_handle;
90
91
92typedef struct _event_struct{
93 int recid; /* event position in the combined log */
94 struct timeval time; /* detailed absolute time */
95 uint32_t tsc; /* TSC of this event */
96 facility_handle * fHandle; /* facility handle */
97 int event_id; /* id of a event belonging to the facility */
98 // event_handle * event_type; /* event handle */
99 uint32_t ip_addr; /* IP address of the system */
100 uint8_t CPU_id; /* CPU id */
101 int tid; /* thread id */
102 int pid; /* process id */
103 sequence * base_field; /* base field */
104 void * data; /* event binary data */
105} event_struct;
106
107
108typedef struct _kernel_facility{
109 char * name; /* kernel name */
110 unsigned long checksum; /* checksum of the facility */
111 int nbEvents; /* number of events in the facility */
112 int firstId; /* the ID of the first event of the facility */
113} kernel_facility;
114
115
116void parseEventAndTypeDefinition(char * facilityName);
117void generateFacilityHandle(char * facName, unsigned long checksum, sequence * events);
118int getTypeSize(data_type dt, int index);
119
120
121int getFacilitiesNumber(int * numFac, int * numEvents); //get the number of the registered faciliyies
122int getFacilitiesFromKernel(kernel_facility ** kFacilities);
123int readFile(int fd, void * buf, size_t size, char * mesg);
124int readBlock(ltt_descriptor * lttdes, int whichBlock);
125void updateLttdes(ltt_descriptor * lttdes);
126void getTSCPerUsec(ltt_descriptor * lttdes);
127void getEventTime(ltt_descriptor * lttdes, uint32_t time_delta, struct timeval * pTime);
128
129ltt_descriptor * trace_open_log(char * fileName);
130int trace_seek(ltt_descriptor * lttdes, off_t offset, int whence);
131int trace_seek_time(ltt_descriptor * lttdes, uint32_t offset, int whence);
132int trace_read(ltt_descriptor * lttdes, event_struct * ev);
133
134int trace_lookup_facility(int evId, facility_handle ** facilityHandle);
135int trace_lookup_event(int event_id, facility_handle * facHandle, event_handle ** eventHandle);
136int trace_lookup_field(sequence * baseField, int position, field_handle ** field);
137
138int trace_get_char(field_handle * field, void * data);
139int trace_get_uchar(field_handle * field, void * data);
140unsigned long trace_get_enum(field_handle * field, void * data);
141short int trace_get_short(field_handle * field, void * data);
142unsigned short int trace_get_ushort(field_handle * field, void * data);
143int trace_get_integer(field_handle * field, void * data);
144unsigned int trace_get_uinteger(field_handle * field, void * data);
145long trace_get_long(field_handle * field, void * data);
146unsigned long trace_get_ulong(field_handle * field, void * data);
147float trace_get_float(field_handle * field, void * data);
148double trace_get_double(field_handle * field, void * data);
149char * trace_get_string(field_handle * field, void * data);
150
151int trace_get_time_block_position(ltt_descriptor * lttdes, uint32_t seekTime, int beginBlock, int endBlock);
152void trace_update_basefield(ltt_descriptor * lttdes, sequence * baseField );
153
154
155#define EVENT_ID_SIZE() sizeof(int8_t)
156#define TIME_DELTA_SIZE() sizeof(uint32_t)
157//event id and time delta
158#define EVENT_HEADER_SIZE() (sizeof(int8_t) + sizeof(uint32_t))
159
160/* Time operation macros */
161/* (T3 = T2 - T1) */
162#define DBTimeSub(T3, T2, T1) \
163do \
164{\
165 T3.tv_sec = T2.tv_sec - T1.tv_sec; \
166 T3.tv_usec = T2.tv_usec - T1.tv_usec; \
167 if(T3.tv_usec < 0)\
168 {\
169 T3.tv_sec--;\
170 T3.tv_usec += 1000000;\
171 }\
172} while(0)
173
174/* (T3 = T2 + T1) */
175#define DBTimeAdd(T3, T2, T1) \
176do \
177{\
178 T3.tv_sec = T2.tv_sec + T1.tv_sec; \
179 T3.tv_usec = T2.tv_usec + T1.tv_usec; \
180 if(T3.tv_usec >= 1000000)\
181 {\
182 T3.tv_sec += T3.tv_usec / 1000000;\
183 T3.tv_usec = T3.tv_usec % 1000000;\
184 }\
185} while(0)
This page took 0.030298 seconds and 4 git commands to generate.