X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Futils%2Fcounter%2Fcounter.c;h=5a6eadaf4ffec97c4cbcd9cfdb59a1439acd3164;hb=68b66a256a54d32992dfefeaad11eea88b7df234;hp=3da0fb90883b67384a2aacae695be5980e1c0ad4;hpb=bb5bb16080ef123c91a690eb267a8d83bd4fb199;p=babeltrace.git diff --git a/plugins/utils/counter/counter.c b/plugins/utils/counter/counter.c index 3da0fb90..5a6eadaf 100644 --- a/plugins/utils/counter/counter.c +++ b/plugins/utils/counter/counter.c @@ -20,34 +20,45 @@ * SOFTWARE. */ -#include -#include -#include +#define BT_LOG_TAG "PLUGIN-UTILS-COUNTER-FLT" +#include "logging.h" + +#include +#include +#include #include -#include +#include #include #include #include "counter.h" -#define PRINTF_COUNT(_what_sing, _what_plur, _var, args...) \ +#define PRINTF_COUNT(_what, _var, args...) \ do { \ if (counter->count._var != 0 || !counter->hide_zero) { \ - printf("%15" PRIu64 " %s\n", \ + printf("%15" PRIu64 " %s message%s\n", \ counter->count._var, \ - counter->count._var == 1 ? _what_sing : _what_plur); \ + (_what), \ + counter->count._var == 1 ? "" : "s"); \ } \ } while (0) +static +const char * const in_port_name = "in"; + static uint64_t get_total_count(struct counter *counter) { return counter->count.event + counter->count.stream_begin + counter->count.stream_end + + counter->count.stream_activity_begin + + counter->count.stream_activity_end + counter->count.packet_begin + counter->count.packet_end + - counter->count.inactivity + + counter->count.disc_events + + counter->count.disc_packets + + counter->count.msg_iter_inactivity + counter->count.other; } @@ -56,33 +67,36 @@ void print_count(struct counter *counter) { uint64_t total = get_total_count(counter); - PRINTF_COUNT("event", "events", event); - PRINTF_COUNT("stream beginning", "stream beginnings", stream_begin); - PRINTF_COUNT("stream end", "stream ends", stream_end); - PRINTF_COUNT("packet beginning", "packet beginnings", packet_begin); - PRINTF_COUNT("packet end", "packet ends", packet_end); - PRINTF_COUNT("inactivity", "inactivities", inactivity); + PRINTF_COUNT("Event", event); + PRINTF_COUNT("Stream beginning", stream_begin); + PRINTF_COUNT("Stream end", stream_end); + PRINTF_COUNT("Stream activity beginning", stream_activity_begin); + PRINTF_COUNT("Stream activity end", stream_activity_end); + PRINTF_COUNT("Packet beginning", packet_begin); + PRINTF_COUNT("Packet end", packet_end); + PRINTF_COUNT("Discarded event", disc_events); + PRINTF_COUNT("Discarded packet", disc_packets); + PRINTF_COUNT("Message iterator inactivity", msg_iter_inactivity); if (counter->count.other > 0) { - PRINTF_COUNT(" other (unknown) notification", - " other (unknown) notifications", other); + PRINTF_COUNT("Other (unknown)", other); } - printf("%s%15" PRIu64 " notification%s (TOTAL)%s\n", + printf("%s%15" PRIu64 " message%s (TOTAL)%s\n", bt_common_color_bold(), total, total == 1 ? "" : "s", bt_common_color_reset()); counter->last_printed_total = total; } static -void try_print_count(struct counter *counter, uint64_t notif_count) +void try_print_count(struct counter *counter, uint64_t msg_count) { if (counter->step == 0) { /* No update */ return; } - counter->at += notif_count; + counter->at += msg_count; if (counter->at >= counter->step) { counter->at = 0; @@ -103,12 +117,12 @@ void try_print_last(struct counter *counter) void destroy_private_counter_data(struct counter *counter) { - bt_object_put_ref(counter->notif_iter); + bt_self_component_port_input_message_iterator_put_ref(counter->msg_iter); g_free(counter); } BT_HIDDEN -void counter_finalize(struct bt_self_component_sink *comp) +void counter_finalize(bt_self_component_sink *comp) { struct counter *counter; @@ -117,20 +131,20 @@ void counter_finalize(struct bt_self_component_sink *comp) bt_self_component_sink_as_self_component(comp)); BT_ASSERT(counter); try_print_last(counter); - bt_object_put_ref(counter->notif_iter); + bt_self_component_port_input_message_iterator_put_ref(counter->msg_iter); g_free(counter); } BT_HIDDEN -enum bt_self_component_status counter_init( - struct bt_self_component_sink *component, - const struct bt_value *params, +bt_self_component_status counter_init( + bt_self_component_sink *component, + const bt_value *params, UNUSED_VAR void *init_method_data) { - enum bt_self_component_status ret; + bt_self_component_status ret; struct counter *counter = g_new0(struct counter, 1); - const struct bt_value *step = NULL; - const struct bt_value *hide_zero = NULL; + const bt_value *step = NULL; + const bt_value *hide_zero = NULL; if (!counter) { ret = BT_SELF_COMPONENT_STATUS_NOMEM; @@ -144,23 +158,29 @@ enum bt_self_component_status counter_init( } counter->last_printed_total = -1ULL; - counter->step = 1000; + counter->step = 10000; step = bt_value_map_borrow_entry_value_const(params, "step"); - if (step && bt_value_is_integer(step)) { - int64_t val; - - val = bt_value_integer_get(step); - if (val >= 0) { - counter->step = (uint64_t) val; + if (step) { + if (!bt_value_is_unsigned_integer(step)) { + BT_LOGE("`step` parameter: expecting an unsigned integer value: " + "type=%s", bt_common_value_type_string( + bt_value_get_type(step))); + goto error; } + + counter->step = bt_value_unsigned_integer_get(step); } hide_zero = bt_value_map_borrow_entry_value_const(params, "hide-zero"); - if (hide_zero && bt_value_is_bool(hide_zero)) { - bt_bool val; + if (hide_zero) { + if (!bt_value_is_bool(hide_zero)) { + BT_LOGE("`hide-zero` parameter: expecting a boolean value: " + "type=%s", bt_common_value_type_string( + bt_value_get_type(hide_zero))); + goto error; + } - val = bt_value_bool_get(hide_zero); - counter->hide_zero = (bool) val; + counter->hide_zero = (bool) bt_value_bool_get(hide_zero); } bt_self_component_set_data( @@ -170,118 +190,131 @@ enum bt_self_component_status counter_init( error: destroy_private_counter_data(counter); + ret = BT_SELF_COMPONENT_STATUS_ERROR; end: return ret; } BT_HIDDEN -enum bt_self_component_status counter_port_connected( - struct bt_self_component_sink *comp, - struct bt_self_component_port_input *self_port, - const struct bt_port_output *other_port) +bt_self_component_status counter_graph_is_configured( + bt_self_component_sink *comp) { - enum bt_self_component_status status = BT_SELF_COMPONENT_STATUS_OK; + bt_self_component_status status = BT_SELF_COMPONENT_STATUS_OK; struct counter *counter; - struct bt_self_component_port_input_notification_iterator *iterator; + bt_self_component_port_input_message_iterator *iterator; counter = bt_self_component_get_data( bt_self_component_sink_as_self_component(comp)); BT_ASSERT(counter); - iterator = bt_self_component_port_input_notification_iterator_create( - self_port); + iterator = bt_self_component_port_input_message_iterator_create( + bt_self_component_sink_borrow_input_port_by_name(comp, + in_port_name)); if (!iterator) { status = BT_SELF_COMPONENT_STATUS_NOMEM; goto end; } - BT_OBJECT_MOVE_REF(counter->notif_iter, iterator); + BT_SELF_COMPONENT_PORT_INPUT_MESSAGE_ITERATOR_MOVE_REF( + counter->msg_iter, iterator); end: return status; } BT_HIDDEN -enum bt_self_component_status counter_consume( - struct bt_self_component_sink *comp) +bt_self_component_status counter_consume( + bt_self_component_sink *comp) { - enum bt_self_component_status ret = BT_SELF_COMPONENT_STATUS_OK; + bt_self_component_status ret = BT_SELF_COMPONENT_STATUS_OK; struct counter *counter; - enum bt_notification_iterator_status it_ret; - uint64_t notif_count; - bt_notification_array_const notifs; + bt_message_iterator_status it_ret; + uint64_t msg_count; + bt_message_array_const msgs; counter = bt_self_component_get_data( bt_self_component_sink_as_self_component(comp)); BT_ASSERT(counter); - if (unlikely(!counter->notif_iter)) { + if (unlikely(!counter->msg_iter)) { try_print_last(counter); ret = BT_SELF_COMPONENT_STATUS_END; goto end; } - /* Consume notifications */ - it_ret = bt_self_component_port_input_notification_iterator_next( - counter->notif_iter, ¬ifs, ¬if_count); + /* Consume messages */ + it_ret = bt_self_component_port_input_message_iterator_next( + counter->msg_iter, &msgs, &msg_count); if (it_ret < 0) { ret = BT_SELF_COMPONENT_STATUS_ERROR; goto end; } switch (it_ret) { - case BT_NOTIFICATION_ITERATOR_STATUS_OK: + case BT_MESSAGE_ITERATOR_STATUS_OK: { uint64_t i; - for (i = 0; i < notif_count; i++) { - const struct bt_notification *notif = notifs[i]; + for (i = 0; i < msg_count; i++) { + const bt_message *msg = msgs[i]; - BT_ASSERT(notif); - switch (bt_notification_get_type(notif)) { - case BT_NOTIFICATION_TYPE_EVENT: + BT_ASSERT(msg); + switch (bt_message_get_type(msg)) { + case BT_MESSAGE_TYPE_EVENT: counter->count.event++; break; - case BT_NOTIFICATION_TYPE_INACTIVITY: - counter->count.inactivity++; + case BT_MESSAGE_TYPE_PACKET_BEGINNING: + counter->count.packet_begin++; + break; + case BT_MESSAGE_TYPE_PACKET_END: + counter->count.packet_end++; + break; + case BT_MESSAGE_TYPE_MESSAGE_ITERATOR_INACTIVITY: + counter->count.msg_iter_inactivity++; break; - case BT_NOTIFICATION_TYPE_STREAM_BEGINNING: + case BT_MESSAGE_TYPE_STREAM_BEGINNING: counter->count.stream_begin++; break; - case BT_NOTIFICATION_TYPE_STREAM_END: + case BT_MESSAGE_TYPE_STREAM_END: counter->count.stream_end++; break; - case BT_NOTIFICATION_TYPE_PACKET_BEGINNING: - counter->count.packet_begin++; + case BT_MESSAGE_TYPE_STREAM_ACTIVITY_BEGINNING: + counter->count.stream_activity_begin++; break; - case BT_NOTIFICATION_TYPE_PACKET_END: - counter->count.packet_end++; + case BT_MESSAGE_TYPE_STREAM_ACTIVITY_END: + counter->count.stream_activity_end++; + break; + case BT_MESSAGE_TYPE_DISCARDED_EVENTS: + counter->count.disc_events++; + break; + case BT_MESSAGE_TYPE_DISCARDED_PACKETS: + counter->count.disc_packets++; break; default: counter->count.other++; } - bt_object_put_ref(notif); + bt_message_put_ref(msg); } ret = BT_SELF_COMPONENT_STATUS_OK; break; } - case BT_NOTIFICATION_ITERATOR_STATUS_AGAIN: + case BT_MESSAGE_ITERATOR_STATUS_AGAIN: ret = BT_SELF_COMPONENT_STATUS_AGAIN; goto end; - case BT_NOTIFICATION_ITERATOR_STATUS_END: + case BT_MESSAGE_ITERATOR_STATUS_END: try_print_last(counter); ret = BT_SELF_COMPONENT_STATUS_END; goto end; - case BT_NOTIFICATION_ITERATOR_STATUS_NOMEM: + case BT_MESSAGE_ITERATOR_STATUS_NOMEM: ret = BT_SELF_COMPONENT_STATUS_NOMEM; goto end; default: break; } - try_print_count(counter, notif_count); + try_print_count(counter, msg_count); end: return ret;