Move `src/plugins/comp-logging.h` -> `src/logging/comp-logging.h`
[babeltrace.git] / src / plugins / utils / muxer / muxer.c
index 37d006087866d92a535c12f953bc343a246eb519..dd18d98a7023d9ba306067180c7ffefaa07193be 100644 (file)
 #define BT_COMP_LOG_SELF_COMP (muxer_comp->self_comp)
 #define BT_LOG_OUTPUT_LEVEL (muxer_comp->log_level)
 #define BT_LOG_TAG "PLUGIN/FLT.UTILS.MUXER"
-#include "plugins/comp-logging.h"
+#include "logging/comp-logging.h"
 
 #include "common/macros.h"
-#include "compat/uuid.h"
+#include "common/uuid.h"
 #include <babeltrace2/babeltrace.h>
 #include <glib.h>
 #include <stdbool.h>
@@ -73,6 +73,9 @@ enum muxer_msg_iter_clock_class_expectation {
 struct muxer_msg_iter {
        struct muxer_comp *muxer_comp;
 
+       /* Weak */
+       bt_self_message_iterator *self_msg_iter;
+
        /*
         * Array of struct muxer_upstream_msg_iter * (owned by this).
         *
@@ -103,7 +106,7 @@ struct muxer_msg_iter {
         * clock_class_expectation is
         * MUXER_MSG_ITER_CLOCK_CLASS_EXPECTATION_NOT_ABS_SPEC_UUID.
         */
-       unsigned char expected_clock_class_uuid[BABELTRACE_UUID_LEN];
+       bt_uuid_t expected_clock_class_uuid;
 };
 
 static
@@ -427,6 +430,7 @@ void muxer_finalize(bt_self_component_filter *self_comp)
 static
 bt_self_component_port_input_message_iterator *
 create_msg_iter_on_input_port(struct muxer_comp *muxer_comp,
+               struct muxer_msg_iter *muxer_msg_iter,
                bt_self_component_port_input *self_port)
 {
        const bt_port *port = bt_self_component_port_as_port(
@@ -441,8 +445,8 @@ create_msg_iter_on_input_port(struct muxer_comp *muxer_comp,
        // TODO: Advance the iterator to >= the time of the latest
        //       returned message by the muxer message
        //       iterator which creates it.
-       msg_iter = bt_self_component_port_input_message_iterator_create(
-               self_port);
+       msg_iter = bt_self_component_port_input_message_iterator_create_from_message_iterator(
+               muxer_msg_iter->self_msg_iter, self_port);
        if (!msg_iter) {
                BT_COMP_LOGE("Cannot create upstream message iterator on input port: "
                        "port-addr=%p, port-name=\"%s\"",
@@ -601,6 +605,28 @@ int get_msg_ts_ns(struct muxer_comp *muxer_comp,
                }
 
                break;
+       case BT_MESSAGE_TYPE_STREAM_BEGINNING:
+       {
+               enum bt_message_stream_clock_snapshot_state snapshot_state =
+                       bt_message_stream_beginning_borrow_default_clock_snapshot_const(
+                               msg, &clock_snapshot);
+               if (snapshot_state == BT_MESSAGE_STREAM_CLOCK_SNAPSHOT_STATE_UNKNOWN) {
+                       goto no_clock_snapshot;
+               }
+
+               break;
+       }
+       case BT_MESSAGE_TYPE_STREAM_END:
+       {
+               enum bt_message_stream_clock_snapshot_state snapshot_state =
+                       bt_message_stream_end_borrow_default_clock_snapshot_const(
+                               msg, &clock_snapshot);
+               if (snapshot_state == BT_MESSAGE_STREAM_CLOCK_SNAPSHOT_STATE_UNKNOWN) {
+                       goto no_clock_snapshot;
+               }
+
+               break;
+       }
        case BT_MESSAGE_TYPE_DISCARDED_EVENTS:
                if (bt_stream_class_discarded_events_have_default_clock_snapshots(
                                stream_class)) {
@@ -668,7 +694,7 @@ int validate_clock_class(struct muxer_msg_iter *muxer_msg_iter,
                const bt_clock_class *clock_class)
 {
        int ret = 0;
-       const unsigned char *cc_uuid;
+       const uint8_t *cc_uuid;
        const char *cc_name;
 
        BT_ASSERT(clock_class);
@@ -696,8 +722,7 @@ int validate_clock_class(struct muxer_msg_iter *muxer_msg_iter,
                                 */
                                muxer_msg_iter->clock_class_expectation =
                                        MUXER_MSG_ITER_CLOCK_CLASS_EXPECTATION_NOT_ABS_SPEC_UUID;
-                               memcpy(muxer_msg_iter->expected_clock_class_uuid,
-                                       cc_uuid, BABELTRACE_UUID_LEN);
+                               bt_uuid_copy(muxer_msg_iter->expected_clock_class_uuid, cc_uuid);
                        } else {
                                /*
                                 * Expect non-absolute clock classes
@@ -733,24 +758,8 @@ int validate_clock_class(struct muxer_msg_iter *muxer_msg_iter,
                                BT_COMP_LOGE("Expecting a non-absolute clock class with no UUID, "
                                        "but got one with a UUID: "
                                        "clock-class-addr=%p, clock-class-name=\"%s\", "
-                                       "uuid=\"%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x\"",
-                                       clock_class, cc_name,
-                                       (unsigned int) cc_uuid[0],
-                                       (unsigned int) cc_uuid[1],
-                                       (unsigned int) cc_uuid[2],
-                                       (unsigned int) cc_uuid[3],
-                                       (unsigned int) cc_uuid[4],
-                                       (unsigned int) cc_uuid[5],
-                                       (unsigned int) cc_uuid[6],
-                                       (unsigned int) cc_uuid[7],
-                                       (unsigned int) cc_uuid[8],
-                                       (unsigned int) cc_uuid[9],
-                                       (unsigned int) cc_uuid[10],
-                                       (unsigned int) cc_uuid[11],
-                                       (unsigned int) cc_uuid[12],
-                                       (unsigned int) cc_uuid[13],
-                                       (unsigned int) cc_uuid[14],
-                                       (unsigned int) cc_uuid[15]);
+                                       "uuid=\"" BT_UUID_FMT "\"",
+                                       clock_class, cc_name, BT_UUID_FMT_VALUES(cc_uuid));
                                goto error;
                        }
                        break;
@@ -771,46 +780,15 @@ int validate_clock_class(struct muxer_msg_iter *muxer_msg_iter,
                                goto error;
                        }
 
-                       if (memcmp(muxer_msg_iter->expected_clock_class_uuid,
-                                       cc_uuid, BABELTRACE_UUID_LEN) != 0) {
+                       if (bt_uuid_compare(muxer_msg_iter->expected_clock_class_uuid, cc_uuid) != 0) {
                                BT_COMP_LOGE("Expecting a non-absolute clock class with a specific UUID, "
                                        "but got one with different UUID: "
                                        "clock-class-addr=%p, clock-class-name=\"%s\", "
-                                       "expected-uuid=\"%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x\", "
-                                       "uuid=\"%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x\"",
+                                       "expected-uuid=\"" BT_UUID_FMT "\", "
+                                       "uuid=\"" BT_UUID_FMT "\"",
                                        clock_class, cc_name,
-                                       (unsigned int) muxer_msg_iter->expected_clock_class_uuid[0],
-                                       (unsigned int) muxer_msg_iter->expected_clock_class_uuid[1],
-                                       (unsigned int) muxer_msg_iter->expected_clock_class_uuid[2],
-                                       (unsigned int) muxer_msg_iter->expected_clock_class_uuid[3],
-                                       (unsigned int) muxer_msg_iter->expected_clock_class_uuid[4],
-                                       (unsigned int) muxer_msg_iter->expected_clock_class_uuid[5],
-                                       (unsigned int) muxer_msg_iter->expected_clock_class_uuid[6],
-                                       (unsigned int) muxer_msg_iter->expected_clock_class_uuid[7],
-                                       (unsigned int) muxer_msg_iter->expected_clock_class_uuid[8],
-                                       (unsigned int) muxer_msg_iter->expected_clock_class_uuid[9],
-                                       (unsigned int) muxer_msg_iter->expected_clock_class_uuid[10],
-                                       (unsigned int) muxer_msg_iter->expected_clock_class_uuid[11],
-                                       (unsigned int) muxer_msg_iter->expected_clock_class_uuid[12],
-                                       (unsigned int) muxer_msg_iter->expected_clock_class_uuid[13],
-                                       (unsigned int) muxer_msg_iter->expected_clock_class_uuid[14],
-                                       (unsigned int) muxer_msg_iter->expected_clock_class_uuid[15],
-                                       (unsigned int) cc_uuid[0],
-                                       (unsigned int) cc_uuid[1],
-                                       (unsigned int) cc_uuid[2],
-                                       (unsigned int) cc_uuid[3],
-                                       (unsigned int) cc_uuid[4],
-                                       (unsigned int) cc_uuid[5],
-                                       (unsigned int) cc_uuid[6],
-                                       (unsigned int) cc_uuid[7],
-                                       (unsigned int) cc_uuid[8],
-                                       (unsigned int) cc_uuid[9],
-                                       (unsigned int) cc_uuid[10],
-                                       (unsigned int) cc_uuid[11],
-                                       (unsigned int) cc_uuid[12],
-                                       (unsigned int) cc_uuid[13],
-                                       (unsigned int) cc_uuid[14],
-                                       (unsigned int) cc_uuid[15]);
+                                       BT_UUID_FMT_VALUES(muxer_msg_iter->expected_clock_class_uuid),
+                                       BT_UUID_FMT_VALUES(cc_uuid));
                                goto error;
                        }
                        break;
@@ -1257,7 +1235,7 @@ int muxer_msg_iter_init_upstream_iterators(struct muxer_comp *muxer_comp,
                }
 
                upstream_msg_iter = create_msg_iter_on_input_port(muxer_comp,
-                       self_port);
+                       muxer_msg_iter, self_port);
                if (!upstream_msg_iter) {
                        /* create_msg_iter_on_input_port() logs errors */
                        BT_ASSERT(!upstream_msg_iter);
@@ -1318,6 +1296,7 @@ bt_component_class_message_iterator_init_method_status muxer_msg_iter_init(
        }
 
        muxer_msg_iter->muxer_comp = muxer_comp;
+       muxer_msg_iter->self_msg_iter = self_msg_iter;
        muxer_msg_iter->last_returned_ts_ns = INT64_MIN;
        muxer_msg_iter->active_muxer_upstream_msg_iters =
                g_ptr_array_new_with_free_func(
@@ -1557,8 +1536,14 @@ bt_component_class_message_iterator_seek_beginning_method_status muxer_msg_iter_
                muxer_msg_iter->ended_muxer_upstream_msg_iters->pdata[i] = NULL;
        }
 
-       g_ptr_array_remove_range(muxer_msg_iter->ended_muxer_upstream_msg_iters,
-               0, muxer_msg_iter->ended_muxer_upstream_msg_iters->len);
+       /*
+        * GLib < 2.48.0 asserts when g_ptr_array_remove_range() is
+        * called on an empty array.
+        */
+       if (muxer_msg_iter->ended_muxer_upstream_msg_iters->len > 0) {
+               g_ptr_array_remove_range(muxer_msg_iter->ended_muxer_upstream_msg_iters,
+                       0, muxer_msg_iter->ended_muxer_upstream_msg_iters->len);
+       }
        muxer_msg_iter->last_returned_ts_ns = INT64_MIN;
        muxer_msg_iter->clock_class_expectation =
                MUXER_MSG_ITER_CLOCK_CLASS_EXPECTATION_ANY;
This page took 0.026663 seconds and 4 git commands to generate.