X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Futils%2Ftrimmer%2Ftrimmer.c;h=5134fdc98152000bb5cfbe5f8cde3f0432f4205b;hb=c49bf79b7d7e87cc21d065a7d208bcc238fb0800;hp=b18d976b0fe9ad8905de5307a8d6006d62ad7f3d;hpb=ab8b2b1ba138ce05c6eb7f1e16c0bc7784d6edfa;p=babeltrace.git diff --git a/src/plugins/utils/trimmer/trimmer.c b/src/plugins/utils/trimmer/trimmer.c index b18d976b..5134fdc9 100644 --- a/src/plugins/utils/trimmer/trimmer.c +++ b/src/plugins/utils/trimmer/trimmer.c @@ -561,19 +561,20 @@ end: return ret; } -bt_component_class_init_method_status trimmer_init( +bt_component_class_initialize_method_status trimmer_init( bt_self_component_filter *self_comp_flt, + bt_self_component_filter_configuration *config, const bt_value *params, void *init_data) { int ret; - bt_component_class_init_method_status status = - BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK; + bt_component_class_initialize_method_status status = + BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK; bt_self_component_add_port_status add_port_status; struct trimmer_comp *trimmer_comp = create_trimmer_comp(); bt_self_component *self_comp = bt_self_component_filter_as_self_component(self_comp_flt); if (!trimmer_comp) { - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_MEMORY_ERROR; + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; goto error; } @@ -584,10 +585,10 @@ bt_component_class_init_method_status trimmer_init( self_comp_flt, in_port_name, NULL, NULL); switch (add_port_status) { case BT_SELF_COMPONENT_ADD_PORT_STATUS_ERROR: - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR; + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR; goto error; case BT_SELF_COMPONENT_ADD_PORT_STATUS_MEMORY_ERROR: - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_MEMORY_ERROR; + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; goto error; default: break; @@ -597,10 +598,10 @@ bt_component_class_init_method_status trimmer_init( self_comp_flt, "out", NULL, NULL); switch (add_port_status) { case BT_SELF_COMPONENT_ADD_PORT_STATUS_ERROR: - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR; + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR; goto error; case BT_SELF_COMPONENT_ADD_PORT_STATUS_MEMORY_ERROR: - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_MEMORY_ERROR; + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; goto error; default: break; @@ -608,7 +609,7 @@ bt_component_class_init_method_status trimmer_init( ret = init_trimmer_comp_from_params(trimmer_comp, params); if (ret) { - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR; + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR; goto error; } @@ -616,8 +617,8 @@ bt_component_class_init_method_status trimmer_init( goto end; error: - if (status == BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK) { - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR; + if (status == BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) { + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR; } if (trimmer_comp) { @@ -661,19 +662,20 @@ void destroy_trimmer_iterator_stream_state( } BT_HIDDEN -bt_component_class_message_iterator_init_method_status trimmer_msg_iter_init( +bt_component_class_message_iterator_initialize_method_status trimmer_msg_iter_init( bt_self_message_iterator *self_msg_iter, + bt_self_message_iterator_configuration *config, bt_self_component_filter *self_comp, bt_self_component_port_output *port) { - bt_component_class_message_iterator_init_method_status status; + bt_component_class_message_iterator_initialize_method_status status; bt_self_component_port_input_message_iterator_create_from_message_iterator_status msg_iter_status; struct trimmer_iterator *trimmer_it; trimmer_it = g_new0(struct trimmer_iterator, 1); if (!trimmer_it) { - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR; + status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; goto error; } @@ -706,7 +708,7 @@ bt_component_class_message_iterator_init_method_status trimmer_msg_iter_init( trimmer_it->output_messages = g_queue_new(); if (!trimmer_it->output_messages) { - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR; + status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; goto error; } @@ -714,14 +716,21 @@ bt_component_class_message_iterator_init_method_status trimmer_msg_iter_init( g_direct_equal, NULL, (GDestroyNotify) destroy_trimmer_iterator_stream_state); if (!trimmer_it->stream_states) { - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR; + status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; goto error; } + /* + * The trimmer requires upstream messages to have times, so it can + * always seek forward. + */ + bt_self_message_iterator_configuration_set_can_seek_forward( + config, BT_TRUE); + trimmer_it->self_msg_iter = self_msg_iter; bt_self_message_iterator_set_data(self_msg_iter, trimmer_it); - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_OK; + status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INITIALIZE_METHOD_STATUS_OK; goto end; error: @@ -998,14 +1007,25 @@ bt_component_class_message_iterator_next_method_status state_seek_initially( struct trimmer_iterator *trimmer_it) { struct trimmer_comp *trimmer_comp = trimmer_it->trimmer_comp; - bt_component_class_message_iterator_next_method_status status = - BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK; + bt_component_class_message_iterator_next_method_status status; BT_ASSERT(trimmer_it->begin.is_set); if (trimmer_it->begin.is_infinite) { - if (!bt_self_component_port_input_message_iterator_can_seek_beginning( - trimmer_it->upstream_iter)) { + bt_bool can_seek; + + status = (int) bt_self_component_port_input_message_iterator_can_seek_beginning( + trimmer_it->upstream_iter, &can_seek); + if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) { + if (status < 0) { + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Cannot make upstream message iterator initially seek its beginning."); + } + + goto end; + } + + if (!can_seek) { BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, "Cannot make upstream message iterator initially seek its beginning."); status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR; @@ -1015,9 +1035,23 @@ bt_component_class_message_iterator_next_method_status state_seek_initially( status = (int) bt_self_component_port_input_message_iterator_seek_beginning( trimmer_it->upstream_iter); } else { - if (!bt_self_component_port_input_message_iterator_can_seek_ns_from_origin( - trimmer_it->upstream_iter, - trimmer_it->begin.ns_from_origin)) { + bt_bool can_seek; + + status = (int) bt_self_component_port_input_message_iterator_can_seek_ns_from_origin( + trimmer_it->upstream_iter, trimmer_it->begin.ns_from_origin, + &can_seek); + + if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) { + if (status < 0) { + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Cannot make upstream message iterator initially seek: seek-ns-from-origin=%" PRId64, + trimmer_it->begin.ns_from_origin); + } + + goto end; + } + + if (!can_seek) { BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, "Cannot make upstream message iterator initially seek: seek-ns-from-origin=%" PRId64, trimmer_it->begin.ns_from_origin);