X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fctf-ir%2Fstream-internal.h;h=0cbd18b561539217621099ac837370d2f625dc74;hb=7b33a0e0d8f23d90285ea7c7820a725bcbd96c6b;hp=41fe247d21afbe152a9b7dc80447781b47b64e0a;hpb=a262eee79c9fc2e1ea2542294c457fae154a2deb;p=babeltrace.git diff --git a/include/babeltrace/ctf-ir/stream-internal.h b/include/babeltrace/ctf-ir/stream-internal.h index 41fe247d..0cbd18b5 100644 --- a/include/babeltrace/ctf-ir/stream-internal.h +++ b/include/babeltrace/ctf-ir/stream-internal.h @@ -1,5 +1,5 @@ -#ifndef BABELTRACE_CTF_WRITER_STREAM_INTERNAL_H -#define BABELTRACE_CTF_WRITER_STREAM_INTERNAL_H +#ifndef BABELTRACE_CTF_IR_STREAM_INTERNAL_H +#define BABELTRACE_CTF_IR_STREAM_INTERNAL_H /* * BabelTrace - CTF Writer: Stream internal @@ -28,91 +28,43 @@ */ #include +#include #include -#include -#include -#include -#include +#include #include #include -struct bt_port; -struct bt_component; +struct bt_stream_class; +struct bt_stream; -typedef void (*bt_ctf_stream_destroy_listener_func)( - struct bt_ctf_stream *stream, void *data); - -struct bt_ctf_stream_destroy_listener { - bt_ctf_stream_destroy_listener_func func; - void *data; -}; - -struct bt_ctf_stream { +struct bt_stream { struct bt_object base; - int64_t id; - struct bt_ctf_stream_class *stream_class; - GString *name; - struct bt_ctf_field *packet_header; - struct bt_ctf_field *packet_context; - /* - * When a notification which contains a reference to a stream - * object (event notification, for example) is returned by the - * "next" method of a sink or filter component's notification - * iterator, it must NOT be returned by the "next" method of a - * notification iterator which iterates on the notifications of - * another output port of the same component. - * - * To ensure this, the stream object keeps a hash table which - * indicates which port, for a given component, is currently - * allowed to emit notifications which contain a reference to - * this stream. - * - * This is a `struct bt_component *` to `struct bt_port *` hash - * table. Both pointers are weak references because there's no - * need to keep one or the other alive as far as this stream is - * concerned. - */ - GHashTable *comp_cur_port; + /* Weak: parent is this class's trace */ + struct bt_stream_class *class; - /* Writer-specific members. */ - /* Array of pointers to bt_ctf_event for the current packet */ - GPtrArray *events; - struct bt_ctf_stream_pos pos; - unsigned int flushed_packet_count; - uint64_t discarded_events; - uint64_t size; - - /* Array of struct bt_ctf_stream_destroy_listener */ - GArray *destroy_listeners; -}; + struct { + GString *str; -BT_HIDDEN -int bt_ctf_stream_set_fd(struct bt_ctf_stream *stream, int fd); + /* NULL or `str->str` above */ + const char *value; + } name; -BT_HIDDEN -void bt_ctf_stream_map_component_to_port(struct bt_ctf_stream *stream, - struct bt_component *comp, - struct bt_port *port); + uint64_t id; -BT_HIDDEN -struct bt_port *bt_ctf_stream_port_for_component(struct bt_ctf_stream *stream, - struct bt_component *comp); + /* Pool of `struct bt_packet *` */ + struct bt_object_pool packet_pool; -BT_HIDDEN -void bt_ctf_stream_add_destroy_listener(struct bt_ctf_stream *stream, - bt_ctf_stream_destroy_listener_func func, void *data); + bool frozen; +}; BT_HIDDEN -void bt_ctf_stream_remove_destroy_listener(struct bt_ctf_stream *stream, - bt_ctf_stream_destroy_listener_func func, void *data); +void _bt_stream_freeze(struct bt_stream *stream); -static inline -struct bt_ctf_stream_class *bt_ctf_stream_borrow_stream_class( - struct bt_ctf_stream *stream) -{ - assert(stream); - return stream->stream_class; -} +#ifdef BT_DEV_MODE +# define bt_stream_freeze _bt_stream_freeze +#else +# define bt_stream_freeze(_stream) +#endif -#endif /* BABELTRACE_CTF_WRITER_STREAM_INTERNAL_H */ +#endif /* BABELTRACE_CTF_IR_STREAM_INTERNAL_H */