[lttng-dev] [PATCH babeltrace] Add bt_stream_pos to bt_trace_descriptor
Jérémie Galarneau
jeremie.galarneau at efficios.com
Mon May 27 23:38:45 EDT 2013
This is intended to provide a generic way to access the bt_stream_pos API
without having to make assumptions about the output format's descriptor layout.
Renamed format-internal.h to trace-descriptor-internal.h to make it more
representative of the interface it really contains.
Signed-off-by: Jérémie Galarneau <jeremie.galarneau at efficios.com>
---
formats/bt-dummy/bt-dummy.c | 3 ++
formats/ctf-metadata/ctf-metadata.c | 3 ++
formats/ctf-text/ctf-text.c | 3 ++
formats/ctf/ctf.c | 11 ++++--
include/Makefile.am | 5 ++-
include/babeltrace/ctf-ir/metadata.h | 2 +-
include/babeltrace/ctf-text/types.h | 2 +-
include/babeltrace/format-internal.h | 54 -------------------------
include/babeltrace/trace-descriptor-internal.h | 55 ++++++++++++++++++++++++++
include/babeltrace/trace-descriptor.h | 53 +++++++++++++++++++++++++
lib/Makefile.am | 3 +-
lib/trace-descriptor.c | 42 ++++++++++++++++++++
12 files changed, 174 insertions(+), 62 deletions(-)
delete mode 100644 include/babeltrace/format-internal.h
create mode 100644 include/babeltrace/trace-descriptor-internal.h
create mode 100644 include/babeltrace/trace-descriptor.h
create mode 100644 lib/trace-descriptor.c
diff --git a/formats/bt-dummy/bt-dummy.c b/formats/bt-dummy/bt-dummy.c
index 6192e88..d9767fc 100644
--- a/formats/bt-dummy/bt-dummy.c
+++ b/formats/bt-dummy/bt-dummy.c
@@ -55,6 +55,8 @@ struct bt_trace_descriptor *bt_dummy_open_trace(const char *path, int flags,
pos->parent.rw_table = NULL;
pos->parent.event_cb = bt_dummy_write_event;
pos->parent.trace = &pos->trace_descriptor;
+ pos->trace_descriptor.stream_pos = g_ptr_array_sized_new(1);
+ g_ptr_array_add(pos->trace_descriptor.stream_pos, pos);
return &pos->trace_descriptor;
}
@@ -64,6 +66,7 @@ int bt_dummy_close_trace(struct bt_trace_descriptor *td)
struct ctf_text_stream_pos *pos =
container_of(td, struct ctf_text_stream_pos,
trace_descriptor);
+ g_ptr_array_free(td->stream_pos, TRUE);
free(pos);
return 0;
}
diff --git a/formats/ctf-metadata/ctf-metadata.c b/formats/ctf-metadata/ctf-metadata.c
index a5a74c3..e8774eb 100644
--- a/formats/ctf-metadata/ctf-metadata.c
+++ b/formats/ctf-metadata/ctf-metadata.c
@@ -96,6 +96,8 @@ struct bt_trace_descriptor *ctf_metadata_open_trace(const char *path, int flags,
pos->fp = fp;
pos->parent.pre_trace_cb = ctf_metadata_trace_pre_handler;
pos->parent.trace = &pos->trace_descriptor;
+ pos->trace_descriptor.stream_pos = g_ptr_array_sized_new(1);
+ g_ptr_array_add(pos->trace_descriptor.stream_pos, pos);
pos->print_names = 0;
break;
case O_RDONLY:
@@ -116,6 +118,7 @@ int ctf_metadata_close_trace(struct bt_trace_descriptor *td)
int ret;
struct ctf_text_stream_pos *pos =
container_of(td, struct ctf_text_stream_pos, trace_descriptor);
+ g_ptr_array_free(td->stream_pos, TRUE);
if (pos->fp != stdout) {
ret = fclose(pos->fp);
if (ret) {
diff --git a/formats/ctf-text/ctf-text.c b/formats/ctf-text/ctf-text.c
index 48ce31b..c3b55ed 100644
--- a/formats/ctf-text/ctf-text.c
+++ b/formats/ctf-text/ctf-text.c
@@ -562,6 +562,8 @@ struct bt_trace_descriptor *ctf_text_open_trace(const char *path, int flags,
pos->parent.rw_table = write_dispatch_table;
pos->parent.event_cb = ctf_text_write_event;
pos->parent.trace = &pos->trace_descriptor;
+ pos->trace_descriptor.stream_pos = g_ptr_array_sized_new(1);
+ g_ptr_array_add(pos->trace_descriptor.stream_pos, pos);
pos->print_names = 0;
break;
case O_RDONLY:
@@ -582,6 +584,7 @@ int ctf_text_close_trace(struct bt_trace_descriptor *td)
int ret;
struct ctf_text_stream_pos *pos =
container_of(td, struct ctf_text_stream_pos, trace_descriptor);
+ g_ptr_array_free(td->stream_pos, TRUE);
if (pos->fp != stdout) {
ret = fclose(pos->fp);
if (ret) {
diff --git a/formats/ctf/ctf.c b/formats/ctf/ctf.c
index bb94e52..aee80b1 100644
--- a/formats/ctf/ctf.c
+++ b/formats/ctf/ctf.c
@@ -1728,9 +1728,10 @@ int ctf_open_file_stream_read(struct ctf_trace *td, const char *path, int flags,
fprintf(stderr, "[error] Stream index creation error.\n");
goto error_index;
}
- /* Add stream file to stream class */
+ /* Add stream file to stream class and trace descriptor */
g_ptr_array_add(file_stream->parent.stream_class->streams,
&file_stream->parent);
+ g_ptr_array_add(td->parent.stream_pos, &file_stream->pos.parent);
return 0;
error_index:
@@ -1864,6 +1865,7 @@ struct bt_trace_descriptor *ctf_open_trace(const char *path, int flags,
packet_seek = ctf_packet_seek;
td = g_new0(struct ctf_trace, 1);
+ td->parent.stream_pos = g_ptr_array_new();
switch (flags & O_ACCMODE) {
case O_RDONLY:
@@ -1871,7 +1873,8 @@ struct bt_trace_descriptor *ctf_open_trace(const char *path, int flags,
fprintf(stderr, "[error] Path missing for input CTF trace.\n");
goto error;
}
- ret = ctf_open_trace_read(td, path, flags, packet_seek, metadata_fp);
+ ret = ctf_open_trace_read(td, path, flags, packet_seek,
+ metadata_fp);
if (ret)
goto error;
break;
@@ -1885,6 +1888,7 @@ struct bt_trace_descriptor *ctf_open_trace(const char *path, int flags,
return &td->parent;
error:
+ g_ptr_array_free(td->parent.stream_pos, TRUE);
g_free(td);
return NULL;
}
@@ -1967,9 +1971,10 @@ int ctf_open_mmap_stream_read(struct ctf_trace *td,
*/
file_stream->parent.current_clock = td->parent.single_clock;
- /* Add stream file to stream class */
+ /* Add stream file to stream class and trace descriptor */
g_ptr_array_add(file_stream->parent.stream_class->streams,
&file_stream->parent);
+ g_ptr_array_add(td->parent.stream_pos, &file_stream->pos.parent);
return 0;
error_index:
diff --git a/include/Makefile.am b/include/Makefile.am
index eee2ac1..c953fac 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -5,7 +5,8 @@ babeltraceinclude_HEADERS = \
babeltrace/iterator.h \
babeltrace/trace-handle.h \
babeltrace/list.h \
- babeltrace/clock-types.h
+ babeltrace/clock-types.h \
+ babeltrace/trace-descriptor.h
babeltracectfinclude_HEADERS = \
babeltrace/ctf/events.h \
@@ -19,7 +20,7 @@ noinst_HEADERS = \
babeltrace/clock-internal.h \
babeltrace/compiler.h \
babeltrace/context-internal.h \
- babeltrace/format-internal.h \
+ babeltrace/trace-descriptor-internal.h \
babeltrace/iterator-internal.h \
babeltrace/trace-collection.h \
babeltrace/prio_heap.h \
diff --git a/include/babeltrace/ctf-ir/metadata.h b/include/babeltrace/ctf-ir/metadata.h
index 5e92984..458d4d9 100644
--- a/include/babeltrace/ctf-ir/metadata.h
+++ b/include/babeltrace/ctf-ir/metadata.h
@@ -29,7 +29,7 @@
#include <babeltrace/types.h>
#include <babeltrace/format.h>
-#include <babeltrace/format-internal.h>
+#include <babeltrace/trace-descriptor-internal.h>
#include <babeltrace/ctf/types.h>
#include <sys/types.h>
#include <dirent.h>
diff --git a/include/babeltrace/ctf-text/types.h b/include/babeltrace/ctf-text/types.h
index 7b4b717..89b99f8 100644
--- a/include/babeltrace/ctf-text/types.h
+++ b/include/babeltrace/ctf-text/types.h
@@ -35,7 +35,7 @@
#include <babeltrace/babeltrace-internal.h>
#include <babeltrace/types.h>
#include <babeltrace/format.h>
-#include <babeltrace/format-internal.h>
+#include <babeltrace/trace-descriptor-internal.h>
/*
* Inherit from both struct bt_stream_pos and struct bt_trace_descriptor.
diff --git a/include/babeltrace/format-internal.h b/include/babeltrace/format-internal.h
deleted file mode 100644
index 7f3eb5e..0000000
--- a/include/babeltrace/format-internal.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef _BABELTRACE_FORMAT_INTERNAL_H
-#define _BABELTRACE_FORMAT_INTERNAL_H
-
-/*
- * BabelTrace
- *
- * Trace Format Internal Header
- *
- * Copyright 2010-2013 EfficiOS Inc. and Linux Foundation
- *
- * Author: Mathieu Desnoyers <mathieu.desnoyers at 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.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#include <limits.h>
-#include <babeltrace/context-internal.h>
-#include <babeltrace/babeltrace-internal.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Parent trace descriptor */
-struct bt_trace_descriptor {
- char path[PATH_MAX]; /* trace path */
- struct bt_context *ctx;
- struct bt_trace_handle *handle;
- struct trace_collection *collection; /* Container of this trace */
- GHashTable *clocks;
- struct ctf_clock *single_clock; /* currently supports only one clock */
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _BABELTRACE_FORMAT_INTERNAL_H */
diff --git a/include/babeltrace/trace-descriptor-internal.h b/include/babeltrace/trace-descriptor-internal.h
new file mode 100644
index 0000000..8ec23bb
--- /dev/null
+++ b/include/babeltrace/trace-descriptor-internal.h
@@ -0,0 +1,55 @@
+#ifndef _BABELTRACE_TRACE_DESCRIPTOR_INTERNAL_H
+#define _BABELTRACE_TRACE_DESCRIPTOR_INTERNAL_H
+
+/*
+ * BabelTrace
+ *
+ * Trace Descriptor Internal Header
+ *
+ * Copyright 2010-2013 EfficiOS Inc. and Linux Foundation
+ *
+ * Author: Mathieu Desnoyers <mathieu.desnoyers at 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.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include <limits.h>
+#include <babeltrace/context-internal.h>
+#include <babeltrace/babeltrace-internal.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Parent trace descriptor */
+struct bt_trace_descriptor {
+ char path[PATH_MAX]; /* trace path */
+ struct bt_context *ctx;
+ struct bt_trace_handle *handle;
+ struct trace_collection *collection; /* Container of this trace */
+ GHashTable *clocks;
+ struct ctf_clock *single_clock; /* currently supports only one clock */
+ GPtrArray *stream_pos; /* Pointers to bt_stream_pos */
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BABELTRACE_TRACE_DESCRIPTOR_INTERNAL_H */
diff --git a/include/babeltrace/trace-descriptor.h b/include/babeltrace/trace-descriptor.h
new file mode 100644
index 0000000..0ae4b8b
--- /dev/null
+++ b/include/babeltrace/trace-descriptor.h
@@ -0,0 +1,53 @@
+#ifndef _BABELTRACE_TRACE_DESCRIPTOR_H
+#define _BABELTRACE_TRACE_DESCRIPTOR_H
+
+/*
+ * BabelTrace
+ *
+ * Trace Descriptor Header
+ *
+ * Copyright 2013 EfficiOS Inc. and Linux Foundation
+ *
+ * Author: Jérémie Galarneau <jeremie.galarneau at 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.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include <glib.h>
+
+struct bt_trace_descriptor;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * bt_trace_descriptor_get_stream_pos: Get the stream_pos array associated
+ * with descriptor's trace
+ *
+ * Return: Array of pointers to struct bt_stream_pos
+ */
+extern const GPtrArray *bt_trace_descriptor_get_stream_pos(
+ const struct bt_trace_descriptor *descriptor);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BABELTRACE_TRACE_DESCRIPTOR_H */
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 7ffb164..379688d 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -9,7 +9,8 @@ libbabeltrace_la_SOURCES = babeltrace.c \
context.c \
trace-handle.c \
trace-collection.c \
- registry.c
+ registry.c \
+ trace-descriptor.c
libbabeltrace_la_LDFLAGS = \
-Wl,--no-as-needed \
diff --git a/lib/trace-descriptor.c b/lib/trace-descriptor.c
new file mode 100644
index 0000000..4001679
--- /dev/null
+++ b/lib/trace-descriptor.c
@@ -0,0 +1,42 @@
+/*
+ * trace-descriptor.c
+ *
+ * Babeltrace Library
+ *
+ * Copyright 2013 EfficiOS Inc. and Linux Foundation
+ *
+ * Author: Jérémie Galarneau <jeremie.galarneau at 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.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include <babeltrace/trace-descriptor-internal.h>
+
+const GPtrArray *bt_trace_descriptor_get_stream_pos(
+ const struct bt_trace_descriptor *descriptor)
+{
+ const GPtrArray *ret;
+ if (!descriptor) {
+ ret = NULL;
+ goto end;
+ }
+ ret = descriptor->stream_pos;
+end:
+ return ret;
+}
--
1.8.2.3
More information about the lttng-dev
mailing list