flt.utils.muxer: implement "seek beginning" and "can seek beginning" methods
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Tue, 19 Feb 2019 18:34:25 +0000 (13:34 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 3 May 2019 22:19:38 +0000 (18:19 -0400)
The `flt.utils.muxer` "can seek beginning" method returns the logical
conjunction of all the upstream message iterators's "can seek beginning"
results.

The `flt.utils.muxer` "seek beginning" method performs a "seek
beginning" operation on all its upstream message iterators.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
plugins/utils/muxer/muxer.c
plugins/utils/muxer/muxer.h
plugins/utils/plugin.c

index 6d8815241d650d0fb6d5a92ec597239c8baa0202..4b3669726cd7c28f99bcccb24809e95fb27ca738 100644 (file)
@@ -1495,3 +1495,53 @@ bt_self_component_status muxer_input_port_connected(
 end:
        return status;
 }
+
+BT_HIDDEN
+bt_bool muxer_msg_iter_can_seek_beginning(
+               bt_self_message_iterator *self_msg_iter)
+{
+       struct muxer_msg_iter *muxer_msg_iter =
+               bt_self_message_iterator_get_data(self_msg_iter);
+       uint64_t i;
+       bt_bool ret = BT_TRUE;
+
+       for (i = 0; i < muxer_msg_iter->muxer_upstream_msg_iters->len; i++) {
+               struct muxer_upstream_msg_iter *upstream_msg_iter =
+                       muxer_msg_iter->muxer_upstream_msg_iters->pdata[i];
+
+               if (!bt_self_component_port_input_message_iterator_can_seek_beginning(
+                               upstream_msg_iter->msg_iter)) {
+                       ret = BT_FALSE;
+                       goto end;
+               }
+       }
+
+end:
+       return ret;
+}
+
+BT_HIDDEN
+bt_self_message_iterator_status muxer_msg_iter_seek_beginning(
+               bt_self_message_iterator *self_msg_iter)
+{
+       struct muxer_msg_iter *muxer_msg_iter =
+               bt_self_message_iterator_get_data(self_msg_iter);
+       int status;
+       uint64_t i;
+
+       for (i = 0; i < muxer_msg_iter->muxer_upstream_msg_iters->len; i++) {
+               struct muxer_upstream_msg_iter *upstream_msg_iter =
+                       muxer_msg_iter->muxer_upstream_msg_iters->pdata[i];
+
+               status = bt_self_component_port_input_message_iterator_seek_beginning(
+                       upstream_msg_iter->msg_iter);
+               if (status != BT_MESSAGE_ITERATOR_STATUS_OK) {
+                       goto end;
+               }
+       }
+
+       muxer_msg_iter->last_returned_ts_ns = INT64_MIN;
+
+end:
+       return status;
+}
index 1e706c0a0dc2c65683bd25a8ba1a792492a22d43..ec9d3815b8da7d4cfb372016c0b4441d88fa5c58 100644 (file)
@@ -58,4 +58,12 @@ bt_self_component_status muxer_input_port_connected(
                bt_self_component_port_input *self_port,
                const bt_port_output *other_port);
 
+BT_HIDDEN
+bt_bool muxer_msg_iter_can_seek_beginning(
+               bt_self_message_iterator *message_iterator);
+
+BT_HIDDEN
+bt_self_message_iterator_status muxer_msg_iter_seek_beginning(
+               bt_self_message_iterator *message_iterator);
+
 #endif /* BABELTRACE_PLUGINS_UTILS_MUXER_H */
index 814e3f2527c12fd5a5a2be6c5722f106fb0b16fe..d8fc45d39ba5b4ef8cbdf2f7986c549c5066874e 100644 (file)
@@ -77,3 +77,7 @@ BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD(muxer,
        muxer_msg_iter_init);
 BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_FINALIZE_METHOD(muxer,
        muxer_msg_iter_finalize);
+BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_SEEK_BEGINNING_METHOD(muxer,
+       muxer_msg_iter_seek_beginning);
+BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CAN_SEEK_BEGINNING_METHOD(muxer,
+       muxer_msg_iter_can_seek_beginning);
This page took 0.026212 seconds and 4 git commands to generate.