X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Flib%2Fgraph%2Fgraph.c;h=70c42c6a3f007c646bbe5fe61de8b27492ab6680;hb=056deb59eb33e87c06c0067907768ab08aff74a2;hp=192ec9e59489e01e5c61bdacbb05609224e4aa39;hpb=9b4f9b425f2efce9a6ccc25f7ae062ebc1116a7d;p=babeltrace.git diff --git a/src/lib/graph/graph.c b/src/lib/graph/graph.c index 192ec9e5..70c42c6a 100644 --- a/src/lib/graph/graph.c +++ b/src/lib/graph/graph.c @@ -42,6 +42,7 @@ #include #include +#include "component-class-sink-simple.h" #include "component.h" #include "component-sink.h" #include "connection.h" @@ -261,11 +262,15 @@ void notify_message_graph_is_destroyed(struct bt_message *msg) bt_message_unlink_graph(msg); } -struct bt_graph *bt_graph_create(void) +struct bt_graph *bt_graph_create(uint64_t mip_version) { struct bt_graph *graph; int ret; + BT_ASSERT_PRE(mip_version <= bt_get_maximal_mip_version(), + "Unknown MIP version: mip-version=%" PRIu64 ", " + "max-mip-version=%" PRIu64, + mip_version, bt_get_maximal_mip_version()); BT_LOGI_STR("Creating graph object."); graph = g_new0(struct bt_graph, 1); if (!graph) { @@ -274,6 +279,7 @@ struct bt_graph *bt_graph_create(void) } bt_object_init_shared(&graph->base, destroy_graph); + graph->mip_version = mip_version; graph->connections = g_ptr_array_new_with_free_func( (GDestroyNotify) bt_object_try_spec_release); if (!graph->connections) { @@ -700,9 +706,9 @@ end: return status; } -enum bt_graph_consume_status bt_graph_consume(struct bt_graph *graph) +enum bt_graph_run_once_status bt_graph_run_once(struct bt_graph *graph) { - enum bt_graph_consume_status status; + enum bt_graph_run_once_status status; BT_ASSERT_PRE_DEV_NON_NULL(graph, "Graph"); BT_ASSERT_PRE_DEV(graph->can_consume, @@ -791,7 +797,7 @@ bt_graph_add_source_component_output_port_added_listener( struct bt_graph *graph, bt_graph_source_component_output_port_added_listener_func func, bt_graph_listener_removed_func listener_removed, void *data, - int *out_listener_id) + bt_listener_id *out_listener_id) { struct bt_graph_listener_port_added listener = { .base = { @@ -800,7 +806,7 @@ bt_graph_add_source_component_output_port_added_listener( }, .func = (port_added_func_t) func, }; - int listener_id; + bt_listener_id listener_id; BT_ASSERT_PRE_NON_NULL(graph, "Graph"); BT_ASSERT_PRE_NON_NULL(func, "Listener"); @@ -826,7 +832,7 @@ bt_graph_add_filter_component_output_port_added_listener( struct bt_graph *graph, bt_graph_filter_component_output_port_added_listener_func func, bt_graph_listener_removed_func listener_removed, void *data, - int *out_listener_id) + bt_listener_id *out_listener_id) { struct bt_graph_listener_port_added listener = { .base = { @@ -835,7 +841,7 @@ bt_graph_add_filter_component_output_port_added_listener( }, .func = (port_added_func_t) func, }; - int listener_id; + bt_listener_id listener_id; BT_ASSERT_PRE_NON_NULL(graph, "Graph"); BT_ASSERT_PRE_NON_NULL(func, "Listener"); @@ -861,7 +867,7 @@ bt_graph_add_filter_component_input_port_added_listener( struct bt_graph *graph, bt_graph_filter_component_input_port_added_listener_func func, bt_graph_listener_removed_func listener_removed, void *data, - int *out_listener_id) + bt_listener_id *out_listener_id) { struct bt_graph_listener_port_added listener = { .base = { @@ -870,7 +876,7 @@ bt_graph_add_filter_component_input_port_added_listener( }, .func = (port_added_func_t) func, }; - int listener_id; + bt_listener_id listener_id; BT_ASSERT_PRE_NON_NULL(graph, "Graph"); BT_ASSERT_PRE_NON_NULL(func, "Listener"); @@ -896,7 +902,7 @@ bt_graph_add_sink_component_input_port_added_listener( struct bt_graph *graph, bt_graph_sink_component_input_port_added_listener_func func, bt_graph_listener_removed_func listener_removed, void *data, - int *out_listener_id) + bt_listener_id *out_listener_id) { struct bt_graph_listener_port_added listener = { .base = { @@ -905,7 +911,7 @@ bt_graph_add_sink_component_input_port_added_listener( }, .func = (port_added_func_t) func, }; - int listener_id; + bt_listener_id listener_id; BT_ASSERT_PRE_NON_NULL(graph, "Graph"); BT_ASSERT_PRE_NON_NULL(func, "Listener"); @@ -931,7 +937,7 @@ bt_graph_add_source_filter_component_ports_connected_listener( struct bt_graph *graph, bt_graph_source_filter_component_ports_connected_listener_func func, bt_graph_listener_removed_func listener_removed, void *data, - int *out_listener_id) + bt_listener_id *out_listener_id) { struct bt_graph_listener_ports_connected listener = { .base = { @@ -940,7 +946,7 @@ bt_graph_add_source_filter_component_ports_connected_listener( }, .func = (ports_connected_func_t) func, }; - int listener_id; + bt_listener_id listener_id; BT_ASSERT_PRE_NON_NULL(graph, "Graph"); BT_ASSERT_PRE_NON_NULL(func, "Listener"); @@ -967,7 +973,7 @@ bt_graph_add_source_sink_component_ports_connected_listener( struct bt_graph *graph, bt_graph_source_sink_component_ports_connected_listener_func func, bt_graph_listener_removed_func listener_removed, void *data, - int *out_listener_id) + bt_listener_id *out_listener_id) { struct bt_graph_listener_ports_connected listener = { .base = { @@ -976,7 +982,7 @@ bt_graph_add_source_sink_component_ports_connected_listener( }, .func = (ports_connected_func_t) func, }; - int listener_id; + bt_listener_id listener_id; BT_ASSERT_PRE_NON_NULL(graph, "Graph"); BT_ASSERT_PRE_NON_NULL(func, "Listener"); @@ -1003,7 +1009,7 @@ bt_graph_add_filter_filter_component_ports_connected_listener( struct bt_graph *graph, bt_graph_filter_filter_component_ports_connected_listener_func func, bt_graph_listener_removed_func listener_removed, void *data, - int *out_listener_id) + bt_listener_id *out_listener_id) { struct bt_graph_listener_ports_connected listener = { .base = { @@ -1012,7 +1018,7 @@ bt_graph_add_filter_filter_component_ports_connected_listener( }, .func = (ports_connected_func_t) func, }; - int listener_id; + bt_listener_id listener_id; BT_ASSERT_PRE_NON_NULL(graph, "Graph"); BT_ASSERT_PRE_NON_NULL(func, "Listener"); @@ -1039,7 +1045,7 @@ bt_graph_add_filter_sink_component_ports_connected_listener( struct bt_graph *graph, bt_graph_filter_sink_component_ports_connected_listener_func func, bt_graph_listener_removed_func listener_removed, void *data, - int *out_listener_id) + bt_listener_id *out_listener_id) { struct bt_graph_listener_ports_connected listener = { .base = { @@ -1048,7 +1054,7 @@ bt_graph_add_filter_sink_component_ports_connected_listener( }, .func = (ports_connected_func_t) func, }; - int listener_id; + bt_listener_id listener_id; BT_ASSERT_PRE_NON_NULL(graph, "Graph"); BT_ASSERT_PRE_NON_NULL(func, "Listener"); @@ -1265,7 +1271,7 @@ int add_component_with_init_method_data( comp_init_method_t init_method, const char *name, const struct bt_value *params, void *init_method_data, bt_logging_level log_level, - struct bt_component **user_component) + const struct bt_component **user_component) { int status = BT_FUNC_STATUS_OK; enum bt_component_class_init_method_status init_status; @@ -1352,7 +1358,8 @@ int add_component_with_init_method_data( /* * If it's a sink component, it needs to be part of the graph's - * sink queue to be consumed by bt_graph_consume(). + * sink queue to be consumed by bt_graph_run() or + * bt_graph_run_once(). */ if (bt_component_is_sink(component)) { graph->has_sink = true; @@ -1408,7 +1415,7 @@ enum bt_graph_add_component_status bt_graph_add_source_component( struct bt_graph *graph, const struct bt_component_class_source *comp_cls, const char *name, const struct bt_value *params, - bt_logging_level log_level, + enum bt_logging_level log_level, const struct bt_component_source **component) { return bt_graph_add_source_component_with_init_method_data( @@ -1420,7 +1427,7 @@ bt_graph_add_filter_component_with_init_method_data( struct bt_graph *graph, const struct bt_component_class_filter *comp_cls, const char *name, const struct bt_value *params, - void *init_method_data, bt_logging_level log_level, + void *init_method_data, enum bt_logging_level log_level, const struct bt_component_filter **component) { BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); @@ -1433,7 +1440,7 @@ enum bt_graph_add_component_status bt_graph_add_filter_component( struct bt_graph *graph, const struct bt_component_class_filter *comp_cls, const char *name, const struct bt_value *params, - bt_logging_level log_level, + enum bt_logging_level log_level, const struct bt_component_filter **component) { return bt_graph_add_filter_component_with_init_method_data( @@ -1445,7 +1452,7 @@ bt_graph_add_sink_component_with_init_method_data( struct bt_graph *graph, const struct bt_component_class_sink *comp_cls, const char *name, const struct bt_value *params, - void *init_method_data, bt_logging_level log_level, + void *init_method_data, enum bt_logging_level log_level, const struct bt_component_sink **component) { BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); @@ -1458,13 +1465,51 @@ enum bt_graph_add_component_status bt_graph_add_sink_component( struct bt_graph *graph, const struct bt_component_class_sink *comp_cls, const char *name, const struct bt_value *params, - bt_logging_level log_level, + enum bt_logging_level log_level, const struct bt_component_sink **component) { return bt_graph_add_sink_component_with_init_method_data( graph, comp_cls, name, params, NULL, log_level, component); } +enum bt_graph_add_component_status +bt_graph_add_simple_sink_component(struct bt_graph *graph, const char *name, + bt_graph_simple_sink_component_init_func init_func, + bt_graph_simple_sink_component_consume_func consume_func, + bt_graph_simple_sink_component_finalize_func finalize_func, + void *user_data, const bt_component_sink **component) +{ + enum bt_graph_add_component_status status; + struct bt_component_class_sink *comp_cls; + struct simple_sink_init_method_data init_method_data = { + .init_func = init_func, + .consume_func = consume_func, + .finalize_func = finalize_func, + .user_data = user_data, + }; + + /* + * Other preconditions are checked by + * bt_graph_add_sink_component_with_init_method_data(). + */ + BT_ASSERT_PRE_NON_NULL(consume_func, "Consume function"); + + comp_cls = bt_component_class_sink_simple_borrow(); + if (!comp_cls) { + BT_LIB_LOGE_APPEND_CAUSE( + "Cannot borrow simple sink component class."); + status = BT_FUNC_STATUS_MEMORY_ERROR; + goto end; + } + + status = bt_graph_add_sink_component_with_init_method_data(graph, + comp_cls, name, NULL, &init_method_data, + BT_LOGGING_LEVEL_NONE, component); + +end: + return status; +} + BT_HIDDEN int bt_graph_remove_unconnected_component(struct bt_graph *graph, struct bt_component *component)