From 65923160260ca0d5928db5d8840e76576cb429c4 Mon Sep 17 00:00:00 2001 From: "Ikaheimonen, JP" Date: Thu, 2 May 2013 10:19:33 -0400 Subject: [PATCH] Add new option --clock-offset-ns Add a new option --clock-offset-ns. It requires a parameter that specifies a clock offset (in nanoseconds) that is added to each timestamp. This works exactly as the option --clock-offset, except that the value is given in nanoseconds instead of full seconds. The two options --clock-offset and --clock-offset-ns are compatible with each other, and it's possible to give both. For example, having the options --clock-offset 2 --clock-offset-ns 1000000 means that 2.001 seconds is added to each timestamp. Signed-off-by: Mathieu Desnoyers --- converter/babeltrace.c | 26 ++++++++++++++++++++++++ formats/ctf/ctf.c | 4 ++++ include/babeltrace/babeltrace-internal.h | 1 + 3 files changed, 31 insertions(+) diff --git a/converter/babeltrace.c b/converter/babeltrace.c index a34af175..2fd371c3 100644 --- a/converter/babeltrace.c +++ b/converter/babeltrace.c @@ -93,6 +93,7 @@ enum { OPT_FIELDS, OPT_NO_DELTA, OPT_CLOCK_OFFSET, + OPT_CLOCK_OFFSET_NS, OPT_CLOCK_CYCLES, OPT_CLOCK_SECONDS, OPT_CLOCK_DATE, @@ -121,6 +122,7 @@ static struct poptOption long_options[] = { { "fields", 'f', POPT_ARG_STRING, NULL, OPT_FIELDS, NULL, NULL }, { "no-delta", 0, POPT_ARG_NONE, NULL, OPT_NO_DELTA, NULL, NULL }, { "clock-offset", 0, POPT_ARG_STRING, NULL, OPT_CLOCK_OFFSET, NULL, NULL }, + { "clock-offset-ns", 0, POPT_ARG_STRING, NULL, OPT_CLOCK_OFFSET_NS, NULL, NULL }, { "clock-cycles", 0, POPT_ARG_NONE, NULL, OPT_CLOCK_CYCLES, NULL, NULL }, { "clock-seconds", 0, POPT_ARG_NONE, NULL, OPT_CLOCK_SECONDS, NULL, NULL }, { "clock-date", 0, POPT_ARG_NONE, NULL, OPT_CLOCK_DATE, NULL, NULL }, @@ -164,6 +166,7 @@ static void usage(FILE *fp) fprintf(fp, " (default: trace:hostname,trace:procname,trace:vpid)\n"); fprintf(fp, " --clock-cycles Timestamp in cycles\n"); fprintf(fp, " --clock-offset seconds Clock offset in seconds\n"); + fprintf(fp, " --clock-offset-ns ns Clock offset in nanoseconds\n"); fprintf(fp, " --clock-seconds Print the timestamps as [sec.ns]\n"); fprintf(fp, " (default is: [hh:mm:ss.ns])\n"); fprintf(fp, " --clock-date Print clock date\n"); @@ -357,6 +360,29 @@ static int parse_options(int argc, char **argv) case OPT_CLOCK_SECONDS: opt_clock_seconds = 1; break; + case OPT_CLOCK_OFFSET_NS: + { + char *str; + char *endptr; + + str = (char *) poptGetOptArg(pc); + if (!str) { + fprintf(stderr, "[error] Missing --clock-offset-ns argument\n"); + ret = -EINVAL; + goto end; + } + errno = 0; + opt_clock_offset_ns = strtoull(str, &endptr, 0); + if (*endptr != '\0' || str == endptr || errno != 0) { + fprintf(stderr, "[error] Incorrect --clock-offset-ns argument: %s\n", str); + ret = -EINVAL; + free(str); + goto end; + } + free(str); + break; + } + case OPT_CLOCK_DATE: opt_clock_date = 1; break; diff --git a/formats/ctf/ctf.c b/formats/ctf/ctf.c index 58f937d8..6b292a7e 100644 --- a/formats/ctf/ctf.c +++ b/formats/ctf/ctf.c @@ -77,6 +77,7 @@ int opt_clock_cycles, opt_clock_gmt; uint64_t opt_clock_offset; +uint64_t opt_clock_offset_ns; extern int yydebug; @@ -321,6 +322,9 @@ void ctf_print_timestamp_real(FILE *fp, ts_nsec = timestamp; + /* Add command-line offset in ns*/ + ts_nsec += opt_clock_offset_ns; + /* Add command-line offset */ ts_sec += opt_clock_offset; diff --git a/include/babeltrace/babeltrace-internal.h b/include/babeltrace/babeltrace-internal.h index 22866bc9..9b9ffbdf 100644 --- a/include/babeltrace/babeltrace-internal.h +++ b/include/babeltrace/babeltrace-internal.h @@ -220,5 +220,6 @@ extern int opt_all_field_names, opt_clock_force_correlate; extern uint64_t opt_clock_offset; +extern uint64_t opt_clock_offset_ns; #endif -- 2.34.1