Combine duplicated API/pretty-print timestamp code
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 23 Feb 2012 12:54:23 +0000 (07:54 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 23 Feb 2012 12:54:23 +0000 (07:54 -0500)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
formats/ctf/Makefile.am
formats/ctf/ctf.c
formats/ctf/events-private.h [new file with mode: 0644]
formats/ctf/events.c

index f9468fcbfb0d21be9c1f61bd2912957f5513ce81..a85e7d3eed0871f0d6679183e497e26541e99983 100644 (file)
@@ -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 \
index fa19648155964faa6a8dbedc283a2fbb2d655ab2..7c3df128c9b147dd86846e8d2aaed8c6170f6ee6 100644 (file)
@@ -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 (file)
index 0000000..bc1dfbd
--- /dev/null
@@ -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 <mathieu.desnoyers@efficios.com>
+ *         Julien Desfossez <julien.desfossez@efficios.com>
+ *
+ * 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 <babeltrace/ctf/events.h>
+#include <babeltrace/ctf-ir/metadata.h>
+
+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 */
index d14836b07135e25a447e23b68dd4c42e4f5229d6..39620383879b3aae0076bb9aedf710e2d9c88d22 100644 (file)
@@ -29,6 +29,8 @@
 #include <babeltrace/ctf/metadata.h>
 #include <glib.h>
 
+#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)
This page took 0.026839 seconds and 4 git commands to generate.