X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Fltt%2Fevent.c;h=438c3597f2bbdedf18a495539b2ff362489c3aff;hb=2da616770cf1e686eafdca9f2b155826ad94ee46;hp=82d57ffcaa9a2468062b58ff815e748534a597d4;hpb=cf74a6f1dc8fdeb7f7216d1c22f89fff405f9df1;p=lttv.git diff --git a/ltt/branches/poly/ltt/event.c b/ltt/branches/poly/ltt/event.c index 82d57ffc..438c3597 100644 --- a/ltt/branches/poly/ltt/event.c +++ b/ltt/branches/poly/ltt/event.c @@ -105,6 +105,10 @@ int ltt_event_refresh_fields(int offsetRoot,int offsetParent, size = offset2; }else size = fld->field_size; break; + + case LTT_UNION: + size = fld->field_size; + break; default: size = fld->field_size; @@ -223,21 +227,19 @@ LttField *ltt_event_field(LttEvent *e) { LttField * field; LttEventType * event_type = ltt_event_eventtype(e); - if(!event_type) return NULL; + if(unlikely(!event_type)) return NULL; field = event_type->root_field; - if(!field) return NULL; + if(unlikely(!field)) return NULL; //check if the field need refresh - if(e->which_block != event_type->latest_block || - e->which_event != event_type->latest_event){ + if(likely(e->which_block != event_type->latest_block || + e->which_event != event_type->latest_event)){ event_type->latest_block = e->which_block; event_type->latest_event = e->which_event; - if(field->field_fixed == 1)return field; - - //refresh the field - ltt_event_refresh_fields(0, 0, field, e->data); + if(unlikely(field->field_fixed != 1)) + ltt_event_refresh_fields(0, 0, field, e->data); } return field; } @@ -288,13 +290,15 @@ void ltt_event_position(LttEvent *e, LttEventPosition *ep) ep->old_position = TRUE; ep->event_offset = e->data - e->tracefile->buffer - EVENT_HEADER_SIZE ; ep->tf = e->tracefile; - + ep->overflow_nsec = e->overflow_nsec; /* This is a workaround for fast position seek */ ep->last_event_pos = e->last_event_pos; ep->prev_block_end_time = e->prev_block_end_time; ep->prev_event_time = e->prev_event_time; ep->pre_cycle_count = e->pre_cycle_count; ep->count = e->count; + ep->last_heartbeat = e->last_heartbeat; + /* end of workaround */ } @@ -544,7 +548,7 @@ void ltt_event_field_element_select(LttEvent *e, LttField *f, unsigned i) * conversions ****************************************************************************/ -unsigned ltt_event_get_unsigned(LttEvent *e, LttField *f) +guint32 ltt_event_get_unsigned(LttEvent *e, LttField *f) { int revFlag = e->tracefile->trace->my_arch_endian == e->tracefile->trace->system_description->endian ? 0:1; @@ -554,31 +558,34 @@ unsigned ltt_event_get_unsigned(LttEvent *e, LttField *f) if(f->field_size == 1){ guint8 x = *(guint8 *)(e->data + f->offset_root); - return (unsigned int) x; + return (guint32) x; }else if(f->field_size == 2){ guint16 x = *(guint16 *)(e->data + f->offset_root); if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN) - return (unsigned int) (revFlag ? GUINT16_FROM_BE(x): x); + return (guint32) (revFlag ? GUINT16_FROM_BE(x): x); else - return (unsigned int) (revFlag ? GUINT16_FROM_LE(x): x); + return (guint32) (revFlag ? GUINT16_FROM_LE(x): x); }else if(f->field_size == 4){ guint32 x = *(guint32 *)(e->data + f->offset_root); if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN) - return (unsigned int) (revFlag ? GUINT32_FROM_BE(x): x); + return (guint32) (revFlag ? GUINT32_FROM_BE(x): x); else - return (unsigned int) (revFlag ? GUINT32_FROM_LE(x): x); - }else if(f->field_size == 8){ + return (guint32) (revFlag ? GUINT32_FROM_LE(x): x); + } +#if 0 + else if(f->field_size == 8){ guint64 x = *(guint64 *)(e->data + f->offset_root); if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN) return (unsigned int) (revFlag ? GUINT64_FROM_BE(x): x); else return (unsigned int) (revFlag ? GUINT64_FROM_LE(x): x); } +#endif //0 g_critical("ltt_event_get_unsigned : field size %i unknown", f->field_size); return 0; } -int ltt_event_get_int(LttEvent *e, LttField *f) +gint32 ltt_event_get_int(LttEvent *e, LttField *f) { int revFlag = e->tracefile->trace->my_arch_endian == e->tracefile->trace->system_description->endian ? 0:1; @@ -587,31 +594,34 @@ int ltt_event_get_int(LttEvent *e, LttField *f) if(f->field_size == 1){ gint8 x = *(gint8 *)(e->data + f->offset_root); - return (int) x; + return (gint32) x; }else if(f->field_size == 2){ gint16 x = *(gint16 *)(e->data + f->offset_root); if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN) - return (int) (revFlag ? GINT16_FROM_BE(x): x); + return (gint32) (revFlag ? GINT16_FROM_BE(x): x); else - return (int) (revFlag ? GINT16_FROM_LE(x): x); + return (gint32) (revFlag ? GINT16_FROM_LE(x): x); }else if(f->field_size == 4){ gint32 x = *(gint32 *)(e->data + f->offset_root); if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN) - return (int) (revFlag ? GINT32_FROM_BE(x): x); + return (gint32) (revFlag ? GINT32_FROM_BE(x): x); else - return (int) (revFlag ? GINT32_FROM_LE(x): x); - }else if(f->field_size == 8){ + return (gint32) (revFlag ? GINT32_FROM_LE(x): x); + } +#if 0 + else if(f->field_size == 8){ gint64 x = *(gint64 *)(e->data + f->offset_root); if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN) return (int) (revFlag ? GINT64_FROM_BE(x): x); else return (int) (revFlag ? GINT64_FROM_LE(x): x); } +#endif //0 g_critical("ltt_event_get_int : field size %i unknown", f->field_size); return 0; } -unsigned long ltt_event_get_long_unsigned(LttEvent *e, LttField *f) +guint64 ltt_event_get_long_unsigned(LttEvent *e, LttField *f) { int revFlag = e->tracefile->trace->my_arch_endian == e->tracefile->trace->system_description->endian ? 0:1; @@ -621,31 +631,31 @@ unsigned long ltt_event_get_long_unsigned(LttEvent *e, LttField *f) if(f->field_size == 1){ guint8 x = *(guint8 *)(e->data + f->offset_root); - return (unsigned long) x; + return (guint64) x; }else if(f->field_size == 2){ guint16 x = *(guint16 *)(e->data + f->offset_root); if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN) - return (unsigned long) (revFlag ? GUINT16_FROM_BE(x): x); + return (guint64) (revFlag ? GUINT16_FROM_BE(x): x); else - return (unsigned long) (revFlag ? GUINT16_FROM_LE(x): x); + return (guint64) (revFlag ? GUINT16_FROM_LE(x): x); }else if(f->field_size == 4){ guint32 x = *(guint32 *)(e->data + f->offset_root); if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN) - return (unsigned long) (revFlag ? GUINT32_FROM_BE(x): x); + return (guint64) (revFlag ? GUINT32_FROM_BE(x): x); else - return (unsigned long) (revFlag ? GUINT32_FROM_LE(x): x); + return (guint64) (revFlag ? GUINT32_FROM_LE(x): x); }else if(f->field_size == 8){ guint64 x = *(guint64 *)(e->data + f->offset_root); if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN) - return (unsigned long) (revFlag ? GUINT64_FROM_BE(x): x); + return (guint64) (revFlag ? GUINT64_FROM_BE(x): x); else - return (unsigned long) (revFlag ? GUINT64_FROM_LE(x): x); + return (guint64) (revFlag ? GUINT64_FROM_LE(x): x); } g_critical("ltt_event_get_long_unsigned : field size %i unknown", f->field_size); return 0; } -long int ltt_event_get_long_int(LttEvent *e, LttField *f) +gint64 ltt_event_get_long_int(LttEvent *e, LttField *f) { int revFlag = e->tracefile->trace->my_arch_endian == e->tracefile->trace->system_description->endian ? 0:1; @@ -654,25 +664,25 @@ long int ltt_event_get_long_int(LttEvent *e, LttField *f) if(f->field_size == 1){ gint8 x = *(gint8 *)(e->data + f->offset_root); - return (long) x; + return (gint64) x; }else if(f->field_size == 2){ gint16 x = *(gint16 *)(e->data + f->offset_root); if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN) - return (long) (revFlag ? GINT16_FROM_BE(x): x); + return (gint64) (revFlag ? GINT16_FROM_BE(x): x); else - return (long) (revFlag ? GINT16_FROM_LE(x): x); + return (gint64) (revFlag ? GINT16_FROM_LE(x): x); }else if(f->field_size == 4){ gint32 x = *(gint32 *)(e->data + f->offset_root); if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN) - return (long) (revFlag ? GINT32_FROM_BE(x): x); + return (gint64) (revFlag ? GINT32_FROM_BE(x): x); else - return (long) (revFlag ? GINT32_FROM_LE(x): x); + return (gint64) (revFlag ? GINT32_FROM_LE(x): x); }else if(f->field_size == 8){ gint64 x = *(gint64 *)(e->data + f->offset_root); if(e->tracefile->trace->my_arch_endian == LTT_LITTLE_ENDIAN) - return (long) (revFlag ? GINT64_FROM_BE(x): x); + return (gint64) (revFlag ? GINT64_FROM_BE(x): x); else - return (long) (revFlag ? GINT64_FROM_LE(x): x); + return (gint64) (revFlag ? GINT64_FROM_LE(x): x); } g_critical("ltt_event_get_long_int : field size %i unknown", f->field_size); return 0;