From: Mathieu Desnoyers Date: Mon, 13 Feb 2012 14:26:53 +0000 (-0500) Subject: Add --clock-force-correlate option X-Git-Tag: v0.11~1 X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=82ace6d6d97ecb15d093232c76c5d4a3c31e6948 Add --clock-force-correlate option For support of older 2.0-pre traces. Signed-off-by: Mathieu Desnoyers --- diff --git a/converter/Makefile.am b/converter/Makefile.am index 578280a6..2b16f1e4 100644 --- a/converter/Makefile.am +++ b/converter/Makefile.am @@ -15,6 +15,7 @@ babeltrace_LDADD = \ $(top_builddir)/lib/libbabeltrace.la \ $(top_builddir)/formats/libbabeltrace_registry.la \ $(top_builddir)/formats/ctf/libctf.la \ + $(top_builddir)/formats/ctf/metadata/libctf-ast.la \ $(top_builddir)/formats/ctf-text/libctf-text.la \ $(top_builddir)/formats/bt-dummy/libbt-dummy.la diff --git a/converter/babeltrace.c b/converter/babeltrace.c index a7004e1b..f83e1e62 100644 --- a/converter/babeltrace.c +++ b/converter/babeltrace.c @@ -71,6 +71,7 @@ enum { OPT_CLOCK_SECONDS, OPT_CLOCK_DATE, OPT_CLOCK_GMT, + OPT_CLOCK_FORCE_CORRELATE, }; static struct poptOption long_options[] = { @@ -89,6 +90,7 @@ static struct poptOption long_options[] = { { "clock-seconds", 0, POPT_ARG_NONE, NULL, OPT_CLOCK_SECONDS, NULL, NULL }, { "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 }, { NULL, 0, 0, NULL, 0, NULL, NULL }, }; @@ -129,6 +131,8 @@ static void usage(FILE *fp) fprintf(fp, " (default is: [hh:mm:ss.ns])\n"); fprintf(fp, " --clock-date Print clock date\n"); 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"); list_formats(fp); fprintf(fp, "\n"); } @@ -274,6 +278,9 @@ static int parse_options(int argc, char **argv) case OPT_CLOCK_GMT: opt_clock_gmt = 1; break; + case OPT_CLOCK_FORCE_CORRELATE: + opt_clock_force_correlate = 1; + break; default: ret = -EINVAL; diff --git a/formats/ctf/metadata/ctf-visitor-generate-io-struct.c b/formats/ctf/metadata/ctf-visitor-generate-io-struct.c index 1fc69125..4f604d1c 100644 --- a/formats/ctf/metadata/ctf-visitor-generate-io-struct.c +++ b/formats/ctf/metadata/ctf-visitor-generate-io-struct.c @@ -39,6 +39,8 @@ #define _cds_list_first_entry(ptr, type, member) \ cds_list_entry((ptr)->next, type, member) +int opt_clock_force_correlate; + static struct declaration *ctf_type_specifier_list_visit(FILE *fd, int depth, struct ctf_node *type_specifier_list, @@ -2281,13 +2283,24 @@ int ctf_clock_visit(FILE *fd, int depth, struct ctf_node *node, struct ctf_trace if (ret) goto error; } + if (opt_clock_force_correlate) { + /* + * User requested to forcibly correlate the clock + * sources, even if we have no correlatation + * information. + */ + if (!clock->absolute) { + fprintf(fd, "[warning] Forcibly correlating trace clock sources (--clock-force-correlate).\n"); + } + clock->absolute = 1; + } if (!CTF_CLOCK_FIELD_IS_SET(clock, name)) { ret = -EPERM; 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"); + fprintf(fd, "[error] Only CTF traces with a single clock description are supported by this babeltrace version.\n"); ret = -EINVAL; goto error; } @@ -2312,7 +2325,19 @@ void ctf_clock_default(FILE *fd, int depth, struct ctf_trace *trace) clock->description = g_strdup("Default clock"); /* Default clock frequency is set to 1000000000 */ clock->freq = 1000000000ULL; - clock->absolute = 0; /* Not an absolute reference across traces */ + if (opt_clock_force_correlate) { + /* + * User requested to forcibly correlate the clock + * sources, even if we have no correlatation + * information. + */ + if (!clock->absolute) { + fprintf(fd, "[warning] Forcibly correlating trace clock sources (--clock-force-correlate).\n"); + } + clock->absolute = 1; + } else { + clock->absolute = 0; /* Not an absolute reference across traces */ + } trace->single_clock = clock; g_hash_table_insert(trace->clocks, (gpointer) (unsigned long) clock->name, clock); diff --git a/include/babeltrace/babeltrace-internal.h b/include/babeltrace/babeltrace-internal.h index 8996afcd..06a5654a 100644 --- a/include/babeltrace/babeltrace-internal.h +++ b/include/babeltrace/babeltrace-internal.h @@ -48,7 +48,8 @@ extern int opt_all_field_names, opt_clock_raw, opt_clock_seconds, opt_clock_date, - opt_clock_gmt; + opt_clock_gmt, + opt_clock_force_correlate; extern uint64_t opt_clock_offset;