libltt compiles
[lttv.git] / ltt / branches / poly / ltt / event.c
index 8011782a6be589617d8cd7f830163e296fe614a7..0e87646e258c41d03500884144f2f76f0b709fc2 100644 (file)
 #include <ltt/event.h>
 #include <ltt/trace.h>
 #include <ltt/ltt-types.h>
-
+#include <ltt/markers.h>
 
 
 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;
 }
@@ -373,8 +345,13 @@ off_t ltt_event_field_offset(LttEvent *e, LttField *f)
  ****************************************************************************/
 guint32 ltt_event_get_unsigned(LttEvent *e, LttField *f)
 {
-  gboolean 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:
     {
@@ -398,8 +375,13 @@ guint32 ltt_event_get_unsigned(LttEvent *e, LttField *f)
 
 gint32 ltt_event_get_int(LttEvent *e, LttField *f)
 {
-  gboolean 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:
     {
@@ -423,7 +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 = 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:
@@ -450,7 +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 = 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:
@@ -477,8 +469,13 @@ gint64 ltt_event_get_long_int(LttEvent *e, LttField *f)
 
 float ltt_event_get_float(LttEvent *e, LttField *f)
 {
-  g_assert(LTT_HAS_FLOAT(e->tracefile));
-  gboolean 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);
 
@@ -492,8 +489,13 @@ float ltt_event_get_float(LttEvent *e, LttField *f)
 
 double ltt_event_get_double(LttEvent *e, LttField *f)
 {
-  g_assert(LTT_HAS_FLOAT(e->tracefile));
-  gboolean 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);
@@ -528,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:
@@ -601,7 +617,7 @@ void compute_fields_offsets(LttTracefile *tf,
                                                     0);
           for(i=0; i<type->size; 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;
@@ -623,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);
@@ -638,7 +654,7 @@ void compute_fields_offsets(LttTracefile *tf,
         num_elem = ltt_event_field_element_number(&tf->event, field);
         for(i=0; i<num_elem; 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);
         }
         g_assert(num_elem == field->dynamic_offsets->len);
 
@@ -657,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;
@@ -666,7 +682,7 @@ void compute_fields_offsets(LttTracefile *tf,
         }
         for(i=0; i<type->fields->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;
@@ -684,7 +700,7 @@ void compute_fields_offsets(LttTracefile *tf,
         for(i=0; i<type->fields->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;
       }
@@ -714,8 +730,11 @@ void compute_offsets(LttTracefile *tf, LttFacility *fac,
   for(i=0; i<event->fields->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
This page took 0.027433 seconds and 4 git commands to generate.