X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Ftext%2Fpretty%2Fprint.c;h=f81b892b1d19c0ffd4e79f0f5e091fc78d61bb93;hb=2c62a90ddcc5d63c6bf0f080e5676bc4eed36655;hp=c098dd6ca993326f5fd054f014bdc3244ac3f3cc;hpb=467673c1a8e30cc146cddffa1970bbb430052680;p=babeltrace.git diff --git a/src/plugins/text/pretty/print.c b/src/plugins/text/pretty/print.c index c098dd6c..f81b892b 100644 --- a/src/plugins/text/pretty/print.c +++ b/src/plugins/text/pretty/print.c @@ -31,20 +31,21 @@ #include "common/assert.h" #include #include +#include #include #include "pretty.h" #define NSEC_PER_SEC 1000000000LL -#define COLOR_NAME BT_COMMON_COLOR_BOLD -#define COLOR_FIELD_NAME BT_COMMON_COLOR_FG_CYAN -#define COLOR_RST BT_COMMON_COLOR_RESET -#define COLOR_STRING_VALUE BT_COMMON_COLOR_BOLD -#define COLOR_NUMBER_VALUE BT_COMMON_COLOR_BOLD -#define COLOR_ENUM_MAPPING_NAME BT_COMMON_COLOR_BOLD -#define COLOR_UNKNOWN BT_COMMON_COLOR_BOLD BT_COMMON_COLOR_FG_RED -#define COLOR_EVENT_NAME BT_COMMON_COLOR_BOLD BT_COMMON_COLOR_FG_MAGENTA -#define COLOR_TIMESTAMP BT_COMMON_COLOR_BOLD BT_COMMON_COLOR_FG_YELLOW +static char color_name[32]; +static char color_field_name[32]; +static char color_rst[32]; +static char color_string_value[32]; +static char color_number_value[32]; +static char color_enum_mapping_name[32]; +static char color_unknown[32]; +static char color_event_name[32]; +static char color_timestamp[32]; struct timestamp { int64_t real_timestamp; /* Relative to UNIX epoch. */ @@ -59,9 +60,9 @@ static void print_name_equal(struct pretty_component *pretty, const char *name) { if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_NAME); + bt_common_g_string_append(pretty->string, color_name); bt_common_g_string_append(pretty->string, name); - bt_common_g_string_append(pretty->string, COLOR_RST); + bt_common_g_string_append(pretty->string, color_rst); } else { bt_common_g_string_append(pretty->string, name); } @@ -72,9 +73,9 @@ static void print_field_name_equal(struct pretty_component *pretty, const char *name) { if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_FIELD_NAME); + bt_common_g_string_append(pretty->string, color_field_name); bt_common_g_string_append(pretty->string, name); - bt_common_g_string_append(pretty->string, COLOR_RST); + bt_common_g_string_append(pretty->string, color_rst); } else { bt_common_g_string_append(pretty->string, name); } @@ -239,7 +240,7 @@ int print_event_timestamp(struct pretty_component *pretty, bt_common_g_string_append(pretty->string, "["); } if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_TIMESTAMP); + bt_common_g_string_append(pretty->string, color_timestamp); } if (pretty->options.print_timestamp_cycles) { print_timestamp_cycles(pretty, clock_snapshot, true); @@ -247,7 +248,7 @@ int print_event_timestamp(struct pretty_component *pretty, print_timestamp_wall(pretty, clock_snapshot, true); } if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_RST); + bt_common_g_string_append(pretty->string, color_rst); } if (!print_names) @@ -440,7 +441,7 @@ int print_event_header(struct pretty_component *pretty, &log_level); if (prop_avail == BT_PROPERTY_AVAILABILITY_AVAILABLE) { log_level_str = log_level_names[log_level]; - BT_ASSERT(log_level_str); + BT_ASSERT_DBG(log_level_str); if (!pretty->start_line) { bt_common_g_string_append(pretty->string, ", "); @@ -489,10 +490,10 @@ int print_event_header(struct pretty_component *pretty, if (pretty->use_colors) { if (ev_name) { bt_common_g_string_append(pretty->string, - COLOR_EVENT_NAME); + color_event_name); } else { bt_common_g_string_append(pretty->string, - COLOR_UNKNOWN); + color_unknown); } } if (ev_name) { @@ -501,7 +502,7 @@ int print_event_header(struct pretty_component *pretty, bt_common_g_string_append(pretty->string, ""); } if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_RST); + bt_common_g_string_append(pretty->string, color_rst); } if (!print_names) { bt_common_g_string_append(pretty->string, ": "); @@ -528,17 +529,17 @@ int print_integer(struct pretty_component *pretty, bt_field_class_type ft_type; int_fc = bt_field_borrow_class_const(field); - BT_ASSERT(int_fc); + BT_ASSERT_DBG(int_fc); ft_type = bt_field_get_class_type(field); - if (ft_type == BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER || - ft_type == BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION) { + if (bt_field_class_type_is(ft_type, + BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER)) { v.u = bt_field_integer_unsigned_get_value(field); } else { v.s = bt_field_integer_signed_get_value(field); } if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_NUMBER_VALUE); + bt_common_g_string_append(pretty->string, color_number_value); rst_color = true; } @@ -560,8 +561,8 @@ int print_integer(struct pretty_component *pretty, } case BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_OCTAL: { - if (ft_type == BT_FIELD_CLASS_TYPE_SIGNED_INTEGER || - ft_type == BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION) { + if (bt_field_class_type_is(ft_type, + BT_FIELD_CLASS_TYPE_SIGNED_INTEGER)) { int len; len = bt_field_class_integer_get_field_value_range( @@ -569,7 +570,7 @@ int print_integer(struct pretty_component *pretty, if (len < 64) { size_t rounded_len; - BT_ASSERT(len != 0); + BT_ASSERT_DBG(len != 0); /* Round length to the nearest 3-bit */ rounded_len = (((len - 1) / 3) + 1) * 3; v.u &= ((uint64_t) 1 << rounded_len) - 1; @@ -580,8 +581,8 @@ int print_integer(struct pretty_component *pretty, break; } case BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_DECIMAL: - if (ft_type == BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER || - ft_type == BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION) { + if (bt_field_class_type_is(ft_type, + BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER)) { bt_common_g_string_append_printf(pretty->string, "%" PRIu64, v.u); } else { bt_common_g_string_append_printf(pretty->string, "%" PRId64, v.s); @@ -608,7 +609,7 @@ int print_integer(struct pretty_component *pretty, } end: if (rst_color) { - bt_common_g_string_append(pretty->string, COLOR_RST); + bt_common_g_string_append(pretty->string, color_rst); } return ret; } @@ -638,7 +639,7 @@ void print_escape_string(struct pretty_component *pretty, const char *str) } /* Standard characters. */ - if (!iscntrl(str[i])) { + if (!iscntrl((unsigned char) str[i])) { bt_common_g_string_append_c(pretty->string, str[i]); continue; } @@ -707,7 +708,7 @@ int print_enum(struct pretty_component *pretty, &label_array, &label_count); break; default: - abort(); + bt_common_abort(); } if (ret) { @@ -718,11 +719,11 @@ int print_enum(struct pretty_component *pretty, bt_common_g_string_append(pretty->string, "( "); if (label_count == 0) { if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_UNKNOWN); + bt_common_g_string_append(pretty->string, color_unknown); } bt_common_g_string_append(pretty->string, ""); if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_RST); + bt_common_g_string_append(pretty->string, color_rst); } goto skip_loop; } @@ -733,11 +734,11 @@ int print_enum(struct pretty_component *pretty, bt_common_g_string_append(pretty->string, ", "); } if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_ENUM_MAPPING_NAME); + bt_common_g_string_append(pretty->string, color_enum_mapping_name); } print_escape_string(pretty, mapping_name); if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_RST); + bt_common_g_string_append(pretty->string, color_rst); } } skip_loop: @@ -836,7 +837,7 @@ int print_array_field(struct pretty_component *pretty, } field = bt_field_array_borrow_element_field_by_index_const(array, i); - BT_ASSERT(field); + BT_ASSERT_DBG(field); return print_field(pretty, field, print_names); } @@ -886,7 +887,7 @@ int print_sequence_field(struct pretty_component *pretty, } field = bt_field_array_borrow_element_field_by_index_const(seq, i); - BT_ASSERT(field); + BT_ASSERT_DBG(field); return print_field(pretty, field, print_names); } @@ -952,7 +953,7 @@ int print_variant(struct pretty_component *pretty, const bt_field *field = NULL; field = bt_field_variant_borrow_selected_option_field_const(variant); - BT_ASSERT(field); + BT_ASSERT_DBG(field); bt_common_g_string_append(pretty->string, "{ "); pretty->depth++; if (print_names) { @@ -977,15 +978,13 @@ int print_field(struct pretty_component *pretty, bt_field_class_type class_id; class_id = bt_field_get_class_type(field); - switch (class_id) { - case BT_FIELD_CLASS_TYPE_BOOL: - { + if (class_id == BT_FIELD_CLASS_TYPE_BOOL) { bt_bool v; const char *text; v = bt_field_bool_get_value(field); if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_NUMBER_VALUE); + bt_common_g_string_append(pretty->string, color_number_value); } if (v) { text = "true"; @@ -994,53 +993,47 @@ int print_field(struct pretty_component *pretty, } bt_common_g_string_append(pretty->string, text); if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_RST); + bt_common_g_string_append(pretty->string, color_rst); } return 0; - } - case BT_FIELD_CLASS_TYPE_BIT_ARRAY: - { + } else if (class_id == BT_FIELD_CLASS_TYPE_BIT_ARRAY) { uint64_t v = bt_field_bit_array_get_value_as_integer(field); if (pretty->use_colors) { bt_common_g_string_append(pretty->string, - COLOR_NUMBER_VALUE); + color_number_value); } bt_common_g_string_append_printf(pretty->string, "0x%" PRIX64, v); if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_RST); + bt_common_g_string_append(pretty->string, color_rst); } return 0; - } - case BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER: - case BT_FIELD_CLASS_TYPE_SIGNED_INTEGER: + } else if (bt_field_class_type_is(class_id, + BT_FIELD_CLASS_TYPE_ENUMERATION)) { + return print_enum(pretty, field); + } else if (bt_field_class_type_is(class_id, + BT_FIELD_CLASS_TYPE_INTEGER)) { return print_integer(pretty, field); - case BT_FIELD_CLASS_TYPE_SINGLE_PRECISION_REAL: - case BT_FIELD_CLASS_TYPE_DOUBLE_PRECISION_REAL: - { + } else if (bt_field_class_type_is(class_id, + BT_FIELD_CLASS_TYPE_REAL)) { double v; if (class_id == BT_FIELD_CLASS_TYPE_SINGLE_PRECISION_REAL) { - v = (float) bt_field_real_single_precision_get_value(field); + v = bt_field_real_single_precision_get_value(field); } else { v = bt_field_real_double_precision_get_value(field); } if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_NUMBER_VALUE); + bt_common_g_string_append(pretty->string, color_number_value); } bt_common_g_string_append_printf(pretty->string, "%g", v); if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_RST); + bt_common_g_string_append(pretty->string, color_rst); } return 0; - } - case BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION: - case BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION: - return print_enum(pretty, field); - case BT_FIELD_CLASS_TYPE_STRING: - { + } else if (class_id == BT_FIELD_CLASS_TYPE_STRING) { const char *str; str = bt_field_string_get_value(field); @@ -1049,30 +1042,27 @@ int print_field(struct pretty_component *pretty, } if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_STRING_VALUE); + bt_common_g_string_append(pretty->string, color_string_value); } print_escape_string(pretty, str); if (pretty->use_colors) { - bt_common_g_string_append(pretty->string, COLOR_RST); + bt_common_g_string_append(pretty->string, color_rst); } return 0; - } - case BT_FIELD_CLASS_TYPE_STRUCTURE: + } else if (class_id == BT_FIELD_CLASS_TYPE_STRUCTURE) { return print_struct(pretty, field, print_names); - case BT_FIELD_CLASS_TYPE_OPTION_WITHOUT_SELECTOR: - case BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR: - case BT_FIELD_CLASS_TYPE_OPTION_WITH_UNSIGNED_INTEGER_SELECTOR: - case BT_FIELD_CLASS_TYPE_OPTION_WITH_SIGNED_INTEGER_SELECTOR: + } else if (bt_field_class_type_is(class_id, + BT_FIELD_CLASS_TYPE_OPTION)) { return print_option(pretty, field, print_names); - case BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR: - case BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR: - case BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR: + } else if (bt_field_class_type_is(class_id, + BT_FIELD_CLASS_TYPE_VARIANT)) { return print_variant(pretty, field, print_names); - case BT_FIELD_CLASS_TYPE_STATIC_ARRAY: + } else if (class_id == BT_FIELD_CLASS_TYPE_STATIC_ARRAY) { return print_array(pretty, field, print_names); - case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY: + } else if (bt_field_class_type_is(class_id, + BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY)) { return print_sequence(pretty, field, print_names); - default: + } else { // TODO: log instead fprintf(pretty->err, "[error] Unknown type id: %d\n", (int) class_id); return -1; @@ -1209,7 +1199,7 @@ int pretty_print_event(struct pretty_component *pretty, const bt_event *event = bt_message_event_borrow_event_const(event_msg); - BT_ASSERT(event); + BT_ASSERT_DBG(event); pretty->start_line = true; g_string_assign(pretty->string, ""); ret = print_event_header(pretty, event_msg); @@ -1393,7 +1383,7 @@ int pretty_print_discarded_items(struct pretty_component *pretty, elem_type = "packet"; break; default: - abort(); + bt_common_abort(); } BT_ASSERT(stream); @@ -1421,10 +1411,27 @@ int pretty_print_discarded_items(struct pretty_component *pretty, break; default: - abort(); + bt_common_abort(); } print_discarded_elements_msg(pretty, stream, begin, end, count, elem_type); return 0; } + +BT_HIDDEN +void pretty_print_init(void) +{ + strcpy(color_name, bt_common_color_bold()); + strcpy(color_field_name, bt_common_color_fg_cyan()); + strcpy(color_rst, bt_common_color_reset()); + strcpy(color_string_value, bt_common_color_bold()); + strcpy(color_number_value, bt_common_color_bold()); + strcpy(color_enum_mapping_name, bt_common_color_bold()); + strcpy(color_unknown, bt_common_color_bold()); + strcat(color_unknown, bt_common_color_fg_bright_red()); + strcpy(color_event_name, bt_common_color_bold()); + strcat(color_event_name, bt_common_color_fg_bright_magenta()); + strcpy(color_timestamp, bt_common_color_bold()); + strcat(color_timestamp, bt_common_color_fg_bright_yellow()); +}