X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Ftext%2Ftext.c;h=3e2727622dca85cef6309ed2cc99103dac71cc39;hb=60535549d314d7784f2e5fcfcf8883ea6c428997;hp=44887b6fe11498470cac076f4d4deb9661a70318;hpb=a263021c7b3cf7e563cb55b3985b46248320a545;p=babeltrace.git diff --git a/plugins/text/text.c b/plugins/text/text.c index 44887b6f..3e272762 100644 --- a/plugins/text/text.c +++ b/plugins/text/text.c @@ -28,11 +28,16 @@ */ #include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -41,6 +46,7 @@ #include #include #include "text.h" +#include static const char *plugin_options[] = { @@ -68,11 +74,13 @@ const char *plugin_options[] = { "field-trace:vpid", "field-loglevel", "field-emf", + "field-callsite", }; static void destroy_text_data(struct text_component *text) { + bt_put(text->input_iterator); (void) g_string_free(text->string, TRUE); g_free(text->options.output_path); g_free(text->options.debug_info_dir); @@ -102,9 +110,9 @@ error: } static -void destroy_text(struct bt_component *component) +void finalize_text(struct bt_private_component *component) { - void *data = bt_component_get_private_data(component); + void *data = bt_private_component_get_user_data(component); destroy_text_data(data); } @@ -122,10 +130,8 @@ enum bt_component_status handle_notification(struct text_component *text, switch (bt_notification_get_type(notification)) { case BT_NOTIFICATION_TYPE_PACKET_BEGIN: - puts(""); break; case BT_NOTIFICATION_TYPE_PACKET_END: - puts(""); break; case BT_NOTIFICATION_TYPE_EVENT: { @@ -144,7 +150,6 @@ enum bt_component_status handle_notification(struct text_component *text, break; } case BT_NOTIFICATION_TYPE_STREAM_END: - puts(""); break; default: puts("Unhandled notification type"); @@ -154,43 +159,61 @@ end: } static -enum bt_component_status run(struct bt_component *component) +enum bt_component_status text_accept_port_connection( + struct bt_private_component *component, + struct bt_private_port *self_port, + struct bt_port *other_port) +{ + enum bt_component_status ret = BT_COMPONENT_STATUS_OK; + struct bt_private_connection *connection; + struct text_component *text; + + text = bt_private_component_get_user_data(component); + assert(text); + assert(!text->input_iterator); + connection = bt_private_port_get_private_connection(self_port); + assert(connection); + text->input_iterator = + bt_private_connection_create_notification_iterator(connection); + + if (!text->input_iterator) { + ret = BT_COMPONENT_STATUS_ERROR; + } + + bt_put(connection); + return ret; +} + +static +enum bt_component_status run(struct bt_private_component *component) { enum bt_component_status ret; struct bt_notification *notification = NULL; struct bt_notification_iterator *it; - struct text_component *text = bt_component_get_private_data(component); - - ret = bt_component_sink_get_input_iterator(component, 0, &it); - if (ret != BT_COMPONENT_STATUS_OK) { - goto end; - } + struct text_component *text = + bt_private_component_get_user_data(component); + enum bt_notification_iterator_status it_ret; - if (likely(text->processed_first_event)) { - enum bt_notification_iterator_status it_ret; + it = text->input_iterator; - it_ret = bt_notification_iterator_next(it); - switch (it_ret) { - case BT_NOTIFICATION_ITERATOR_STATUS_ERROR: - ret = BT_COMPONENT_STATUS_ERROR; - goto end; - case BT_NOTIFICATION_ITERATOR_STATUS_END: - ret = BT_COMPONENT_STATUS_END; - goto end; - default: - break; - } - } - notification = bt_notification_iterator_get_notification(it); - if (!notification) { + it_ret = bt_notification_iterator_next(it); + switch (it_ret) { + case BT_NOTIFICATION_ITERATOR_STATUS_ERROR: ret = BT_COMPONENT_STATUS_ERROR; goto end; + case BT_NOTIFICATION_ITERATOR_STATUS_END: + ret = BT_COMPONENT_STATUS_END; + BT_PUT(text->input_iterator); + goto end; + default: + break; } + notification = bt_notification_iterator_get_notification(it); + assert(notification); ret = handle_notification(text, notification); text->processed_first_event = true; end: - bt_put(it); bt_put(notification); return ret; } @@ -337,8 +360,8 @@ enum bt_component_status apply_params(struct text_component *text, goto end; } - ret = bt_value_string_get(color_value, &color); - if (ret) { + status = bt_value_string_get(color_value, &color); + if (status) { warn_wrong_color_param(text); } else { if (strcmp(color, "never") == 0) { @@ -534,7 +557,7 @@ enum bt_component_status apply_params(struct text_component *text, text->options.print_trace_vpid_field = true; text->options.print_loglevel_field = false; text->options.print_emf_field = false; - text->options.print_emf_field = false; + text->options.print_callsite_field = false; break; case TEXT_DEFAULT_SHOW: text->options.print_trace_field = true; @@ -544,7 +567,7 @@ enum bt_component_status apply_params(struct text_component *text, text->options.print_trace_vpid_field = true; text->options.print_loglevel_field = true; text->options.print_emf_field = true; - text->options.print_emf_field = true; + text->options.print_callsite_field = true; break; case TEXT_DEFAULT_HIDE: text->options.print_trace_field = false; @@ -554,7 +577,7 @@ enum bt_component_status apply_params(struct text_component *text, text->options.print_trace_vpid_field = false; text->options.print_loglevel_field = false; text->options.print_emf_field = false; - text->options.print_emf_field = false; + text->options.print_callsite_field = false; break; default: ret = BT_COMPONENT_STATUS_ERROR; @@ -633,12 +656,12 @@ enum bt_component_status apply_params(struct text_component *text, value = false; found = false; - ret = apply_one_bool("field-emf", params, &value, &found); + ret = apply_one_bool("field-callsite", params, &value, &found); if (ret != BT_COMPONENT_STATUS_OK) { goto end; } if (found) { - text->options.print_emf_field = value; + text->options.print_callsite_field = value; } end: @@ -665,9 +688,29 @@ void set_use_colors(struct text_component *text) } } +static +void init_stream_packet_context_quarks(void) +{ + stream_packet_context_quarks[Q_TIMESTAMP_BEGIN] = + g_quark_from_string("timestamp_begin"); + stream_packet_context_quarks[Q_TIMESTAMP_BEGIN] = + g_quark_from_string("timestamp_begin"); + stream_packet_context_quarks[Q_TIMESTAMP_END] = + g_quark_from_string("timestamp_end"); + stream_packet_context_quarks[Q_EVENTS_DISCARDED] = + g_quark_from_string("events_discarded"); + stream_packet_context_quarks[Q_CONTENT_SIZE] = + g_quark_from_string("content_size"); + stream_packet_context_quarks[Q_PACKET_SIZE] = + g_quark_from_string("packet_size"); + stream_packet_context_quarks[Q_PACKET_SEQ_NUM] = + g_quark_from_string("packet_seq_num"); +} + static enum bt_component_status text_component_init( - struct bt_component *component, struct bt_value *params, + struct bt_private_component *component, + struct bt_value *params, UNUSED_VAR void *init_method_data) { enum bt_component_status ret; @@ -694,10 +737,13 @@ enum bt_component_status text_component_init( set_use_colors(text); - ret = bt_component_set_private_data(component, text); + ret = bt_private_component_set_user_data(component, text); if (ret != BT_COMPONENT_STATUS_OK) { goto error; } + + init_stream_packet_context_quarks(); + end: return ret; error: @@ -712,7 +758,7 @@ BT_PLUGIN_AUTHOR("Jérémie Galarneau"); BT_PLUGIN_LICENSE("MIT"); BT_PLUGIN_SINK_COMPONENT_CLASS(text, run); BT_PLUGIN_SINK_COMPONENT_CLASS_INIT_METHOD(text, text_component_init); -BT_PLUGIN_SINK_COMPONENT_CLASS_DESTROY_METHOD(text, destroy_text); +BT_PLUGIN_SINK_COMPONENT_CLASS_ACCEPT_PORT_CONNECTION_METHOD(text, text_accept_port_connection); +BT_PLUGIN_SINK_COMPONENT_CLASS_FINALIZE_METHOD(text, finalize_text); BT_PLUGIN_SINK_COMPONENT_CLASS_DESCRIPTION(text, "Formats CTF-IR to text. Formerly known as ctf-text."); -