what I currently do (mathieu)
[lttv.git] / ltt / branches / poly / ltt / tracefile.c
index d2b6f898b1b7b4c342a4a431333626bf40ff5303..cdfab23fd2c3dc62d75a46fdac042b53ec0deb68 100644 (file)
@@ -259,6 +259,8 @@ int parse_trace_header(void *header, LttTracefile *tf, LttTrace *t)
                                               &vheader->start_monotonic);
           t->start_time = ltt_get_time(LTT_GET_BO(tf),
                                        &vheader->start_time);
+          t->start_time.tv_nsec *= 1000; /* microsec to nanosec */
+
           t->start_time_from_tsc = ltt_time_from_uint64(
               (double)t->start_tsc * 1000000.0 / (double)t->start_freq);
         }
@@ -952,7 +954,8 @@ static int ltt_process_facility_tracefile(LttTracefile *tf)
                 (tf->event.data + strlen(fac_name) + 1);
           fac = &g_array_index (tf->trace->facilities_by_num, LttFacility,
               ltt_get_uint32(LTT_GET_BO(tf), &fac_load_data->id));
-          g_assert(fac->exists == 0);
+          /* facility may already exist if trace is paused/unpaused */
+          if(fac->exists) continue;
           fac->name = g_quark_from_string(fac_name);
           fac->checksum = ltt_get_uint32(LTT_GET_BO(tf),
                           &fac_load_data->checksum);
@@ -1004,11 +1007,13 @@ static int ltt_process_facility_tracefile(LttTracefile *tf)
                 (tf->event.data + strlen(fac_name) + 1);
           fac = &g_array_index (tf->trace->facilities_by_num, LttFacility,
               ltt_get_uint32(LTT_GET_BO(tf), &fac_state_dump_load_data->id));
-          g_assert(fac->exists == 0);
+          /* facility may already exist if trace is paused/unpaused */
+          if(fac->exists) continue;
           fac->name = g_quark_from_string(fac_name);
           fac->checksum = ltt_get_uint32(LTT_GET_BO(tf),
                           &fac_state_dump_load_data->checksum);
-          fac->id = fac_state_dump_load_data->id;
+          fac->id = ltt_get_uint32(LTT_GET_BO(tf),
+                          &fac_state_dump_load_data->id);
           fac->pointer_size = ltt_get_uint32(LTT_GET_BO(tf),
                           &fac_state_dump_load_data->pointer_size);
           fac->long_size = ltt_get_uint32(LTT_GET_BO(tf),
@@ -2165,6 +2170,8 @@ void preset_field_type_size(LttTracefile *tf, LttEventType *event_type,
           max_size = max(max_size, field->child[i]->field_size);
       }
       if(final_child_status != FIELD_FIXED) {
+                               g_error("LTTV does not support variable size fields in unions.");
+                               /* This will stop the application. */
         *fixed_root = final_child_status;
         *fixed_parent = final_child_status;
         field->field_size = 0;
@@ -2555,13 +2562,17 @@ char * ltt_trace_system_description_description (LttSystemDescription * s)
 }
 
 
-/* get the start time of the trace */
-
-LttTime ltt_trace_system_description_trace_start_time(LttSystemDescription *s)
+/* get the NTP corrected start time of the trace */
+LttTime ltt_trace_start_time(LttTrace *t)
 {
-  return s->trace_start;
+  return t->start_time;
 }
 
+/* get the monotonic start time of the trace */
+LttTime ltt_trace_start_time_monotonic(LttTrace *t)
+{
+  return t->start_time_from_tsc;
+}
 
 LttTracefile *ltt_tracefile_new()
 {
This page took 0.024225 seconds and 4 git commands to generate.