[lttng-dev] [PATCH] Add new option --seek
Vincent Bernat
bernat at luffy.cx
Fri Sep 27 16:31:04 EDT 2013
From: Vincent Bernat <vincent.bernat at dailymotion.com>
Add a new option --seek. It requires a parameter that specifies the
offset in seconds to seek from the beginning of the trace. This allows
a user to skip the beginning of a trace or to produce a smaller trace
to be used by other tools.
Signed-off-by: Vincent Bernat <vincent.bernat at dailymotion.com>
---
converter/babeltrace.c | 49 ++++++++++++++++++++++++++++++++
doc/babeltrace.1 | 3 ++
formats/ctf/ctf.c | 1 +
include/babeltrace/babeltrace-internal.h | 1 +
4 files changed, 54 insertions(+)
diff --git a/converter/babeltrace.c b/converter/babeltrace.c
index d5a7040..0ac7312 100644
--- a/converter/babeltrace.c
+++ b/converter/babeltrace.c
@@ -99,6 +99,7 @@ enum {
OPT_CLOCK_DATE,
OPT_CLOCK_GMT,
OPT_CLOCK_FORCE_CORRELATE,
+ OPT_SEEK,
};
/*
@@ -128,6 +129,7 @@ static struct poptOption long_options[] = {
{ "clock-date", 0, POPT_ARG_NONE, NULL, OPT_CLOCK_DATE, NULL, NULL },
{ "clock-gmt", 0, POPT_ARG_NONE, NULL, OPT_CLOCK_GMT, NULL, NULL },
{ "clock-force-correlate", 0, POPT_ARG_NONE, NULL, OPT_CLOCK_FORCE_CORRELATE, NULL, NULL },
+ { "seek", 0, POPT_ARG_STRING, NULL, OPT_SEEK, NULL, NULL },
{ NULL, 0, 0, NULL, 0, NULL, NULL },
};
@@ -173,6 +175,8 @@ static void usage(FILE *fp)
fprintf(fp, " --clock-gmt Print clock in GMT time zone (default: local time zone)\n");
fprintf(fp, " --clock-force-correlate Assume that clocks are inherently correlated\n");
fprintf(fp, " across traces.\n");
+ fprintf(fp, " --seek Seek to the given position in seconds,\n");
+ fprintf(fp, " relative to the beginning of the trace.\n");
list_formats(fp);
fprintf(fp, "\n");
}
@@ -393,6 +397,29 @@ static int parse_options(int argc, char **argv)
opt_clock_force_correlate = 1;
break;
+ case OPT_SEEK:
+ {
+ char *str;
+ char *endptr;
+
+ str = (char *) poptGetOptArg(pc);
+ if (!str) {
+ fprintf(stderr, "[error] Missing --seek argument\n");
+ ret = -EINVAL;
+ goto end;
+ }
+ errno = 0;
+ opt_seek = strtoull(str, &endptr, 0);
+ if (*endptr != '\0' || str == endptr || errno != 0) {
+ fprintf(stderr, "[error] Incorrect --seek argument: %s\n", str);
+ ret = -EINVAL;
+ free(str);
+ goto end;
+ }
+ free(str);
+ break;
+ }
+
default:
ret = -EINVAL;
goto end;
@@ -609,6 +636,7 @@ int convert_trace(struct bt_trace_descriptor *td_write,
struct bt_ctf_iter *iter;
struct ctf_text_stream_pos *sout;
struct bt_iter_pos begin_pos;
+ struct bt_iter_pos seek_pos;
struct bt_ctf_event *ctf_event;
int ret;
@@ -624,6 +652,27 @@ int convert_trace(struct bt_trace_descriptor *td_write,
ret = -1;
goto error_iter;
}
+ if (opt_seek > 0) {
+ /* Read the first event to be able to seek. */
+ ctf_event = bt_ctf_iter_read_event(iter);
+ if (!ctf_event) {
+ ret = -1;
+ goto error_iter;
+ }
+ if (!ctf_event->parent->stream->has_timestamp) {
+ fprintf(stderr, "[error] Unable to seek to %" PRIu64 ". No timestamp.\n",
+ opt_seek);
+ goto end;
+ }
+ seek_pos.type = BT_SEEK_TIME;
+ seek_pos.u.seek_time = opt_seek*1000*1000*1000 + bt_ctf_get_timestamp(ctf_event);
+ ret = bt_iter_set_pos(bt_ctf_get_iter(iter), &seek_pos);
+ if (ret) {
+ fprintf(stderr, "[error] Unable to seek to %" PRIu64 ".\n",
+ opt_seek);
+ goto end;
+ }
+ }
while ((ctf_event = bt_ctf_iter_read_event(iter))) {
ret = sout->parent.event_cb(&sout->parent, ctf_event->parent->stream);
if (ret) {
diff --git a/doc/babeltrace.1 b/doc/babeltrace.1
index 929c563..d775fd8 100644
--- a/doc/babeltrace.1
+++ b/doc/babeltrace.1
@@ -71,6 +71,9 @@ Print clock date
.TP
.BR "--clock-gmt"
Print clock in GMT time zone (default: local time zone)
+.BR "--seek"
+Seek to the given position in seconds, relative to the beginning of
+the trace
.TP
.fi
diff --git a/formats/ctf/ctf.c b/formats/ctf/ctf.c
index 947b439..078b630 100644
--- a/formats/ctf/ctf.c
+++ b/formats/ctf/ctf.c
@@ -78,6 +78,7 @@ int opt_clock_cycles,
uint64_t opt_clock_offset;
uint64_t opt_clock_offset_ns;
+uint64_t opt_seek;
extern int yydebug;
diff --git a/include/babeltrace/babeltrace-internal.h b/include/babeltrace/babeltrace-internal.h
index 1f379ee..86eb356 100644
--- a/include/babeltrace/babeltrace-internal.h
+++ b/include/babeltrace/babeltrace-internal.h
@@ -195,5 +195,6 @@ extern int opt_all_field_names,
extern uint64_t opt_clock_offset;
extern uint64_t opt_clock_offset_ns;
+extern uint64_t opt_seek;
#endif
--
1.8.4.rc3
More information about the lttng-dev
mailing list