From: Mathieu Desnoyers Date: Mon, 9 May 2011 17:23:40 +0000 (-0400) Subject: Update pretty-printing output X-Git-Tag: v0.1~62 X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=764af3f43c289a0a5cd8bf6fd85d9361ae17a253 Update pretty-printing output Signed-off-by: Mathieu Desnoyers --- diff --git a/converter/babeltrace-lib.c b/converter/babeltrace-lib.c index cc3d8d3b..aba42199 100644 --- a/converter/babeltrace-lib.c +++ b/converter/babeltrace-lib.c @@ -35,14 +35,14 @@ int convert_stream(struct ctf_text_stream_pos *sout, /* For each event, print header, context, payload */ /* TODO: order events by timestamps across streams */ for (;;) { - ret = sin->pos.parent.event_cb(&sin->pos.parent, sin->stream); + ret = sin->pos.parent.event_cb(&sin->pos.parent, &sin->stream); if (ret == EOF) break; else if (ret) { fprintf(stdout, "[error] Reading event failed.\n"); goto error; } - ret = sout->parent.event_cb(&sout->parent, sin->stream); + ret = sout->parent.event_cb(&sout->parent, &sin->stream); if (ret) { fprintf(stdout, "[error] Writing event failed.\n"); goto error; diff --git a/formats/ctf-text/ctf-text.c b/formats/ctf-text/ctf-text.c index c355f0a6..882e0620 100644 --- a/formats/ctf-text/ctf-text.c +++ b/formats/ctf-text/ctf-text.c @@ -55,10 +55,11 @@ struct format ctf_text_format = { static int ctf_text_write_event(struct stream_pos *ppos, - struct ctf_stream_class *stream_class) + struct ctf_stream *stream) { struct ctf_text_stream_pos *pos = container_of(ppos, struct ctf_text_stream_pos, parent); + struct ctf_stream_class *stream_class = stream->stream_class; struct ctf_event *event_class; uint64_t id = 0; int len_index; @@ -96,7 +97,7 @@ int ctf_text_write_event(struct stream_pos *ppos, fprintf(pos->fp, "timestamp = "); else fprintf(pos->fp, "["); - fprintf(pos->fp, "%" PRIu64, (uint64_t) 0); /* TODO */ + fprintf(pos->fp, "%12" PRIu64, stream->timestamp); if (!pos->print_names) fprintf(pos->fp, "]"); @@ -112,7 +113,8 @@ int ctf_text_write_event(struct stream_pos *ppos, else fprintf(pos->fp, ": "); - if (stream_class->event_header) { + /* Only show the event header in verbose mode */ + if (babeltrace_verbose && stream_class->event_header) { if (field_nr++ != 0) fprintf(pos->fp, ", "); if (pos->print_names) diff --git a/formats/ctf/ctf.c b/formats/ctf/ctf.c index 441d2bb4..f4432a89 100644 --- a/formats/ctf/ctf.c +++ b/formats/ctf/ctf.c @@ -80,10 +80,11 @@ struct format ctf_format = { }; static -int ctf_read_event(struct stream_pos *ppos, struct ctf_stream_class *stream_class) +int ctf_read_event(struct stream_pos *ppos, struct ctf_stream *stream) { struct ctf_stream_pos *pos = container_of(ppos, struct ctf_stream_pos, parent); + struct ctf_stream_class *stream_class = stream->stream_class; struct ctf_event *event_class; uint64_t id = 0; int len_index; @@ -110,6 +111,22 @@ int ctf_read_event(struct stream_pos *ppos, struct ctf_stream_class *stream_clas assert(defint->declaration->signedness == FALSE); id = defint->value._unsigned; /* set id */ } + + /* lookup timestamp */ + len_index = struct_declaration_lookup_field_index(stream_class->event_header_decl, + g_quark_from_static_string("timestamp")); + if (len_index >= 0) { + struct definition_integer *defint; + struct definition *field; + + field = struct_definition_get_field_from_index(stream_class->event_header, len_index); + assert(field->declaration->id == CTF_TYPE_INTEGER); + defint = container_of(field, struct definition_integer, p); + assert(defint->declaration->signedness == FALSE); + /* update timestamp */ + stream->timestamp = defint->value._unsigned; + } + } /* Read stream-declared event context */ @@ -151,8 +168,9 @@ error: } static -int ctf_write_event(struct stream_pos *pos, struct ctf_stream_class *stream_class) +int ctf_write_event(struct stream_pos *pos, struct ctf_stream *stream) { + struct ctf_stream_class *stream_class = stream->stream_class; struct ctf_event *event_class; uint64_t id = 0; int len_index; @@ -545,7 +563,7 @@ int create_stream_packet_index(struct ctf_trace *td, fprintf(stdout, "[error] Stream %" PRIu64 " is not declared in metadata.\n", stream_id); return -EINVAL; } - file_stream->stream = stream; + file_stream->stream.stream_class = stream; } first_packet = 0; @@ -639,7 +657,7 @@ int ctf_open_file_stream_read(struct ctf_trace *td, const char *path, int flags) if (ret) goto error_index; /* Add stream file to stream class */ - g_ptr_array_add(file_stream->stream->files, file_stream); + g_ptr_array_add(file_stream->stream.stream_class->files, file_stream); return 0; error_index: diff --git a/include/babeltrace/ctf/metadata.h b/include/babeltrace/ctf/metadata.h index de1a70d1..903d018d 100644 --- a/include/babeltrace/ctf/metadata.h +++ b/include/babeltrace/ctf/metadata.h @@ -32,11 +32,17 @@ struct ctf_trace; struct ctf_stream_class; +struct ctf_stream; struct ctf_event; +struct ctf_stream { + struct ctf_stream_class *stream_class; + uint64_t timestamp; /* Current timestamp, in ns */ +}; + struct ctf_file_stream { uint64_t stream_id; - struct ctf_stream_class *stream; + struct ctf_stream stream; struct ctf_stream_pos pos; /* current stream position */ }; diff --git a/include/babeltrace/types.h b/include/babeltrace/types.h index fa543bf2..b7e84da2 100644 --- a/include/babeltrace/types.h +++ b/include/babeltrace/types.h @@ -31,7 +31,7 @@ /* Preallocate this many fields for structures */ #define DEFAULT_NR_STRUCT_FIELDS 8 -struct ctf_stream_class; +struct ctf_stream; struct stream_pos; struct format; struct definition; @@ -114,7 +114,7 @@ struct stream_pos { /* read/write dispatch table. Specific to plugin used for stream. */ rw_dispatch *rw_table; /* rw dispatch table */ int (*event_cb)(struct stream_pos *pos, - struct ctf_stream_class *stream_class); + struct ctf_stream *stream); }; static inline