From: Philippe Proulx Date: Tue, 19 Feb 2019 18:34:25 +0000 (-0500) Subject: flt.utils.muxer: implement "seek beginning" and "can seek beginning" methods X-Git-Tag: v2.0.0-pre5~164 X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=c9d3ff42c006dbbbb746f4192eb5d2fa1c110067 flt.utils.muxer: implement "seek beginning" and "can seek beginning" methods 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 --- diff --git a/plugins/utils/muxer/muxer.c b/plugins/utils/muxer/muxer.c index 6d881524..4b366972 100644 --- a/plugins/utils/muxer/muxer.c +++ b/plugins/utils/muxer/muxer.c @@ -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; +} diff --git a/plugins/utils/muxer/muxer.h b/plugins/utils/muxer/muxer.h index 1e706c0a..ec9d3815 100644 --- a/plugins/utils/muxer/muxer.h +++ b/plugins/utils/muxer/muxer.h @@ -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 */ diff --git a/plugins/utils/plugin.c b/plugins/utils/plugin.c index 814e3f25..d8fc45d3 100644 --- a/plugins/utils/plugin.c +++ b/plugins/utils/plugin.c @@ -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);