#define BT_LOG_TAG "PLUGIN-UTILS-MUXER-FLT"
#include "logging.h"
-#include <babeltrace/babeltrace-internal.h>
-#include <babeltrace/compat/uuid-internal.h>
-#include <babeltrace/babeltrace.h>
-#include <babeltrace/value-internal.h>
-#include <babeltrace/graph/component-internal.h>
-#include <babeltrace/graph/message-iterator-internal.h>
-#include <babeltrace/graph/connection-internal.h>
+#include <babeltrace2/babeltrace-internal.h>
+#include <babeltrace2/compat/uuid-internal.h>
+#include <babeltrace2/babeltrace.h>
+#include <babeltrace2/value-internal.h>
+#include <babeltrace2/graph/component-internal.h>
+#include <babeltrace2/graph/message-iterator-internal.h>
+#include <babeltrace2/graph/connection-internal.h>
#include <plugins-common.h>
#include <glib.h>
#include <stdbool.h>
#include <inttypes.h>
-#include <babeltrace/assert-internal.h>
-#include <babeltrace/common-internal.h>
+#include <babeltrace2/assert-internal.h>
+#include <babeltrace2/common-internal.h>
#include <stdlib.h>
#include <string.h>
}
static
-struct muxer_upstream_msg_iter *muxer_msg_iter_add_upstream_msg_iter(
- struct muxer_msg_iter *muxer_msg_iter,
+int muxer_msg_iter_add_upstream_msg_iter(struct muxer_msg_iter *muxer_msg_iter,
bt_self_component_port_input_message_iterator *self_msg_iter)
{
+ int ret = 0;
struct muxer_upstream_msg_iter *muxer_upstream_msg_iter =
g_new0(struct muxer_upstream_msg_iter, 1);
error:
g_free(muxer_upstream_msg_iter);
- muxer_upstream_msg_iter = NULL;
+ ret = -1;
end:
- return muxer_upstream_msg_iter;
+ return ret;
}
static
{
const bt_clock_snapshot *clock_snapshot = NULL;
int ret = 0;
- bt_clock_snapshot_state cs_state = BT_CLOCK_SNAPSHOT_STATE_KNOWN;
bt_message_stream_activity_clock_snapshot_state sa_cs_state;
+ const bt_stream_class *stream_class = NULL;
+ bt_message_type msg_type;
BT_ASSERT(msg);
BT_ASSERT(ts_ns);
goto end;
}
- switch (bt_message_get_type(msg)) {
+ msg_type = bt_message_get_type(msg);
+
+ if (unlikely(msg_type == BT_MESSAGE_TYPE_PACKET_BEGINNING)) {
+ stream_class = bt_stream_borrow_class_const(
+ bt_packet_borrow_stream_const(
+ bt_message_packet_beginning_borrow_packet_const(
+ msg)));
+ } else if (unlikely(msg_type == BT_MESSAGE_TYPE_PACKET_END)) {
+ stream_class = bt_stream_borrow_class_const(
+ bt_packet_borrow_stream_const(
+ bt_message_packet_end_borrow_packet_const(
+ msg)));
+ } else if (unlikely(msg_type == BT_MESSAGE_TYPE_DISCARDED_EVENTS)) {
+ stream_class = bt_stream_borrow_class_const(
+ bt_message_discarded_events_borrow_stream_const(msg));
+ } else if (unlikely(msg_type == BT_MESSAGE_TYPE_DISCARDED_PACKETS)) {
+ stream_class = bt_stream_borrow_class_const(
+ bt_message_discarded_packets_borrow_stream_const(msg));
+ }
+
+ switch (msg_type) {
case BT_MESSAGE_TYPE_EVENT:
BT_ASSERT(bt_message_event_borrow_stream_class_default_clock_class_const(
msg));
- cs_state = bt_message_event_borrow_default_clock_snapshot_const(
- msg, &clock_snapshot);
+ clock_snapshot = bt_message_event_borrow_default_clock_snapshot_const(
+ msg);
break;
case BT_MESSAGE_TYPE_PACKET_BEGINNING:
- BT_ASSERT(bt_message_packet_beginning_borrow_stream_class_default_clock_class_const(
- msg));
- cs_state = bt_message_packet_beginning_borrow_default_clock_snapshot_const(
- msg, &clock_snapshot);
+ if (bt_stream_class_packets_have_beginning_default_clock_snapshot(
+ stream_class)) {
+ clock_snapshot = bt_message_packet_beginning_borrow_default_clock_snapshot_const(
+ msg);
+ } else {
+ goto no_clock_snapshot;
+ }
+
break;
case BT_MESSAGE_TYPE_PACKET_END:
- BT_ASSERT(bt_message_packet_end_borrow_stream_class_default_clock_class_const(
- msg));
- cs_state = bt_message_packet_end_borrow_default_clock_snapshot_const(
- msg, &clock_snapshot);
+ if (bt_stream_class_packets_have_end_default_clock_snapshot(
+ stream_class)) {
+ clock_snapshot = bt_message_packet_end_borrow_default_clock_snapshot_const(
+ msg);
+ } else {
+ goto no_clock_snapshot;
+ }
+
break;
case BT_MESSAGE_TYPE_DISCARDED_EVENTS:
- BT_ASSERT(bt_message_discarded_events_borrow_stream_class_default_clock_class_const(
- msg));
- cs_state = bt_message_discarded_events_borrow_default_beginning_clock_snapshot_const(
- msg, &clock_snapshot);
+ if (bt_stream_class_discarded_events_have_default_clock_snapshots(
+ stream_class)) {
+ clock_snapshot = bt_message_discarded_events_borrow_beginning_default_clock_snapshot_const(
+ msg);
+ } else {
+ goto no_clock_snapshot;
+ }
+
break;
case BT_MESSAGE_TYPE_DISCARDED_PACKETS:
- BT_ASSERT(bt_message_discarded_packets_borrow_stream_class_default_clock_class_const(
- msg));
- cs_state = bt_message_discarded_packets_borrow_default_beginning_clock_snapshot_const(
- msg, &clock_snapshot);
+ if (bt_stream_class_discarded_packets_have_default_clock_snapshots(
+ stream_class)) {
+ clock_snapshot = bt_message_discarded_packets_borrow_beginning_default_clock_snapshot_const(
+ msg);
+ } else {
+ goto no_clock_snapshot;
+ }
+
break;
case BT_MESSAGE_TYPE_STREAM_ACTIVITY_BEGINNING:
BT_ASSERT(bt_message_stream_activity_beginning_borrow_stream_class_default_clock_class_const(
break;
case BT_MESSAGE_TYPE_MESSAGE_ITERATOR_INACTIVITY:
- cs_state =
- bt_message_message_iterator_inactivity_borrow_default_clock_snapshot_const(
- msg, &clock_snapshot);
+ clock_snapshot = bt_message_message_iterator_inactivity_borrow_default_clock_snapshot_const(
+ msg);
break;
default:
/* All the other messages have a higher priority */
goto end;
}
- BT_ASSERT(cs_state == BT_CLOCK_SNAPSHOT_STATE_KNOWN);
ret = bt_clock_snapshot_get_ns_from_origin(clock_snapshot, ts_ns);
if (ret) {
BT_LOGE("Cannot get nanoseconds from Epoch of clock snapshot: "
goto end;
}
- if (!bt_stream_class_default_clock_is_always_known(stream_class)) {
- BT_LOGE("Stream's default clock is not always known: "
- "stream-class-addr=%p, stream-class-name=\"%s\", "
- "stream-class-id=%" PRIu64,
- stream_class, bt_stream_class_get_name(stream_class),
- bt_stream_class_get_id(stream_class));
- ret = -1;
- goto end;
- }
-
ret = validate_clock_class(muxer_msg_iter, muxer_comp, clock_class);
end:
} else if (unlikely(bt_message_get_type(msg) ==
BT_MESSAGE_TYPE_MESSAGE_ITERATOR_INACTIVITY)) {
const bt_clock_snapshot *cs;
- bt_clock_snapshot_state cs_state;
-
- cs_state = bt_message_message_iterator_inactivity_borrow_default_clock_snapshot_const(
- msg, &cs);
-
- if (cs_state != BT_CLOCK_SNAPSHOT_STATE_KNOWN) {
- BT_LOGE("Message iterator inactivity message's "
- "default clock snapshot is unknown: "
- "msg-addr=%p",
- msg);
- status = BT_SELF_MESSAGE_ITERATOR_STATUS_ERROR;
- goto end;
- }
+ cs = bt_message_message_iterator_inactivity_borrow_default_clock_snapshot_const(
+ msg);
ret = validate_clock_class(muxer_msg_iter, muxer_comp,
bt_clock_snapshot_borrow_clock_class_const(cs));
if (ret) {
for (i = 0; i < count; i++) {
bt_self_component_port_input_message_iterator *upstream_msg_iter;
- struct muxer_upstream_msg_iter *muxer_upstream_msg_iter;
bt_self_component_port_input *self_port =
bt_self_component_filter_borrow_input_port_by_index(
muxer_comp->self_comp, i);
goto end;
}
- muxer_upstream_msg_iter =
- muxer_msg_iter_add_upstream_msg_iter(
- muxer_msg_iter, upstream_msg_iter);
+ ret = muxer_msg_iter_add_upstream_msg_iter(muxer_msg_iter,
+ upstream_msg_iter);
bt_self_component_port_input_message_iterator_put_ref(
upstream_msg_iter);
- if (!muxer_upstream_msg_iter) {
+ if (ret) {
/* muxer_msg_iter_add_upstream_msg_iter() logs errors */
- ret = -1;
goto end;
}
}