.close_trace = ctf_close_trace,
};
+/*
+ * Update stream current timestamp, keep at clock frequency.
+ */
static
void ctf_update_timestamp(struct ctf_stream *stream,
struct definition_integer *integer_definition)
stream->timestamp = updateval;
}
+/*
+ * Print timestamp, rescaling clock frequency to nanoseconds and
+ * applying offsets as needed (unix time).
+ */
void ctf_print_timestamp(FILE *fp,
struct ctf_stream *stream,
uint64_t timestamp)
struct trace_collection *tc = trace->collection;
uint64_t tc_offset = tc->single_clock_offset_avg;
- ts_nsec = timestamp;
+ if (stream->current_clock->freq == 1000000000ULL) {
+ ts_nsec = timestamp;
+ } else {
+ ts_nsec = (uint64_t) ((double) timestamp * 1000000000.0
+ / (double) stream->current_clock->freq);
+ }
/* Add offsets */
if (!opt_clock_raw) {
ret = create_trace_definitions(td, &file_stream->parent);
if (ret)
goto error_def;
+ /*
+ * For now, only a single slock is supported.
+ */
+ file_stream->parent.current_clock = td->single_clock;
ret = create_stream_packet_index(td, file_stream);
if (ret)
goto error_index;
struct ctf_clock *clock;
clock = g_new0(struct ctf_clock, 1);
+ /* Default clock frequency is set to 1000000000 */
+ clock->freq = 1000000000ULL;
cds_list_for_each_entry(iter, &node->u.clock.declaration_list, siblings) {
ret = ctf_clock_declaration_visit(fd, depth + 1, iter, clock, trace);
if (ret)
fprintf(fd, "[error] %s: missing namefield in clock declaration\n", __func__);
goto error;
}
+ if (g_hash_table_size(trace->clocks) > 0) {
+ fprintf(stderr, "[error] Only CTF traces with a single clock description are supported by this babeltrace version.\n");
+ ret = -EINVAL;
+ goto error;
+ }
+ trace->single_clock = clock;
g_hash_table_insert(trace->clocks, (gpointer) (unsigned long) clock->name, clock);
return 0;
struct ctf_stream_class;
struct ctf_stream;
struct ctf_event;
+struct ctf_stream;
+struct ctf_clock;
struct ctf_stream {
struct ctf_stream_class *stream_class;
struct definition_scope *parent_def_scope; /* for initialization */
int stream_definitions_created;
+ struct ctf_clock *current_clock;
+
/* Event discarded information */
uint32_t events_discarded;
uint64_t prev_timestamp; /* Last event */
GPtrArray *streams; /* Array of struct ctf_stream_class pointers */
struct ctf_stream *metadata;
GHashTable *clocks;
+ struct ctf_clock *single_clock; /* currently supports only one clock */
struct trace_collection *collection; /* Container of this trace */
struct declaration_struct *packet_header_decl;