From: Simon Marchi Date: Tue, 6 Feb 2024 17:35:10 +0000 (+0000) Subject: lib: move graph/message/iterator.h -> graph/iterator.h X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=5155b005cfadade509649b8f9a3bf2c055c6edfd lib: move graph/message/iterator.h -> graph/iterator.h This file doesn't belong in the `message` directory, move it up one level, next to `iterator.c`. Change-Id: I096d91d5afa32ebb304b5132cad067e820f2bb30 Signed-off-by: Simon Marchi Reviewed-on: https://review.lttng.org/c/babeltrace/+/11749 Tested-by: jenkins Reviewed-by: Philippe Proulx --- diff --git a/src/Makefile.am b/src/Makefile.am index 3427a88d..e01f8734 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -378,7 +378,6 @@ lib_libbabeltrace2_la_SOURCES = \ lib/graph/message/event.h \ lib/graph/message-iterator-class.c \ lib/graph/message-iterator-class.h \ - lib/graph/message/iterator.h \ lib/graph/message/message.c \ lib/graph/message/message.h \ lib/graph/message/message-iterator-inactivity.c \ @@ -408,6 +407,7 @@ lib_libbabeltrace2_la_SOURCES = \ lib/graph/interrupter.c \ lib/graph/interrupter.h \ lib/graph/iterator.c \ + lib/graph/iterator.h \ lib/graph/mip.c \ lib/graph/port.c \ lib/graph/port.h \ diff --git a/src/lib/error.c b/src/lib/error.c index ab794673..837bd416 100644 --- a/src/lib/error.c +++ b/src/lib/error.c @@ -12,9 +12,9 @@ #include #include "error.h" -#include "graph/message/iterator.h" #include "graph/component.h" #include "graph/component-class.h" +#include "graph/iterator.h" #include "common/assert.h" #include "lib/assert-cond.h" #include "lib/func-status.h" diff --git a/src/lib/graph/component-source.c b/src/lib/graph/component-source.c index 096d2425..d7315dde 100644 --- a/src/lib/graph/component-source.c +++ b/src/lib/graph/component-source.c @@ -18,7 +18,7 @@ #include "component-source.h" #include "component.h" #include "port.h" -#include "message/iterator.h" +#include "iterator.h" #include "lib/func-status.h" struct bt_component *bt_component_source_create(void) diff --git a/src/lib/graph/component.c b/src/lib/graph/component.c index 97fff9b6..dcda0490 100644 --- a/src/lib/graph/component.c +++ b/src/lib/graph/component.c @@ -27,7 +27,7 @@ #include "component-sink.h" #include "connection.h" #include "graph.h" -#include "message/iterator.h" +#include "iterator.h" #include "port.h" #include "lib/func-status.h" diff --git a/src/lib/graph/connection.c b/src/lib/graph/connection.c index da4429d0..42accaa4 100644 --- a/src/lib/graph/connection.c +++ b/src/lib/graph/connection.c @@ -19,7 +19,7 @@ #include "component.h" #include "connection.h" #include "graph.h" -#include "message/iterator.h" +#include "iterator.h" #include "port.h" static diff --git a/src/lib/graph/connection.h b/src/lib/graph/connection.h index bc2513d5..dbc888e1 100644 --- a/src/lib/graph/connection.h +++ b/src/lib/graph/connection.h @@ -14,7 +14,7 @@ #include "common/macros.h" #include -#include "message/iterator.h" +#include "iterator.h" struct bt_graph; diff --git a/src/lib/graph/iterator.c b/src/lib/graph/iterator.c index 73893ddb..8da13282 100644 --- a/src/lib/graph/iterator.c +++ b/src/lib/graph/iterator.c @@ -40,10 +40,10 @@ #include "component.h" #include "connection.h" #include "graph.h" +#include "iterator.h" #include "message-iterator-class.h" #include "message/discarded-items.h" #include "message/event.h" -#include "message/iterator.h" #include "message/message.h" #include "message/message-iterator-inactivity.h" #include "message/stream.h" diff --git a/src/lib/graph/iterator.h b/src/lib/graph/iterator.h new file mode 100644 index 00000000..ed093633 --- /dev/null +++ b/src/lib/graph/iterator.h @@ -0,0 +1,219 @@ +/* + * SPDX-License-Identifier: MIT + * + * Copyright 2017-2018 Philippe Proulx + * Copyright 2015 Jérémie Galarneau + */ + +#ifndef BABELTRACE_GRAPH_MESSAGE_ITERATOR_INTERNAL_H +#define BABELTRACE_GRAPH_MESSAGE_ITERATOR_INTERNAL_H + +#include "common/macros.h" +#include "lib/object.h" +#include +#include +#include +#include "common/assert.h" +#include +#include "common/uuid.h" + +struct bt_port; +struct bt_graph; + +enum bt_message_iterator_state { + /* Iterator is not initialized */ + BT_MESSAGE_ITERATOR_STATE_NON_INITIALIZED, + + /* Iterator is active, not at the end yet, and not finalized */ + BT_MESSAGE_ITERATOR_STATE_ACTIVE, + + /* + * Iterator is ended, not finalized yet: the "next" method + * returns BT_MESSAGE_ITERATOR_STATUS_END. + */ + BT_MESSAGE_ITERATOR_STATE_ENDED, + + /* Iterator is currently being finalized */ + BT_MESSAGE_ITERATOR_STATE_FINALIZING, + + /* Iterator is finalized */ + BT_MESSAGE_ITERATOR_STATE_FINALIZED, + + /* Iterator is seeking */ + BT_MESSAGE_ITERATOR_STATE_SEEKING, + + /* Iterator did seek, but returned `BT_MESSAGE_ITERATOR_STATUS_AGAIN` */ + BT_MESSAGE_ITERATOR_STATE_LAST_SEEKING_RETURNED_AGAIN, + + /* Iterator did seek, but returned error status */ + BT_MESSAGE_ITERATOR_STATE_LAST_SEEKING_RETURNED_ERROR, +}; + +typedef enum bt_message_iterator_class_next_method_status +(*bt_message_iterator_next_method)( + void *, bt_message_array_const, uint64_t, uint64_t *); + +typedef enum bt_message_iterator_class_seek_ns_from_origin_method_status +(*bt_message_iterator_seek_ns_from_origin_method)( + void *, int64_t); + +typedef enum bt_message_iterator_class_seek_beginning_method_status +(*bt_message_iterator_seek_beginning_method)( + void *); + +typedef enum bt_message_iterator_class_can_seek_ns_from_origin_method_status +(*bt_message_iterator_can_seek_ns_from_origin_method)( + void *, int64_t, bt_bool *); + +typedef enum bt_message_iterator_class_can_seek_beginning_method_status +(*bt_message_iterator_can_seek_beginning_method)( + void *, bt_bool *); + +struct bt_self_message_iterator_configuration { + bool frozen; + bool can_seek_forward; +}; + +struct bt_message_iterator { + struct bt_object base; + GPtrArray *msgs; + struct bt_component *upstream_component; /* Weak */ + struct bt_port *upstream_port; /* Weak */ + struct bt_connection *connection; /* Weak */ + struct bt_graph *graph; /* Weak */ + struct bt_self_message_iterator_configuration config; + + /* + * Array of + * `struct bt_message_iterator *` + * (weak). + * + * This is an array of upstream message iterators on which this + * iterator depends. The references are weak: an upstream + * message iterator is responsible for removing its entry within + * this array on finalization/destruction. + */ + GPtrArray *upstream_msg_iters; + + /* + * Downstream message iterator which depends on this message + * iterator (weak). + * + * This can be `NULL` if this message iterator's owner is a sink + * component. + */ + struct bt_message_iterator *downstream_msg_iter; + + struct { + bt_message_iterator_next_method next; + + /* These two are always both set or both unset. */ + bt_message_iterator_seek_ns_from_origin_method seek_ns_from_origin; + bt_message_iterator_can_seek_ns_from_origin_method can_seek_ns_from_origin; + + /* These two are always both set or both unset. */ + bt_message_iterator_seek_beginning_method seek_beginning; + bt_message_iterator_can_seek_beginning_method can_seek_beginning; + } methods; + + enum bt_message_iterator_state state; + + /* + * Timestamp of the last received message (or INT64_MIN in the + * beginning, or after a seek to beginning). + */ + int64_t last_ns_from_origin; + + struct { + enum { + /* We haven't recorded clock properties yet. */ + CLOCK_EXPECTATION_UNSET, + + /* Expect to have no clock. */ + CLOCK_EXPECTATION_NONE, + + /* Clock with origin_is_unix_epoch true.*/ + CLOCK_EXPECTATION_ORIGIN_UNIX, + + /* Clock with origin_is_unix_epoch false, with a UUID.*/ + CLOCK_EXPECTATION_ORIGIN_OTHER_UUID, + + /* Clock with origin_is_unix_epoch false, without a UUID.*/ + CLOCK_EXPECTATION_ORIGIN_OTHER_NO_UUID, + } type; + + /* + * Expected UUID of the clock, if `type`is CLOCK_EXPECTATION_ORIGIN_OTHER_UUID. + * + * If the clock's origin is the unix epoch, the UUID is + * irrelevant (as the clock will be correlatable with other + * clocks having the same origin). + */ + bt_uuid_t uuid; + } clock_expectation; + + BT_IF_DEV_MODE(GHashTable *per_stream_state); + + /* + * Data necessary for auto seek (the seek-to-beginning then fast-forward + * seek strategy). + */ + struct { + /* + * Queue of `const bt_message *` (owned by this queue). + * + * When fast-forwarding, we get the messages from upstream in + * batches. Once we have found the first message with timestamp + * greater or equal to the seek time, we put it and all of the + * following message of the batch in this queue. They will be + * sent on the next "next" call on this iterator. + * + * The messages are in chronological order (i.e. the first to + * send is the first of the queue). + */ + GQueue *msgs; + + /* + * After auto-seeking, we replace the iterator's `next` callback + * with our own, which returns the contents of the `msgs` queue. + * This field is where we save the original callback, so we can + * restore it. + */ + void *original_next_callback; + } auto_seek; + + void *user_data; +}; + +void bt_message_iterator_try_finalize( + struct bt_message_iterator *iterator); + +void bt_message_iterator_set_connection( + struct bt_message_iterator *iterator, + struct bt_connection *connection); + +static inline +const char *bt_message_iterator_state_string( + enum bt_message_iterator_state state) +{ + switch (state) { + case BT_MESSAGE_ITERATOR_STATE_ACTIVE: + return "ACTIVE"; + case BT_MESSAGE_ITERATOR_STATE_ENDED: + return "ENDED"; + case BT_MESSAGE_ITERATOR_STATE_FINALIZING: + return "FINALIZING"; + case BT_MESSAGE_ITERATOR_STATE_FINALIZED: + return "FINALIZED"; + case BT_MESSAGE_ITERATOR_STATE_SEEKING: + return "SEEKING"; + case BT_MESSAGE_ITERATOR_STATE_LAST_SEEKING_RETURNED_AGAIN: + return "LAST_SEEKING_RETURNED_AGAIN"; + case BT_MESSAGE_ITERATOR_STATE_LAST_SEEKING_RETURNED_ERROR: + return "LAST_SEEKING_RETURNED_ERROR"; + default: + return "(unknown)"; + } +}; + +#endif /* BABELTRACE_GRAPH_MESSAGE_ITERATOR_INTERNAL_H */ diff --git a/src/lib/graph/message/iterator.h b/src/lib/graph/message/iterator.h deleted file mode 100644 index ed093633..00000000 --- a/src/lib/graph/message/iterator.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * SPDX-License-Identifier: MIT - * - * Copyright 2017-2018 Philippe Proulx - * Copyright 2015 Jérémie Galarneau - */ - -#ifndef BABELTRACE_GRAPH_MESSAGE_ITERATOR_INTERNAL_H -#define BABELTRACE_GRAPH_MESSAGE_ITERATOR_INTERNAL_H - -#include "common/macros.h" -#include "lib/object.h" -#include -#include -#include -#include "common/assert.h" -#include -#include "common/uuid.h" - -struct bt_port; -struct bt_graph; - -enum bt_message_iterator_state { - /* Iterator is not initialized */ - BT_MESSAGE_ITERATOR_STATE_NON_INITIALIZED, - - /* Iterator is active, not at the end yet, and not finalized */ - BT_MESSAGE_ITERATOR_STATE_ACTIVE, - - /* - * Iterator is ended, not finalized yet: the "next" method - * returns BT_MESSAGE_ITERATOR_STATUS_END. - */ - BT_MESSAGE_ITERATOR_STATE_ENDED, - - /* Iterator is currently being finalized */ - BT_MESSAGE_ITERATOR_STATE_FINALIZING, - - /* Iterator is finalized */ - BT_MESSAGE_ITERATOR_STATE_FINALIZED, - - /* Iterator is seeking */ - BT_MESSAGE_ITERATOR_STATE_SEEKING, - - /* Iterator did seek, but returned `BT_MESSAGE_ITERATOR_STATUS_AGAIN` */ - BT_MESSAGE_ITERATOR_STATE_LAST_SEEKING_RETURNED_AGAIN, - - /* Iterator did seek, but returned error status */ - BT_MESSAGE_ITERATOR_STATE_LAST_SEEKING_RETURNED_ERROR, -}; - -typedef enum bt_message_iterator_class_next_method_status -(*bt_message_iterator_next_method)( - void *, bt_message_array_const, uint64_t, uint64_t *); - -typedef enum bt_message_iterator_class_seek_ns_from_origin_method_status -(*bt_message_iterator_seek_ns_from_origin_method)( - void *, int64_t); - -typedef enum bt_message_iterator_class_seek_beginning_method_status -(*bt_message_iterator_seek_beginning_method)( - void *); - -typedef enum bt_message_iterator_class_can_seek_ns_from_origin_method_status -(*bt_message_iterator_can_seek_ns_from_origin_method)( - void *, int64_t, bt_bool *); - -typedef enum bt_message_iterator_class_can_seek_beginning_method_status -(*bt_message_iterator_can_seek_beginning_method)( - void *, bt_bool *); - -struct bt_self_message_iterator_configuration { - bool frozen; - bool can_seek_forward; -}; - -struct bt_message_iterator { - struct bt_object base; - GPtrArray *msgs; - struct bt_component *upstream_component; /* Weak */ - struct bt_port *upstream_port; /* Weak */ - struct bt_connection *connection; /* Weak */ - struct bt_graph *graph; /* Weak */ - struct bt_self_message_iterator_configuration config; - - /* - * Array of - * `struct bt_message_iterator *` - * (weak). - * - * This is an array of upstream message iterators on which this - * iterator depends. The references are weak: an upstream - * message iterator is responsible for removing its entry within - * this array on finalization/destruction. - */ - GPtrArray *upstream_msg_iters; - - /* - * Downstream message iterator which depends on this message - * iterator (weak). - * - * This can be `NULL` if this message iterator's owner is a sink - * component. - */ - struct bt_message_iterator *downstream_msg_iter; - - struct { - bt_message_iterator_next_method next; - - /* These two are always both set or both unset. */ - bt_message_iterator_seek_ns_from_origin_method seek_ns_from_origin; - bt_message_iterator_can_seek_ns_from_origin_method can_seek_ns_from_origin; - - /* These two are always both set or both unset. */ - bt_message_iterator_seek_beginning_method seek_beginning; - bt_message_iterator_can_seek_beginning_method can_seek_beginning; - } methods; - - enum bt_message_iterator_state state; - - /* - * Timestamp of the last received message (or INT64_MIN in the - * beginning, or after a seek to beginning). - */ - int64_t last_ns_from_origin; - - struct { - enum { - /* We haven't recorded clock properties yet. */ - CLOCK_EXPECTATION_UNSET, - - /* Expect to have no clock. */ - CLOCK_EXPECTATION_NONE, - - /* Clock with origin_is_unix_epoch true.*/ - CLOCK_EXPECTATION_ORIGIN_UNIX, - - /* Clock with origin_is_unix_epoch false, with a UUID.*/ - CLOCK_EXPECTATION_ORIGIN_OTHER_UUID, - - /* Clock with origin_is_unix_epoch false, without a UUID.*/ - CLOCK_EXPECTATION_ORIGIN_OTHER_NO_UUID, - } type; - - /* - * Expected UUID of the clock, if `type`is CLOCK_EXPECTATION_ORIGIN_OTHER_UUID. - * - * If the clock's origin is the unix epoch, the UUID is - * irrelevant (as the clock will be correlatable with other - * clocks having the same origin). - */ - bt_uuid_t uuid; - } clock_expectation; - - BT_IF_DEV_MODE(GHashTable *per_stream_state); - - /* - * Data necessary for auto seek (the seek-to-beginning then fast-forward - * seek strategy). - */ - struct { - /* - * Queue of `const bt_message *` (owned by this queue). - * - * When fast-forwarding, we get the messages from upstream in - * batches. Once we have found the first message with timestamp - * greater or equal to the seek time, we put it and all of the - * following message of the batch in this queue. They will be - * sent on the next "next" call on this iterator. - * - * The messages are in chronological order (i.e. the first to - * send is the first of the queue). - */ - GQueue *msgs; - - /* - * After auto-seeking, we replace the iterator's `next` callback - * with our own, which returns the contents of the `msgs` queue. - * This field is where we save the original callback, so we can - * restore it. - */ - void *original_next_callback; - } auto_seek; - - void *user_data; -}; - -void bt_message_iterator_try_finalize( - struct bt_message_iterator *iterator); - -void bt_message_iterator_set_connection( - struct bt_message_iterator *iterator, - struct bt_connection *connection); - -static inline -const char *bt_message_iterator_state_string( - enum bt_message_iterator_state state) -{ - switch (state) { - case BT_MESSAGE_ITERATOR_STATE_ACTIVE: - return "ACTIVE"; - case BT_MESSAGE_ITERATOR_STATE_ENDED: - return "ENDED"; - case BT_MESSAGE_ITERATOR_STATE_FINALIZING: - return "FINALIZING"; - case BT_MESSAGE_ITERATOR_STATE_FINALIZED: - return "FINALIZED"; - case BT_MESSAGE_ITERATOR_STATE_SEEKING: - return "SEEKING"; - case BT_MESSAGE_ITERATOR_STATE_LAST_SEEKING_RETURNED_AGAIN: - return "LAST_SEEKING_RETURNED_AGAIN"; - case BT_MESSAGE_ITERATOR_STATE_LAST_SEEKING_RETURNED_ERROR: - return "LAST_SEEKING_RETURNED_ERROR"; - default: - return "(unknown)"; - } -}; - -#endif /* BABELTRACE_GRAPH_MESSAGE_ITERATOR_INTERNAL_H */ diff --git a/src/lib/lib-logging.c b/src/lib/lib-logging.c index bf70f468..82558067 100644 --- a/src/lib/lib-logging.c +++ b/src/lib/lib-logging.c @@ -30,9 +30,9 @@ #include "graph/component.h" #include "graph/connection.h" #include "graph/graph.h" +#include "graph/iterator.h" #include "graph/message/discarded-items.h" #include "graph/message/event.h" -#include "graph/message/iterator.h" #include "graph/message/message.h" #include "graph/message/packet.h" #include "graph/message/stream.h"