&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);
}
}
break;
(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);
(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);
// time = ltt_time_from_uint64(
// cycles_2_ns(tf, (guint64)(tf->buffer.tsc - tf->buffer.begin.cycle_count)));
- time = ltt_time_from_uint64((tf->buffer.tsc - tf->trace->start_tsc) * 1000000
+ time = ltt_time_from_uint64(
+ (double)(tf->buffer.tsc - tf->trace->start_tsc) * 1000000.0
/ (double)tf->trace->start_freq);
//time = ltt_time_add(tf->buffer.begin.timestamp, time);
- time = ltt_time_add(tf->trace->start_time, time);
+ time = ltt_time_add(tf->trace->start_time_from_tsc, time);
return time;
}
&header->begin.freq);
tf->buffer.begin.timestamp = ltt_time_add(
ltt_time_from_uint64(
- (tf->buffer.begin.cycle_count
- - tf->trace->start_tsc) * 1000000
+ (double)(tf->buffer.begin.cycle_count
+ - tf->trace->start_tsc) * 1000000.0
/ (double)tf->trace->start_freq),
- tf->trace->start_time);
+ tf->trace->start_time_from_tsc);
#if 0
tf->buffer.end.timestamp = ltt_time_add(
&header->lost_size);
tf->buffer.end.timestamp = ltt_time_add(
ltt_time_from_uint64(
- (tf->buffer.end.cycle_count
- - tf->trace->start_tsc) * 1000000
+ (double)(tf->buffer.end.cycle_count
+ - tf->trace->start_tsc) * 1000000.0
/ (double)tf->trace->start_freq),
- tf->trace->start_time);
+ tf->trace->start_time_from_tsc);
tf->buffer.tsc = tf->buffer.begin.cycle_count;
tf->event.tsc = tf->buffer.tsc;
}
-/* 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()
{