X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fgraph%2Fgraph-internal.h;h=09927fcf0aeb740538636111772082dd2cbb7e8b;hb=d6e69534ef08a2dd8bff9eb5af1eab63736b3d31;hp=c8be19aace1d6d91876a6641c7fd4fb66432e6b7;hpb=f6ccaed94e575af57fe6bf38154771bee4871a2a;p=babeltrace.git diff --git a/include/babeltrace/graph/graph-internal.h b/include/babeltrace/graph/graph-internal.h index c8be19aa..09927fcf 100644 --- a/include/babeltrace/graph/graph-internal.h +++ b/include/babeltrace/graph/graph-internal.h @@ -1,13 +1,10 @@ -#ifndef BABELTRACE_COMPONENT_COMPONENT_GRAPH_INTERNAL_H -#define BABELTRACE_COMPONENT_COMPONENT_GRAPH_INTERNAL_H +#ifndef BABELTRACE_GRAPH_GRAPH_INTERNAL_H +#define BABELTRACE_GRAPH_GRAPH_INTERNAL_H /* - * BabelTrace - Component Graph Internal - * + * Copyright 2017-2018 Philippe Proulx * Copyright 2017 Jérémie Galarneau * - * Author: Jérémie Galarneau - * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights @@ -28,9 +25,11 @@ */ #include -#include +#include +#include #include #include +#include #include #include #include @@ -58,43 +57,81 @@ struct bt_graph { /* Queue of pointers (weak references) to sink bt_components. */ GQueue *sinks_to_consume; - bt_bool canceled; - bt_bool in_remove_listener; - bt_bool has_sink; + bool canceled; + bool in_remove_listener; + bool has_sink; /* - * If this is BT_FALSE, then the public API's consuming + * If this is false, then the public API's consuming * functions (bt_graph_consume() and bt_graph_run()) return * BT_GRAPH_STATUS_CANNOT_CONSUME. The internal "no check" * functions always work. * - * In bt_output_port_notification_iterator_create(), on success, + * In bt_port_output_message_iterator_create(), on success, * this flag is cleared so that the iterator remains the only * consumer for the graph's lifetime. */ - bt_bool can_consume; + bool can_consume; struct { - GArray *port_added; - GArray *port_removed; - GArray *ports_connected; - GArray *ports_disconnected; + GArray *source_output_port_added; + GArray *filter_output_port_added; + GArray *filter_input_port_added; + GArray *sink_input_port_added; + GArray *source_output_port_removed; + GArray *filter_output_port_removed; + GArray *filter_input_port_removed; + GArray *sink_input_port_removed; + GArray *source_filter_ports_connected; + GArray *source_sink_ports_connected; + GArray *filter_sink_ports_connected; + GArray *source_filter_ports_disconnected; + GArray *source_sink_ports_disconnected; + GArray *filter_sink_ports_disconnected; } listeners; + + /* Pool of `struct bt_message_event *` */ + struct bt_object_pool event_msg_pool; + + /* Pool of `struct bt_message_packet_beginning *` */ + struct bt_object_pool packet_begin_msg_pool; + + /* Pool of `struct bt_message_packet_end *` */ + struct bt_object_pool packet_end_msg_pool; + + /* + * Array of `struct bt_message *` (weak). + * + * This is an array of all the messages ever created from + * this graph. Some of them can be in one of the pools above, + * some of them can be at large. Because each message has a + * weak pointer to the graph containing its pool, we need to + * notify each message that the graph is gone on graph + * destruction. + * + * TODO: When we support a maximum size for object pools, + * add a way for a message to remove itself from this + * array (on destruction). + */ + GPtrArray *messages; }; static inline -void bt_graph_set_can_consume(struct bt_graph *graph, bt_bool can_consume) +void _bt_graph_set_can_consume(struct bt_graph *graph, bool can_consume) { BT_ASSERT(graph); graph->can_consume = can_consume; } -BT_HIDDEN -enum bt_graph_status bt_graph_consume_no_check(struct bt_graph *graph); +#ifdef BT_DEV_MODE +# define bt_graph_set_can_consume _bt_graph_set_can_consume +#else +# define bt_graph_set_can_consume(_graph, _can_consume) +#endif BT_HIDDEN enum bt_graph_status bt_graph_consume_sink_no_check(struct bt_graph *graph, - struct bt_component *sink); + struct bt_component_sink *sink); BT_HIDDEN void bt_graph_notify_port_added(struct bt_graph *graph, struct bt_port *port); @@ -130,6 +167,10 @@ BT_HIDDEN int bt_graph_remove_unconnected_component(struct bt_graph *graph, struct bt_component *component); +BT_HIDDEN +void bt_graph_add_message(struct bt_graph *graph, + struct bt_message *msg); + static inline const char *bt_graph_status_string(enum bt_graph_status status) { @@ -142,8 +183,6 @@ const char *bt_graph_status_string(enum bt_graph_status status) return "BT_GRAPH_STATUS_END"; case BT_GRAPH_STATUS_OK: return "BT_GRAPH_STATUS_OK"; - case BT_GRAPH_STATUS_INVALID: - return "BT_GRAPH_STATUS_INVALID"; case BT_GRAPH_STATUS_NO_SINK: return "BT_GRAPH_STATUS_NO_SINK"; case BT_GRAPH_STATUS_ERROR: @@ -152,42 +191,9 @@ const char *bt_graph_status_string(enum bt_graph_status status) return "BT_GRAPH_STATUS_COMPONENT_REFUSES_PORT_CONNECTION"; case BT_GRAPH_STATUS_NOMEM: return "BT_GRAPH_STATUS_NOMEM"; - case BT_GRAPH_STATUS_CANNOT_CONSUME: - return "BT_GRAPH_STATUS_CANNOT_CONSUME"; default: return "(unknown)"; } } -static inline -enum bt_graph_status bt_graph_status_from_component_status( - enum bt_component_status comp_status) -{ - switch (comp_status) { - case BT_COMPONENT_STATUS_OK: - return BT_GRAPH_STATUS_OK; - case BT_COMPONENT_STATUS_END: - return BT_GRAPH_STATUS_END; - case BT_COMPONENT_STATUS_AGAIN: - return BT_GRAPH_STATUS_AGAIN; - case BT_COMPONENT_STATUS_REFUSE_PORT_CONNECTION: - return BT_GRAPH_STATUS_COMPONENT_REFUSES_PORT_CONNECTION; - case BT_COMPONENT_STATUS_ERROR: - return BT_GRAPH_STATUS_ERROR; - case BT_COMPONENT_STATUS_UNSUPPORTED: - return BT_GRAPH_STATUS_ERROR; - case BT_COMPONENT_STATUS_INVALID: - return BT_GRAPH_STATUS_INVALID; - case BT_COMPONENT_STATUS_NOMEM: - return BT_GRAPH_STATUS_NOMEM; - case BT_COMPONENT_STATUS_NOT_FOUND: - return BT_GRAPH_STATUS_ERROR; - default: -#ifdef BT_LOGF - BT_LOGF("Unknown component status: status=%d", comp_status); -#endif - abort(); - } -} - -#endif /* BABELTRACE_COMPONENT_COMPONENT_GRAPH_INTERNAL_H */ +#endif /* BABELTRACE_GRAPH_GRAPH_INTERNAL_H */