From c34ea0fad3f9900c3b97efa229d221927422dacf Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Thu, 23 Feb 2012 07:54:23 -0500 Subject: [PATCH] Combine duplicated API/pretty-print timestamp code Signed-off-by: Mathieu Desnoyers --- formats/ctf/Makefile.am | 3 +- formats/ctf/ctf.c | 16 ++++------ formats/ctf/events-private.h | 57 ++++++++++++++++++++++++++++++++++++ formats/ctf/events.c | 31 +++++--------------- 4 files changed, 72 insertions(+), 35 deletions(-) create mode 100644 formats/ctf/events-private.h diff --git a/formats/ctf/Makefile.am b/formats/ctf/Makefile.am index f9468fcb..a85e7d3e 100644 --- a/formats/ctf/Makefile.am +++ b/formats/ctf/Makefile.am @@ -7,7 +7,8 @@ lib_LTLIBRARIES = libctf.la libctf_la_SOURCES = \ ctf.c \ events.c \ - callbacks.c + callbacks.c \ + events-private.h libctf_la_LIBADD = \ types/libctf-types.la \ diff --git a/formats/ctf/ctf.c b/formats/ctf/ctf.c index fa196481..7c3df128 100644 --- a/formats/ctf/ctf.c +++ b/formats/ctf/ctf.c @@ -40,6 +40,7 @@ #include "metadata/ctf-scanner.h" #include "metadata/ctf-parser.h" #include "metadata/ctf-ast.h" +#include "events-private.h" /* * We currently simply map a page to read the packet header and packet @@ -149,21 +150,14 @@ void ctf_print_timestamp(FILE *fp, uint64_t timestamp) { uint64_t ts_sec = 0, ts_nsec; - struct ctf_trace *trace = stream->stream_class->trace; - struct trace_collection *tc = trace->collection; - uint64_t tc_offset = tc->single_clock_offset_avg; - if (stream->current_clock->freq == 1000000000ULL) { - ts_nsec = timestamp; + if (opt_clock_raw) { + ts_nsec = ctf_get_timestamp_raw(stream, timestamp); } else { - ts_nsec = (uint64_t) ((double) timestamp * 1000000000.0 - / (double) stream->current_clock->freq); + ts_nsec = ctf_get_timestamp(stream, timestamp); } - /* Add offsets */ - if (!opt_clock_raw) { - ts_nsec += tc_offset; - } + /* Add command-line offset */ ts_sec += opt_clock_offset; ts_sec += ts_nsec / NSEC_PER_SEC; diff --git a/formats/ctf/events-private.h b/formats/ctf/events-private.h new file mode 100644 index 00000000..bc1dfbd9 --- /dev/null +++ b/formats/ctf/events-private.h @@ -0,0 +1,57 @@ +#ifndef _CTF_EVENTS_PRIVATE_H +#define _CTF_EVENTS_PRIVATE_H + +/* + * ctf/events-private.h + * + * Babeltrace Library + * + * Copyright 2011-2012 EfficiOS Inc. and Linux Foundation + * + * Author: Mathieu Desnoyers + * Julien Desfossez + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + */ + +#include +#include + +static inline +uint64_t ctf_get_timestamp_raw(struct ctf_stream *stream, + uint64_t timestamp) +{ + uint64_t ts_nsec; + + if (stream->current_clock->freq == 1000000000ULL) { + ts_nsec = timestamp; + } else { + ts_nsec = (uint64_t) ((double) timestamp * 1000000000.0 + / (double) stream->current_clock->freq); + } + return ts_nsec; +} + +static inline +uint64_t ctf_get_timestamp(struct ctf_stream *stream, + uint64_t timestamp) +{ + uint64_t ts_nsec; + struct ctf_trace *trace = stream->stream_class->trace; + struct trace_collection *tc = trace->collection; + uint64_t tc_offset = tc->single_clock_offset_avg; + + ts_nsec = ctf_get_timestamp_raw(stream, timestamp); + ts_nsec += tc_offset; /* Add offset */ + return ts_nsec; +} + +#endif /* _CTF_EVENTS_PRIVATE_H */ diff --git a/formats/ctf/events.c b/formats/ctf/events.c index d14836b0..39620383 100644 --- a/formats/ctf/events.c +++ b/formats/ctf/events.c @@ -29,6 +29,8 @@ #include #include +#include "events-private.h" + /* * thread local storage to store the last error that occured * while reading a field, this variable must be accessed by @@ -320,36 +322,19 @@ error: uint64_t bt_ctf_get_timestamp_raw(struct bt_ctf_event *event) { if (event && event->stream->has_timestamp) - return event->stream->timestamp; + return ctf_get_timestamp_raw(event->stream, + event->stream->timestamp); else return -1ULL; } uint64_t bt_ctf_get_timestamp(struct bt_ctf_event *event) { - uint64_t ts_nsec; - struct ctf_trace *trace; - struct trace_collection *tc; - uint64_t tc_offset; - uint64_t timestamp; - - if (!event->stream->has_timestamp) { + if (event && event->stream->has_timestamp) + return ctf_get_timestamp(event->stream, + event->stream->timestamp); + else return -1ULL; - } - - trace = event->stream->stream_class->trace; - tc = trace->collection; - tc_offset = tc->single_clock_offset_avg; - timestamp = event->stream->timestamp; - if (event->stream->current_clock->freq == 1000000000ULL) { - ts_nsec = timestamp; - } else { - ts_nsec = (uint64_t) ((double) timestamp * 1000000000.0 - / (double) event->stream->current_clock->freq); - } - ts_nsec += tc_offset; - - return ts_nsec; } static void bt_ctf_field_set_error(int error) -- 2.34.1