X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Ftext%2Fpretty%2Fpretty.c;h=5ef2c7a70ee6af84b119e27d6dec2877c2c5a390;hb=601b0d3c9a6bf91274d0f01ccdec7fecfe3ed310;hp=f7a1b8bc08874e34a6d625532227e39302def6f6;hpb=08899d39a50c63a8bb1df6d76f0904bfef3c71ab;p=babeltrace.git diff --git a/plugins/text/pretty/pretty.c b/plugins/text/pretty/pretty.c index f7a1b8bc..5ef2c7a7 100644 --- a/plugins/text/pretty/pretty.c +++ b/plugins/text/pretty/pretty.c @@ -27,18 +27,7 @@ * SOFTWARE. */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include #include #include #include @@ -46,10 +35,12 @@ #include #include #include -#include +#include #include "pretty.h" +GQuark stream_packet_context_quarks[STREAM_PACKET_CONTEXT_QUARKS_LEN]; + static const char *plugin_options[] = { "color", @@ -79,7 +70,7 @@ const char *plugin_options[] = { static void destroy_pretty_data(struct pretty_component *pretty) { - bt_put(pretty->input_iterator); + bt_object_put_ref(pretty->input_iterator); if (pretty->string) { (void) g_string_free(pretty->string, TRUE); @@ -140,83 +131,71 @@ enum bt_component_status handle_notification(struct pretty_component *pretty, { enum bt_component_status ret = BT_COMPONENT_STATUS_OK; - assert(pretty); + BT_ASSERT(pretty); switch (bt_notification_get_type(notification)) { + case BT_NOTIFICATION_TYPE_PACKET_BEGIN: + ret = pretty_print_packet(pretty, notification); + break; case BT_NOTIFICATION_TYPE_EVENT: ret = pretty_print_event(pretty, notification); break; case BT_NOTIFICATION_TYPE_INACTIVITY: fprintf(stderr, "Inactivity notification\n"); break; - case BT_NOTIFICATION_TYPE_PACKET_BEGIN: - case BT_NOTIFICATION_TYPE_PACKET_END: - case BT_NOTIFICATION_TYPE_STREAM_BEGIN: - case BT_NOTIFICATION_TYPE_STREAM_END: - break; - case BT_NOTIFICATION_TYPE_DISCARDED_PACKETS: - case BT_NOTIFICATION_TYPE_DISCARDED_EVENTS: - ret = pretty_print_discarded_elements(pretty, notification); - break; default: - fprintf(stderr, "Unhandled notification type\n"); + break; } return ret; } BT_HIDDEN -void pretty_port_connected( +enum bt_component_status pretty_port_connected( struct bt_private_component *component, struct bt_private_port *self_port, struct bt_port *other_port) { + enum bt_component_status status = BT_COMPONENT_STATUS_OK; enum bt_connection_status conn_status; struct bt_private_connection *connection; struct pretty_component *pretty; - static const enum bt_notification_type notif_types[] = { - BT_NOTIFICATION_TYPE_EVENT, - BT_NOTIFICATION_TYPE_DISCARDED_PACKETS, - BT_NOTIFICATION_TYPE_DISCARDED_EVENTS, - BT_NOTIFICATION_TYPE_SENTINEL, - }; pretty = bt_private_component_get_user_data(component); - assert(pretty); - assert(!pretty->input_iterator); + BT_ASSERT(pretty); + BT_ASSERT(!pretty->input_iterator); connection = bt_private_port_get_private_connection(self_port); - assert(connection); + BT_ASSERT(connection); conn_status = bt_private_connection_create_notification_iterator( - connection, notif_types, &pretty->input_iterator); + connection, &pretty->input_iterator); if (conn_status != BT_CONNECTION_STATUS_OK) { - pretty->error = true; + status = BT_COMPONENT_STATUS_ERROR; } - bt_put(connection); + bt_object_put_ref(connection); + return status; } BT_HIDDEN enum bt_component_status pretty_consume(struct bt_private_component *component) { enum bt_component_status ret; - struct bt_notification *notification = NULL; + bt_notification_array notifs; struct bt_notification_iterator *it; struct pretty_component *pretty = bt_private_component_get_user_data(component); enum bt_notification_iterator_status it_ret; - - if (unlikely(pretty->error)) { - ret = BT_COMPONENT_STATUS_ERROR; - goto end; - } + uint64_t count = 0; + uint64_t i = 0; it = pretty->input_iterator; - it_ret = bt_notification_iterator_next(it); + it_ret = bt_private_connection_notification_iterator_next(it, ¬ifs, + &count); switch (it_ret) { case BT_NOTIFICATION_ITERATOR_STATUS_END: ret = BT_COMPONENT_STATUS_END; - BT_PUT(pretty->input_iterator); + BT_OBJECT_PUT_REF_AND_RESET(pretty->input_iterator); goto end; case BT_NOTIFICATION_ITERATOR_STATUS_AGAIN: ret = BT_COMPONENT_STATUS_AGAIN; @@ -228,17 +207,28 @@ enum bt_component_status pretty_consume(struct bt_private_component *component) goto end; } - notification = bt_notification_iterator_get_notification(it); - assert(notification); - ret = handle_notification(pretty, notification); + BT_ASSERT(it_ret == BT_NOTIFICATION_ITERATOR_STATUS_OK); + + for (i = 0; i < count; i++) { + ret = handle_notification(pretty, notifs[i]); + if (ret) { + goto end; + } + + bt_object_put_ref(notifs[i]); + } end: - bt_put(notification); + for (; i < count; i++) { + bt_object_put_ref(notifs[i]); + } + return ret; } static -enum bt_component_status add_params_to_map(struct bt_value *plugin_opt_map) +enum bt_component_status add_params_to_map( + struct bt_private_value *plugin_opt_map) { enum bt_component_status ret = BT_COMPONENT_STATUS_OK; unsigned int i; @@ -247,7 +237,8 @@ enum bt_component_status add_params_to_map(struct bt_value *plugin_opt_map) const char *key = plugin_options[i]; enum bt_value_status status; - status = bt_value_map_insert(plugin_opt_map, key, bt_value_null); + status = bt_private_value_map_insert_entry(plugin_opt_map, key, + bt_value_null); switch (status) { case BT_VALUE_STATUS_OK: break; @@ -264,9 +255,10 @@ static bt_bool check_param_exists(const char *key, struct bt_value *object, void *data) { struct pretty_component *pretty = data; - struct bt_value *plugin_opt_map = pretty->plugin_opt_map; - if (!bt_value_map_get(plugin_opt_map, key)) { + if (!bt_value_map_has_entry( + bt_value_borrow_from_private(pretty->plugin_opt_map), + key)) { fprintf(pretty->err, "[warning] Parameter \"%s\" unknown to \"text.pretty\" sink component\n", key); } @@ -280,27 +272,19 @@ enum bt_component_status apply_one_string(const char *key, { enum bt_component_status ret = BT_COMPONENT_STATUS_OK; struct bt_value *value = NULL; - enum bt_value_status status; const char *str; - value = bt_value_map_get(params, key); + value = bt_value_map_borrow_entry_value(params, key); if (!value) { goto end; } if (bt_value_is_null(value)) { goto end; } - status = bt_value_string_get(value, &str); - switch (status) { - case BT_VALUE_STATUS_OK: - break; - default: - ret = BT_COMPONENT_STATUS_ERROR; - goto end; - } + str = bt_value_string_get(value); *option = g_strdup(str); + end: - bt_put(value); return ret; } @@ -312,27 +296,19 @@ enum bt_component_status apply_one_bool(const char *key, { enum bt_component_status ret = BT_COMPONENT_STATUS_OK; struct bt_value *value = NULL; - enum bt_value_status status; bt_bool bool_val; - value = bt_value_map_get(params, key); + value = bt_value_map_borrow_entry_value(params, key); if (!value) { goto end; } - status = bt_value_bool_get(value, &bool_val); - switch (status) { - case BT_VALUE_STATUS_OK: - break; - default: - ret = BT_COMPONENT_STATUS_ERROR; - goto end; - } + bool_val = bt_value_bool_get(value); *option = (bool) bool_val; if (found) { *found = true; } + end: - bt_put(value); return ret; } @@ -374,7 +350,7 @@ enum bt_component_status apply_params(struct pretty_component *pretty, bool value, found; char *str = NULL; - pretty->plugin_opt_map = bt_value_map_create(); + pretty->plugin_opt_map = bt_private_value_map_create(); if (!pretty->plugin_opt_map) { ret = BT_COMPONENT_STATUS_ERROR; goto end; @@ -384,7 +360,7 @@ enum bt_component_status apply_params(struct pretty_component *pretty, goto end; } /* Report unknown parameters. */ - status = bt_value_map_foreach(params, check_param_exists, pretty); + status = bt_value_map_foreach_entry(params, check_param_exists, pretty); switch (status) { case BT_VALUE_STATUS_OK: break; @@ -394,31 +370,26 @@ enum bt_component_status apply_params(struct pretty_component *pretty, } /* Known parameters. */ pretty->options.color = PRETTY_COLOR_OPT_AUTO; - if (bt_value_map_has_key(params, "color")) { + if (bt_value_map_has_entry(params, "color")) { struct bt_value *color_value; const char *color; - color_value = bt_value_map_get(params, "color"); + color_value = bt_value_map_borrow_entry_value(params, "color"); if (!color_value) { goto end; } - status = bt_value_string_get(color_value, &color); - if (status) { - warn_wrong_color_param(pretty); + color = bt_value_string_get(color_value); + + if (strcmp(color, "never") == 0) { + pretty->options.color = PRETTY_COLOR_OPT_NEVER; + } else if (strcmp(color, "auto") == 0) { + pretty->options.color = PRETTY_COLOR_OPT_AUTO; + } else if (strcmp(color, "always") == 0) { + pretty->options.color = PRETTY_COLOR_OPT_ALWAYS; } else { - if (strcmp(color, "never") == 0) { - pretty->options.color = PRETTY_COLOR_OPT_NEVER; - } else if (strcmp(color, "auto") == 0) { - pretty->options.color = PRETTY_COLOR_OPT_AUTO; - } else if (strcmp(color, "always") == 0) { - pretty->options.color = PRETTY_COLOR_OPT_ALWAYS; - } else { - warn_wrong_color_param(pretty); - } + warn_wrong_color_param(pretty); } - - bt_put(color_value); } ret = apply_one_string("path", params, &pretty->options.output_path); @@ -689,7 +660,7 @@ enum bt_component_status apply_params(struct pretty_component *pretty, } end: - bt_put(pretty->plugin_opt_map); + bt_object_put_ref(pretty->plugin_opt_map); pretty->plugin_opt_map = NULL; g_free(str); return ret;