X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Fltt%2Fevent.c;h=0e87646e258c41d03500884144f2f76f0b709fc2;hb=3c165eaf5aa1e60ce88c036cfb692ce3e1d81585;hp=67c689b67ee9e6a4d77708e5ace2b9c9e7c3547e;hpb=f0b795e0b579719a95fee5f84d4dcb893044d926;p=lttv.git diff --git a/ltt/branches/poly/ltt/event.c b/ltt/branches/poly/ltt/event.c index 67c689b6..0e87646e 100644 --- a/ltt/branches/poly/ltt/event.c +++ b/ltt/branches/poly/ltt/event.c @@ -35,11 +35,12 @@ #include #include #include - +#include void compute_fields_offsets(LttTracefile *tf, - LttFacility *fac, LttField *field, off_t *offset, void *root); + LttFacility *fac, LttField *field, off_t *offset, void *root, + guint is_compact); LttEvent *ltt_event_new() @@ -63,9 +64,9 @@ void ltt_event_destroy(LttEvent *event) * unsigned : event type id ****************************************************************************/ -unsigned ltt_event_eventtype_id(const LttEvent *e) +uint16_t ltt_event_eventtype_id(const LttEvent *e) { - return (unsigned) e->event_id; + return e->event_id; } /***************************************************************************** @@ -74,51 +75,14 @@ unsigned ltt_event_eventtype_id(const LttEvent *e) *Input params * e : an instance of an event type *Return value - * LttFacility * : the facility of the event - ****************************************************************************/ - -LttFacility *ltt_event_facility(const LttEvent *e) -{ - LttTrace * trace = e->tracefile->trace; - unsigned id = e->facility_id; - LttFacility *facility = ltt_trace_facility_by_id(trace,id); - - g_assert(facility->exists); - - return facility; -} - -/***************************************************************************** - *Function name - * ltt_event_facility_id : get the facility id of the event - *Input params - * e : an instance of an event type - *Return value - * unsigned : the facility of the event + * struct marker_info *: the marker associated with the event ****************************************************************************/ -unsigned ltt_event_facility_id(const LttEvent *e) +struct marker_info *ltt_event_marker(const LttEvent *e) { - return e->facility_id; + return marker_get_info_from_id(e->tracefile->trace, e->event_id); } -/***************************************************************************** - *Function name - * ltt_event_eventtype : get the event type of the event - *Input params - * e : an instance of an event type - *Return value - * LttEventType * : the event type of the event - ****************************************************************************/ - -LttEventType *ltt_event_eventtype(const LttEvent *e) -{ - LttFacility* facility = ltt_event_facility(e); - if(!facility) return NULL; - return &g_array_index(facility->events, LttEventType, e->event_id); -} - - /***************************************************************************** *Function name * ltt_event_time : get the time of the event @@ -147,8 +111,6 @@ LttCycleCount ltt_event_cycle_count(const LttEvent *e) return e->tsc; } - - /***************************************************************************** *Function name * ltt_event_position_get : get the event position data @@ -170,6 +132,16 @@ void ltt_event_position_get(LttEventPosition *ep, LttTracefile **tf, } +void ltt_event_position_set(LttEventPosition *ep, LttTracefile *tf, + guint block, guint offset, guint64 tsc) +{ + ep->tracefile = tf; + ep->block = block; + ep->offset = offset; + ep->tsc = tsc; +} + + /***************************************************************************** *Function name * ltt_event_position : get the event's position @@ -354,7 +326,7 @@ LttField *ltt_event_field_element_select(LttEvent *e, LttField *f, gulong i) new_offset = g_array_index(f->dynamic_offsets, off_t, i); } compute_fields_offsets(e->tracefile, - ltt_event_facility(e), field, &new_offset, e->data); + ltt_event_facility(e), field, &new_offset, e->data, 0); return field; } @@ -374,11 +346,11 @@ off_t ltt_event_field_offset(LttEvent *e, LttField *f) guint32 ltt_event_get_unsigned(LttEvent *e, LttField *f) { gboolean reverse_byte_order; - if(unlikely(f->field_type.network)) { - reverse_byte_order = (g_ntohs(0x1) != 0x1); - } else { - reverse_byte_order = LTT_GET_BO(e->tracefile); - } + if(unlikely(f->field_type.network)) { + reverse_byte_order = (g_ntohs(0x1) != 0x1); + } else { + reverse_byte_order = LTT_GET_BO(e->tracefile); + } switch(f->field_size) { case 1: @@ -404,11 +376,11 @@ guint32 ltt_event_get_unsigned(LttEvent *e, LttField *f) gint32 ltt_event_get_int(LttEvent *e, LttField *f) { gboolean reverse_byte_order; - if(unlikely(f->field_type.network)) { - reverse_byte_order = (g_ntohs(0x1) != 0x1); - } else { - reverse_byte_order = LTT_GET_BO(e->tracefile); - } + if(unlikely(f->field_type.network)) { + reverse_byte_order = (g_ntohs(0x1) != 0x1); + } else { + reverse_byte_order = LTT_GET_BO(e->tracefile); + } switch(f->field_size) { case 1: @@ -433,12 +405,12 @@ gint32 ltt_event_get_int(LttEvent *e, LttField *f) guint64 ltt_event_get_long_unsigned(LttEvent *e, LttField *f) { - gboolean reverse_byte_order; - if(unlikely(f->field_type.network)) { - reverse_byte_order = (g_ntohs(0x1) != 0x1); - } else { - reverse_byte_order = LTT_GET_BO(e->tracefile); - } + gboolean reverse_byte_order; + if(unlikely(f->field_type.network)) { + reverse_byte_order = (g_ntohs(0x1) != 0x1); + } else { + reverse_byte_order = LTT_GET_BO(e->tracefile); + } switch(f->field_size) { case 1: @@ -465,12 +437,12 @@ guint64 ltt_event_get_long_unsigned(LttEvent *e, LttField *f) gint64 ltt_event_get_long_int(LttEvent *e, LttField *f) { - gboolean reverse_byte_order; - if(unlikely(f->field_type.network)) { - reverse_byte_order = (g_ntohs(0x1) != 0x1); - } else { - reverse_byte_order = LTT_GET_BO(e->tracefile); - } + gboolean reverse_byte_order; + if(unlikely(f->field_type.network)) { + reverse_byte_order = (g_ntohs(0x1) != 0x1); + } else { + reverse_byte_order = LTT_GET_BO(e->tracefile); + } switch(f->field_size) { case 1: @@ -497,13 +469,13 @@ gint64 ltt_event_get_long_int(LttEvent *e, LttField *f) float ltt_event_get_float(LttEvent *e, LttField *f) { - gboolean reverse_byte_order; - if(unlikely(f->field_type.network)) { - reverse_byte_order = (g_ntohs(0x1) != 0x1); - } else { - g_assert(LTT_HAS_FLOAT(e->tracefile)); - reverse_byte_order = LTT_GET_FLOAT_BO(e->tracefile); - } + gboolean reverse_byte_order; + if(unlikely(f->field_type.network)) { + reverse_byte_order = (g_ntohs(0x1) != 0x1); + } else { + g_assert(LTT_HAS_FLOAT(e->tracefile)); + reverse_byte_order = LTT_GET_FLOAT_BO(e->tracefile); + } g_assert(f->field_type.type_class == LTT_FLOAT && f->field_size == 4); @@ -517,13 +489,13 @@ float ltt_event_get_float(LttEvent *e, LttField *f) double ltt_event_get_double(LttEvent *e, LttField *f) { - gboolean reverse_byte_order; - if(unlikely(f->field_type.network)) { - reverse_byte_order = (g_ntohs(0x1) != 0x1); - } else { - g_assert(LTT_HAS_FLOAT(e->tracefile)); - reverse_byte_order = LTT_GET_FLOAT_BO(e->tracefile); - } + gboolean reverse_byte_order; + if(unlikely(f->field_type.network)) { + reverse_byte_order = (g_ntohs(0x1) != 0x1); + } else { + g_assert(LTT_HAS_FLOAT(e->tracefile)); + reverse_byte_order = LTT_GET_FLOAT_BO(e->tracefile); + } if(f->field_size == 4) return ltt_event_get_float(e, f); @@ -558,12 +530,26 @@ char *ltt_event_get_string(LttEvent *e, LttField *f) * offset : pointer to the current offset, must be incremented ****************************************************************************/ - +#if 0 void compute_fields_offsets(LttTracefile *tf, - LttFacility *fac, LttField *field, off_t *offset, void *root) + LttFacility *fac, LttField *field, off_t *offset, void *root, guint is_compact) { LttType *type = &field->field_type; + if(unlikely(is_compact)) { + g_assert(field->field_size != 0); + /* FIXME THIS IS A HUUUUUGE hack : + * offset is between the compact_data field in struct LttEvent + * and the address of the field root in the memory map. + * ark. Both will stay at the same addresses while the event + * is readable, so it's ok. + */ + field->offset_root = (unsigned long)(&tf->event.compact_data) + - (unsigned long)root; + field->fixed_root = FIELD_FIXED; + return; + } + switch(type->type_class) { case LTT_INT_FIXED: case LTT_UINT_FIXED: @@ -631,7 +617,7 @@ void compute_fields_offsets(LttTracefile *tf, 0); for(i=0; isize; i++) { g_array_append_val(field->dynamic_offsets, *offset); - compute_fields_offsets(tf, fac, child, offset, root); + compute_fields_offsets(tf, fac, child, offset, root, is_compact); } } // local_offset = field->array_offset; @@ -653,7 +639,7 @@ void compute_fields_offsets(LttTracefile *tf, field->offset_root = *offset; child = &g_array_index(type->fields, LttField, 0); - compute_fields_offsets(tf, fac, child, offset, root); + compute_fields_offsets(tf, fac, child, offset, root, is_compact); child = &g_array_index(type->fields, LttField, 1); *offset += ltt_align(*offset, get_alignment(child), fac->alignment); @@ -668,7 +654,7 @@ void compute_fields_offsets(LttTracefile *tf, num_elem = ltt_event_field_element_number(&tf->event, field); for(i=0; idynamic_offsets, *offset); - compute_fields_offsets(tf, fac, child, offset, root); + compute_fields_offsets(tf, fac, child, offset, root, is_compact); } g_assert(num_elem == field->dynamic_offsets->len); @@ -687,7 +673,7 @@ void compute_fields_offsets(LttTracefile *tf, guint i; gint ret=0; if(field->fixed_root == FIELD_VARIABLE) { - *offset += ltt_align(*offset, get_alignment(fac, field), + *offset += ltt_align(*offset, get_alignment(field), fac->alignment); /* remember offset */ field->offset_root = *offset; @@ -696,7 +682,7 @@ void compute_fields_offsets(LttTracefile *tf, } for(i=0; ifields->len; i++) { child = &g_array_index(type->fields, LttField, i); - compute_fields_offsets(tf, fac, child, offset, root); + compute_fields_offsets(tf, fac, child, offset, root, is_compact); } } break; @@ -714,7 +700,7 @@ void compute_fields_offsets(LttTracefile *tf, for(i=0; ifields->len; i++) { *offset = field->offset_root; child = &g_array_index(type->fields, LttField, i); - compute_fields_offsets(tf, fac, child, offset, root); + compute_fields_offsets(tf, fac, child, offset, root, is_compact); } *offset = field->offset_root + field->field_size; } @@ -744,8 +730,11 @@ void compute_offsets(LttTracefile *tf, LttFacility *fac, for(i=0; ifields->len; i++) { //g_debug("computing offset %u of %u\n", i, event->fields->len-1); LttField *field = &g_array_index(event->fields, LttField, i); - compute_fields_offsets(tf, fac, field, offset, root); + if(event->has_compact_data && i == 0) + compute_fields_offsets(tf, fac, field, offset, root, 1); + else + compute_fields_offsets(tf, fac, field, offset, root, 0); } } - +#endif //0