Use graph facilities in trimmer component class
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 22 Feb 2017 15:05:16 +0000 (10:05 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Sun, 28 May 2017 16:57:38 +0000 (12:57 -0400)
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
plugins/utils/trimmer/iterator.c
plugins/utils/trimmer/iterator.h

index 04557cba3ad4b491ba0e429791bc48463b43622f..9b54a166c8bf1decc82931e872dc3f11d1d32f87 100644 (file)
@@ -34,6 +34,8 @@
 #include <babeltrace/component/notification/stream.h>
 #include <babeltrace/component/notification/packet.h>
 #include <babeltrace/component/component-filter.h>
+#include <babeltrace/component/component-port.h>
+#include <babeltrace/component/component-connection.h>
 #include <babeltrace/ctf-ir/event.h>
 #include <babeltrace/ctf-ir/stream.h>
 #include <babeltrace/ctf-ir/stream-class.h>
@@ -52,10 +54,8 @@ void trimmer_iterator_destroy(struct bt_notification_iterator *it)
        it_data = bt_notification_iterator_get_private_data(it);
        assert(it_data);
 
-       if (it_data->input_iterator_group) {
-               g_ptr_array_free(it_data->input_iterator_group, TRUE);
-       }
        bt_put(it_data->current_notification);
+       bt_put(it_data->input_iterator);
        g_free(it_data);
 }
 
@@ -68,6 +68,8 @@ enum bt_notification_iterator_status trimmer_iterator_init(
        enum bt_notification_iterator_status ret =
                BT_NOTIFICATION_ITERATOR_STATUS_OK;
        enum bt_notification_iterator_status it_ret;
+       struct bt_port *input_port = NULL;
+       struct bt_connection *connection = NULL;
        struct trimmer_iterator *it_data = g_new0(struct trimmer_iterator, 1);
 
        if (!it_data) {
@@ -75,12 +77,26 @@ enum bt_notification_iterator_status trimmer_iterator_init(
                goto end;
        }
 
-       /* FIXME init trimmer_iterator */
+       /* Create a new iterator on the upstream component. */
+       input_port = bt_component_filter_get_default_input_port(component);
+       assert(input_port);
+       connection = bt_port_get_connection(input_port, 0);
+       assert(connection);
+
+       it_data->input_iterator = bt_connection_create_notification_iterator(
+                       connection);
+       if (!it_data->input_iterator) {
+               ret = BT_NOTIFICATION_ITERATOR_STATUS_NOMEM;
+               goto end;
+       }
+
        it_ret = bt_notification_iterator_set_private_data(iterator, it_data);
        if (it_ret) {
                goto end;
        }
 end:
+       bt_put(connection);
+       bt_put(input_port);
        return ret;
 }
 
@@ -403,7 +419,6 @@ enum bt_notification_iterator_status trimmer_iterator_next(
        struct bt_notification_iterator *source_it = NULL;
        enum bt_notification_iterator_status ret =
                        BT_NOTIFICATION_ITERATOR_STATUS_OK;
-       enum bt_component_status component_ret;
        bool notification_in_range = false;
 
        trim_it = bt_notification_iterator_get_private_data(iterator);
@@ -414,10 +429,8 @@ enum bt_notification_iterator_status trimmer_iterator_next(
        trimmer = bt_component_get_private_data(component);
        assert(trimmer);
 
-       /* FIXME, should handle input iterator groups. */
-       component_ret = bt_component_filter_get_input_iterator(component, 0,
-                       &source_it);
-       assert((component_ret == BT_COMPONENT_STATUS_OK) && source_it);
+       source_it = trim_it->input_iterator;
+       assert(source_it);
 
        while (!notification_in_range) {
                struct bt_notification *notification;
@@ -448,7 +461,6 @@ enum bt_notification_iterator_status trimmer_iterator_next(
                }
        }
 end:
-       bt_put(source_it);
        bt_put(component);
        return ret;
 }
index 1a632cda039d2ad527d988e40a6db5a9970ec21f..ef8c4eb8b96ebdd14772bf9ee953a977bb38c116 100644 (file)
@@ -32,8 +32,8 @@
 #include <babeltrace/component/notification/iterator.h>
 
 struct trimmer_iterator {
-       /* Input iterators associated with this output iterator. */
-       GPtrArray *input_iterator_group;
+       /* Input iterator associated with this output iterator. */
+       struct bt_notification_iterator *input_iterator;
        struct bt_notification *current_notification;
 };
 
This page took 0.026581 seconds and 4 git commands to generate.