X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Ftext%2Fpretty%2Fprint.c;h=34967e66d6fad84c2215b2f2f01cb3a21420ac45;hb=0f6bea4ef916464f2d2a0a597c28a6701ac51762;hp=821f03470861693f1078e96d9dc7168cfdf89d2c;hpb=f6ccaed94e575af57fe6bf38154771bee4871a2a;p=babeltrace.git diff --git a/plugins/text/pretty/print.c b/plugins/text/pretty/print.c index 821f0347..34967e66 100644 --- a/plugins/text/pretty/print.c +++ b/plugins/text/pretty/print.c @@ -82,21 +82,19 @@ void print_field_name_equal(struct pretty_component *pretty, const char *name) static void print_timestamp_cycles(struct pretty_component *pretty, - struct bt_clock_class *clock_class, struct bt_event *event) { int ret; struct bt_clock_value *clock_value; uint64_t cycles; - clock_value = bt_event_get_clock_value(event, clock_class); + clock_value = bt_event_borrow_default_clock_value(event); if (!clock_value) { g_string_append(pretty->string, "????????????????????"); return; } ret = bt_clock_value_get_value(clock_value, &cycles); - bt_put(clock_value); if (ret) { // TODO: log, this is unexpected g_string_append(pretty->string, "Error"); @@ -228,44 +226,35 @@ end: static enum bt_component_status print_event_timestamp(struct pretty_component *pretty, - struct bt_event *event, - struct bt_clock_class_priority_map *cc_prio_map, - bool *start_line) + struct bt_event *event, bool *start_line) { bool print_names = pretty->options.print_header_field_names; enum bt_component_status ret = BT_COMPONENT_STATUS_OK; struct bt_stream *stream = NULL; struct bt_stream_class *stream_class = NULL; struct bt_trace *trace = NULL; - struct bt_clock_class *clock_class = NULL; + struct bt_clock_value *clock_value = NULL; - stream = bt_event_get_stream(event); + stream = bt_event_borrow_stream(event); if (!stream) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } - stream_class = bt_stream_get_class(stream); + stream_class = bt_stream_borrow_class(stream); if (!stream_class) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } - trace = bt_stream_class_get_trace(stream_class); + trace = bt_stream_class_borrow_trace(stream_class); if (!trace) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } - if (bt_clock_class_priority_map_get_clock_class_count(cc_prio_map) == 0) { - /* No clock class: skip the timestamp without an error */ - goto end; - } - - clock_class = - bt_clock_class_priority_map_get_highest_priority_clock_class( - cc_prio_map); - if (!clock_class) { - ret = BT_COMPONENT_STATUS_ERROR; + clock_value = bt_event_borrow_default_clock_value(event); + if (!clock_value) { + /* No default clock value: skip the timestamp without an error */ goto end; } @@ -278,13 +267,12 @@ enum bt_component_status print_event_timestamp(struct pretty_component *pretty, g_string_append(pretty->string, COLOR_TIMESTAMP); } if (pretty->options.print_timestamp_cycles) { - print_timestamp_cycles(pretty, clock_class, event); + print_timestamp_cycles(pretty, event); } else { struct bt_clock_value *clock_value = - bt_event_get_clock_value(event, clock_class); + bt_event_borrow_default_clock_value(event); print_timestamp_wall(pretty, clock_value); - bt_put(clock_value); } if (pretty->use_colors) { g_string_append(pretty->string, COLOR_RST); @@ -329,17 +317,12 @@ enum bt_component_status print_event_timestamp(struct pretty_component *pretty, *start_line = !print_names; end: - bt_put(stream); - bt_put(clock_class); - bt_put(stream_class); - bt_put(trace); return ret; } static enum bt_component_status print_event_header(struct pretty_component *pretty, - struct bt_event *event, - struct bt_clock_class_priority_map *cc_prio_map) + struct bt_event *event) { bool print_names = pretty->options.print_header_field_names; enum bt_component_status ret = BT_COMPONENT_STATUS_OK; @@ -348,23 +331,22 @@ enum bt_component_status print_event_header(struct pretty_component *pretty, struct bt_trace *trace_class = NULL; int dom_print = 0; - event_class = bt_event_get_class(event); + event_class = bt_event_borrow_class(event); if (!event_class) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } - stream_class = bt_event_class_get_stream_class(event_class); + stream_class = bt_event_class_borrow_stream_class(event_class); if (!stream_class) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } - trace_class = bt_stream_class_get_trace(stream_class); + trace_class = bt_stream_class_borrow_trace(stream_class); if (!trace_class) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } - ret = print_event_timestamp(pretty, event, cc_prio_map, - &pretty->start_line); + ret = print_event_timestamp(pretty, event, &pretty->start_line); if (ret != BT_COMPONENT_STATUS_OK) { goto end; } @@ -390,8 +372,8 @@ enum bt_component_status print_event_header(struct pretty_component *pretty, if (pretty->options.print_trace_hostname_field) { struct bt_value *hostname_str; - hostname_str = bt_trace_get_environment_field_value_by_name(trace_class, - "hostname"); + hostname_str = bt_trace_borrow_environment_field_value_by_name( + trace_class, "hostname"); if (hostname_str) { const char *str; @@ -405,15 +387,14 @@ enum bt_component_status print_event_header(struct pretty_component *pretty, == BT_VALUE_STATUS_OK) { g_string_append(pretty->string, str); } - bt_put(hostname_str); dom_print = 1; } } if (pretty->options.print_trace_domain_field) { struct bt_value *domain_str; - domain_str = bt_trace_get_environment_field_value_by_name(trace_class, - "domain"); + domain_str = bt_trace_borrow_environment_field_value_by_name( + trace_class, "domain"); if (domain_str) { const char *str; @@ -429,15 +410,14 @@ enum bt_component_status print_event_header(struct pretty_component *pretty, == BT_VALUE_STATUS_OK) { g_string_append(pretty->string, str); } - bt_put(domain_str); dom_print = 1; } } if (pretty->options.print_trace_procname_field) { struct bt_value *procname_str; - procname_str = bt_trace_get_environment_field_value_by_name(trace_class, - "procname"); + procname_str = bt_trace_borrow_environment_field_value_by_name( + trace_class, "procname"); if (procname_str) { const char *str; @@ -453,15 +433,15 @@ enum bt_component_status print_event_header(struct pretty_component *pretty, == BT_VALUE_STATUS_OK) { g_string_append(pretty->string, str); } - bt_put(procname_str); + dom_print = 1; } } if (pretty->options.print_trace_vpid_field) { struct bt_value *vpid_value; - vpid_value = bt_trace_get_environment_field_value_by_name(trace_class, - "vpid"); + vpid_value = bt_trace_borrow_environment_field_value_by_name( + trace_class, "vpid"); if (vpid_value) { int64_t value; @@ -477,7 +457,7 @@ enum bt_component_status print_event_header(struct pretty_component *pretty, == BT_VALUE_STATUS_OK) { g_string_append_printf(pretty->string, "(%" PRId64 ")", value); } - bt_put(vpid_value); + dom_print = 1; } } @@ -564,10 +544,8 @@ enum bt_component_status print_event_header(struct pretty_component *pretty, } else { g_string_append(pretty->string, ", "); } + end: - bt_put(trace_class); - bt_put(stream_class); - bt_put(event_class); return ret; } @@ -580,35 +558,51 @@ enum bt_component_status print_integer(struct pretty_component *pretty, enum bt_integer_base base; enum bt_string_encoding encoding; int signedness; + struct bt_field_type *int_ft; union { uint64_t u; int64_t s; } v; bool rst_color = false; + enum bt_field_type_id ft_id; - field_type = bt_field_get_type(field); + field_type = bt_field_borrow_type(field); if (!field_type) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } - signedness = bt_ctf_field_type_integer_get_signed(field_type); + + ft_id = bt_field_get_type_id(field); + + switch (ft_id) { + case BT_FIELD_TYPE_ID_INTEGER: + int_ft = field_type; + break; + case BT_FIELD_TYPE_ID_ENUM: + int_ft = bt_field_type_enumeration_borrow_container_field_type( + field_type); + break; + default: + abort(); + } + + signedness = bt_field_type_integer_is_signed(int_ft); if (signedness < 0) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } if (!signedness) { - if (bt_field_unsigned_integer_get_value(field, &v.u) < 0) { - ret = BT_COMPONENT_STATUS_ERROR; - goto end; - } + ret = bt_field_integer_unsigned_get_value(field, &v.u); } else { - if (bt_field_signed_integer_get_value(field, &v.s) < 0) { - ret = BT_COMPONENT_STATUS_ERROR; - goto end; - } + ret = bt_field_integer_signed_get_value(field, &v.s); } - encoding = bt_field_type_integer_get_encoding(field_type); + if (ret < 0) { + ret = BT_COMPONENT_STATUS_ERROR; + goto end; + } + + encoding = bt_field_type_integer_get_encoding(int_ft); switch (encoding) { case BT_STRING_ENCODING_UTF8: case BT_STRING_ENCODING_ASCII: @@ -627,13 +621,13 @@ enum bt_component_status print_integer(struct pretty_component *pretty, rst_color = true; } - base = bt_field_type_integer_get_base(field_type); + base = bt_field_type_integer_get_base(int_ft); switch (base) { case BT_INTEGER_BASE_BINARY: { int bitnr, len; - len = bt_field_type_integer_get_size(field_type); + len = bt_field_type_integer_get_size(int_ft); if (len < 0) { ret = BT_COMPONENT_STATUS_ERROR; goto end; @@ -651,7 +645,7 @@ enum bt_component_status print_integer(struct pretty_component *pretty, if (signedness) { int len; - len = bt_field_type_integer_get_size(field_type); + len = bt_field_type_integer_get_size(int_ft); if (len < 0) { ret = BT_COMPONENT_STATUS_ERROR; goto end; @@ -681,7 +675,7 @@ enum bt_component_status print_integer(struct pretty_component *pretty, { int len; - len = bt_field_type_integer_get_size(field_type); + len = bt_field_type_integer_get_size(int_ft); if (len < 0) { ret = BT_COMPONENT_STATUS_ERROR; goto end; @@ -704,7 +698,6 @@ end: if (rst_color) { g_string_append(pretty->string, COLOR_RST); } - bt_put(field_type); return ret; } @@ -781,54 +774,28 @@ enum bt_component_status print_enum(struct pretty_component *pretty, struct bt_field *field) { enum bt_component_status ret = BT_COMPONENT_STATUS_OK; - struct bt_field *container_field = NULL; struct bt_field_type *enumeration_field_type = NULL; struct bt_field_type *container_field_type = NULL; struct bt_field_type_enumeration_mapping_iterator *iter = NULL; int nr_mappings = 0; - int is_signed; - enumeration_field_type = bt_field_get_type(field); + enumeration_field_type = bt_field_borrow_type(field); if (!enumeration_field_type) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } - container_field = bt_field_enumeration_get_container(field); - if (!container_field) { - ret = BT_COMPONENT_STATUS_ERROR; - goto end; - } - container_field_type = bt_field_get_type(container_field); + container_field_type = + bt_field_type_enumeration_borrow_container_field_type( + enumeration_field_type); if (!container_field_type) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } - is_signed = bt_ctf_field_type_integer_get_signed(container_field_type); - if (is_signed < 0) { + iter = bt_field_enumeration_get_mappings(field); + if (!iter) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } - if (is_signed) { - int64_t value; - - if (bt_field_signed_integer_get_value(container_field, - &value)) { - ret = BT_COMPONENT_STATUS_ERROR; - goto end; - } - iter = bt_field_type_enumeration_find_mappings_by_signed_value( - enumeration_field_type, value); - } else { - uint64_t value; - - if (bt_field_unsigned_integer_get_value(container_field, - &value)) { - ret = BT_COMPONENT_STATUS_ERROR; - goto end; - } - iter = bt_field_type_enumeration_find_mappings_by_unsigned_value( - enumeration_field_type, value); - } g_string_append(pretty->string, "( "); ret = bt_field_type_enumeration_mapping_iterator_next(iter); if (ret) { @@ -844,7 +811,7 @@ enum bt_component_status print_enum(struct pretty_component *pretty, for (;;) { const char *mapping_name; - if (bt_field_type_enumeration_mapping_iterator_get_signed( + if (bt_field_type_enumeration_mapping_iterator_signed_get( iter, &mapping_name, NULL, NULL) < 0) { ret = BT_COMPONENT_STATUS_ERROR; goto end; @@ -864,16 +831,13 @@ enum bt_component_status print_enum(struct pretty_component *pretty, } skip_loop: g_string_append(pretty->string, " : container = "); - ret = print_integer(pretty, container_field); + ret = print_integer(pretty, field); if (ret != BT_COMPONENT_STATUS_OK) { goto end; } g_string_append(pretty->string, " )"); end: bt_put(iter); - bt_put(container_field_type); - bt_put(container_field); - bt_put(enumeration_field_type); return ret; } @@ -908,12 +872,12 @@ enum bt_component_status print_struct_field(struct pretty_component *pretty, struct bt_field *field = NULL; struct bt_field_type *field_type = NULL;; - field = bt_field_structure_get_field_by_index(_struct, i); + field = bt_field_structure_borrow_field_by_index(_struct, i); if (!field) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } - if (bt_field_type_structure_get_field_by_index(struct_type, + if (bt_field_type_structure_borrow_field_by_index(struct_type, &field_name, &field_type, i) < 0) { ret = BT_COMPONENT_STATUS_ERROR; goto end; @@ -935,9 +899,8 @@ enum bt_component_status print_struct_field(struct pretty_component *pretty, } ret = print_field(pretty, field, print_names, NULL, 0); *nr_printed_fields += 1; + end: - bt_put(field_type); - bt_put(field); return ret; } @@ -950,7 +913,7 @@ enum bt_component_status print_struct(struct pretty_component *pretty, struct bt_field_type *struct_type = NULL; int nr_fields, i, nr_printed_fields; - struct_type = bt_field_get_type(_struct); + struct_type = bt_field_borrow_type(_struct); if (!struct_type) { ret = BT_COMPONENT_STATUS_ERROR; goto end; @@ -973,8 +936,8 @@ enum bt_component_status print_struct(struct pretty_component *pretty, } pretty->depth--; g_string_append(pretty->string, " }"); + end: - bt_put(struct_type); return ret; } @@ -996,14 +959,14 @@ enum bt_component_status print_array_field(struct pretty_component *pretty, g_string_append_printf(pretty->string, "[%" PRIu64 "] = ", i); } } - field = bt_field_array_get_field(array, i); + field = bt_field_array_borrow_field(array, i); if (!field) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } ret = print_field(pretty, field, print_names, NULL, 0); + end: - bt_put(field); return ret; } @@ -1018,12 +981,12 @@ enum bt_component_status print_array(struct pretty_component *pretty, uint64_t i; bool is_string = false; - array_type = bt_field_get_type(array); + array_type = bt_field_borrow_type(array); if (!array_type) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } - field_type = bt_field_type_array_get_element_type(array_type); + field_type = bt_field_type_array_borrow_element_field_type(array_type); if (!field_type) { ret = BT_COMPONENT_STATUS_ERROR; goto end; @@ -1083,9 +1046,8 @@ enum bt_component_status print_array(struct pretty_component *pretty, } else { g_string_append(pretty->string, " ]"); } + end: - bt_put(field_type); - bt_put(array_type); return ret; } @@ -1107,14 +1069,14 @@ enum bt_component_status print_sequence_field(struct pretty_component *pretty, g_string_append_printf(pretty->string, "[%" PRIu64 "] = ", i); } } - field = bt_field_sequence_get_field(seq, i); + field = bt_field_sequence_borrow_field(seq, i); if (!field) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } ret = print_field(pretty, field, print_names, NULL, 0); + end: - bt_put(field); return ret; } @@ -1124,27 +1086,22 @@ enum bt_component_status print_sequence(struct pretty_component *pretty, { enum bt_component_status ret = BT_COMPONENT_STATUS_OK; struct bt_field_type *seq_type = NULL, *field_type = NULL; - struct bt_field *length_field = NULL; enum bt_field_type_id type_id; - uint64_t len; + int64_t len; uint64_t i; bool is_string = false; - seq_type = bt_field_get_type(seq); + seq_type = bt_field_borrow_type(seq); if (!seq_type) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } - length_field = bt_field_sequence_get_length(seq); - if (!length_field) { - ret = BT_COMPONENT_STATUS_ERROR; - goto end; - } - if (bt_field_unsigned_integer_get_value(length_field, &len) < 0) { + len = bt_field_sequence_get_length(seq); + if (len < 0) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } - field_type = bt_field_type_sequence_get_element_type(seq_type); + field_type = bt_field_type_sequence_borrow_element_field_type(seq_type); if (!field_type) { ret = BT_COMPONENT_STATUS_ERROR; goto end; @@ -1202,10 +1159,8 @@ enum bt_component_status print_sequence(struct pretty_component *pretty, } else { g_string_append(pretty->string, " ]"); } + end: - bt_put(length_field); - bt_put(field_type); - bt_put(seq_type); return ret; } @@ -1216,7 +1171,7 @@ enum bt_component_status print_variant(struct pretty_component *pretty, enum bt_component_status ret = BT_COMPONENT_STATUS_OK; struct bt_field *field = NULL; - field = bt_field_variant_get_current_field(variant); + field = bt_field_variant_borrow_current_field(variant); if (!field) { ret = BT_COMPONENT_STATUS_ERROR; goto end; @@ -1224,37 +1179,67 @@ enum bt_component_status print_variant(struct pretty_component *pretty, g_string_append(pretty->string, "{ "); pretty->depth++; if (print_names) { - int iter_ret; - struct bt_field *tag_field = NULL; + int iret; + struct bt_field_type *var_ft; + struct bt_field_type *tag_ft; + struct bt_field_type *container_ft; const char *tag_choice; + bt_bool is_signed; struct bt_field_type_enumeration_mapping_iterator *iter; - tag_field = bt_field_variant_get_tag(variant); - if (!tag_field) { + var_ft = bt_field_borrow_type(variant); + tag_ft = bt_field_type_variant_borrow_tag_field_type( + var_ft); + container_ft = + bt_field_type_enumeration_borrow_container_field_type( + tag_ft); + is_signed = bt_field_type_integer_is_signed(container_ft); + + if (is_signed) { + int64_t tag; + + iret = bt_field_variant_get_tag_signed(variant, &tag); + if (iret) { + ret = BT_COMPONENT_STATUS_ERROR; + goto end; + } + + iter = bt_field_type_enumeration_signed_find_mappings_by_value( + tag_ft, tag); + } else { + uint64_t tag; + + iret = bt_field_variant_get_tag_unsigned(variant, &tag); + if (iret) { + ret = BT_COMPONENT_STATUS_ERROR; + goto end; + } + + iter = bt_field_type_enumeration_unsigned_find_mappings_by_value( + tag_ft, tag); + } + + if (!iter) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } - iter = bt_field_enumeration_get_mappings(tag_field); - iter_ret = bt_field_type_enumeration_mapping_iterator_next( + iret = bt_field_type_enumeration_mapping_iterator_next( iter); if (!iter || ret) { - bt_put(tag_field); ret = BT_COMPONENT_STATUS_ERROR; goto end; } - iter_ret = - bt_field_type_enumeration_mapping_iterator_get_signed( + iret = + bt_field_type_enumeration_mapping_iterator_signed_get( iter, &tag_choice, NULL, NULL); - if (iter_ret) { + if (iret) { bt_put(iter); - bt_put(tag_field); ret = BT_COMPONENT_STATUS_ERROR; goto end; } print_field_name_equal(pretty, tag_choice); - bt_put(tag_field); bt_put(iter); } ret = print_field(pretty, field, print_names, NULL, 0); @@ -1263,8 +1248,8 @@ enum bt_component_status print_variant(struct pretty_component *pretty, } pretty->depth--; g_string_append(pretty->string, " }"); + end: - bt_put(field); return ret; } @@ -1277,9 +1262,9 @@ enum bt_component_status print_field(struct pretty_component *pretty, type_id = bt_field_get_type_id(field); switch (type_id) { - case CTF_TYPE_INTEGER: + case BT_CTF_FIELD_TYPE_ID_INTEGER: return print_integer(pretty, field); - case CTF_TYPE_FLOAT: + case BT_CTF_FIELD_TYPE_ID_FLOAT: { double v; @@ -1295,9 +1280,9 @@ enum bt_component_status print_field(struct pretty_component *pretty, } return BT_COMPONENT_STATUS_OK; } - case CTF_TYPE_ENUM: + case BT_CTF_FIELD_TYPE_ID_ENUM: return print_enum(pretty, field); - case CTF_TYPE_STRING: + case BT_CTF_FIELD_TYPE_ID_STRING: { const char *str; @@ -1315,14 +1300,14 @@ enum bt_component_status print_field(struct pretty_component *pretty, } return BT_COMPONENT_STATUS_OK; } - case CTF_TYPE_STRUCT: + case BT_CTF_FIELD_TYPE_ID_STRUCT: return print_struct(pretty, field, print_names, filter_fields, filter_array_len); - case CTF_TYPE_VARIANT: + case BT_CTF_FIELD_TYPE_ID_VARIANT: return print_variant(pretty, field, print_names); - case CTF_TYPE_ARRAY: + case BT_CTF_FIELD_TYPE_ID_ARRAY: return print_array(pretty, field, print_names); - case CTF_TYPE_SEQUENCE: + case BT_CTF_FIELD_TYPE_ID_SEQUENCE: return print_sequence(pretty, field, print_names); default: // TODO: log instead @@ -1339,12 +1324,12 @@ enum bt_component_status print_stream_packet_context(struct pretty_component *pr struct bt_packet *packet = NULL; struct bt_field *main_field = NULL; - packet = bt_event_get_packet(event); + packet = bt_event_borrow_packet(event); if (!packet) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } - main_field = bt_packet_get_context(packet); + main_field = bt_packet_borrow_context(packet); if (!main_field) { goto end; } @@ -1359,9 +1344,8 @@ enum bt_component_status print_stream_packet_context(struct pretty_component *pr pretty->options.print_context_field_names, stream_packet_context_quarks, STREAM_PACKET_CONTEXT_QUARKS_LEN); + end: - bt_put(main_field); - bt_put(packet); return ret; } @@ -1372,7 +1356,7 @@ enum bt_component_status print_event_header_raw(struct pretty_component *pretty, enum bt_component_status ret = BT_COMPONENT_STATUS_OK; struct bt_field *main_field = NULL; - main_field = bt_event_get_header(event); + main_field = bt_event_borrow_header(event); if (!main_field) { goto end; } @@ -1385,8 +1369,8 @@ enum bt_component_status print_event_header_raw(struct pretty_component *pretty, } ret = print_field(pretty, main_field, pretty->options.print_header_field_names, NULL, 0); + end: - bt_put(main_field); return ret; } @@ -1397,7 +1381,7 @@ enum bt_component_status print_stream_event_context(struct pretty_component *pre enum bt_component_status ret = BT_COMPONENT_STATUS_OK; struct bt_field *main_field = NULL; - main_field = bt_event_get_stream_event_context(event); + main_field = bt_event_borrow_stream_event_context(event); if (!main_field) { goto end; } @@ -1410,8 +1394,8 @@ enum bt_component_status print_stream_event_context(struct pretty_component *pre } ret = print_field(pretty, main_field, pretty->options.print_context_field_names, NULL, 0); + end: - bt_put(main_field); return ret; } @@ -1422,7 +1406,7 @@ enum bt_component_status print_event_context(struct pretty_component *pretty, enum bt_component_status ret = BT_COMPONENT_STATUS_OK; struct bt_field *main_field = NULL; - main_field = bt_event_get_event_context(event); + main_field = bt_event_borrow_context(event); if (!main_field) { goto end; } @@ -1435,8 +1419,8 @@ enum bt_component_status print_event_context(struct pretty_component *pretty, } ret = print_field(pretty, main_field, pretty->options.print_context_field_names, NULL, 0); + end: - bt_put(main_field); return ret; } @@ -1447,7 +1431,7 @@ enum bt_component_status print_event_payload(struct pretty_component *pretty, enum bt_component_status ret = BT_COMPONENT_STATUS_OK; struct bt_field *main_field = NULL; - main_field = bt_event_get_event_payload(event); + main_field = bt_event_borrow_payload(event); if (!main_field) { goto end; } @@ -1460,13 +1444,13 @@ enum bt_component_status print_event_payload(struct pretty_component *pretty, } ret = print_field(pretty, main_field, pretty->options.print_payload_field_names, NULL, 0); + end: - bt_put(main_field); return ret; } static -int flush_buf(struct pretty_component *pretty) +int flush_buf(FILE *stream, struct pretty_component *pretty) { int ret = 0; @@ -1474,7 +1458,7 @@ int flush_buf(struct pretty_component *pretty) goto end; } - if (fwrite(pretty->string->str, pretty->string->len, 1, pretty->out) != 1) { + if (fwrite(pretty->string->str, pretty->string->len, 1, stream) != 1) { ret = -1; } @@ -1488,15 +1472,12 @@ enum bt_component_status pretty_print_event(struct pretty_component *pretty, { enum bt_component_status ret; struct bt_event *event = - bt_notification_event_get_event(event_notif); - struct bt_clock_class_priority_map *cc_prio_map = - bt_notification_event_get_clock_class_priority_map(event_notif); + bt_notification_event_borrow_event(event_notif); BT_ASSERT(event); - BT_ASSERT(cc_prio_map); pretty->start_line = true; g_string_assign(pretty->string, ""); - ret = print_event_header(pretty, event, cc_prio_map); + ret = print_event_header(pretty, event); if (ret != BT_COMPONENT_STATUS_OK) { goto end; } @@ -1529,21 +1510,19 @@ enum bt_component_status pretty_print_event(struct pretty_component *pretty, } g_string_append_c(pretty->string, '\n'); - if (flush_buf(pretty)) { + if (flush_buf(pretty->out, pretty)) { ret = BT_COMPONENT_STATUS_ERROR; goto end; } end: - bt_put(event); - bt_put(cc_prio_map); return ret; } -BT_HIDDEN -enum bt_component_status pretty_print_discarded_elements( - struct pretty_component *pretty, - struct bt_notification *notif) +static +enum bt_component_status print_discarded_elements_msg( + struct pretty_component *pretty, struct bt_packet *packet, + uint64_t count, const char *elem_type) { enum bt_component_status ret = BT_COMPONENT_STATUS_OK; struct bt_stream *stream = NULL; @@ -1554,39 +1533,25 @@ enum bt_component_status pretty_print_discarded_elements( const unsigned char *trace_uuid; int64_t stream_class_id; int64_t stream_id; - bool is_discarded_events; - int64_t count; - struct bt_clock_value *clock_value = NULL; + struct bt_clock_value *begin_clock_value = NULL; + struct bt_clock_value *end_clock_value = NULL; /* Stream name */ - switch (bt_notification_get_type(notif)) { - case BT_NOTIFICATION_TYPE_DISCARDED_EVENTS: - stream = bt_notification_discarded_events_get_stream(notif); - count = bt_notification_discarded_events_get_count(notif); - is_discarded_events = true; - break; - case BT_NOTIFICATION_TYPE_DISCARDED_PACKETS: - stream = bt_notification_discarded_packets_get_stream(notif); - count = bt_notification_discarded_packets_get_count(notif); - is_discarded_events = false; - break; - default: - abort(); - } - + BT_ASSERT(packet); + stream = bt_packet_borrow_stream(packet); BT_ASSERT(stream); stream_name = bt_stream_get_name(stream); /* Stream class ID */ - stream_class = bt_stream_get_class(stream); + stream_class = bt_stream_borrow_class(stream); BT_ASSERT(stream_class); stream_class_id = bt_stream_class_get_id(stream_class); /* Stream ID */ stream_id = bt_stream_get_id(stream); - /* Trace path */ - trace = bt_stream_class_get_trace(stream_class); + /* Trace name */ + trace = bt_stream_class_borrow_trace(stream_class); BT_ASSERT(trace); trace_name = bt_trace_get_name(trace); if (!trace_name) { @@ -1596,36 +1561,36 @@ enum bt_component_status pretty_print_discarded_elements( /* Trace UUID */ trace_uuid = bt_trace_get_uuid(trace); - /* - * Print to standard error stream to remain backward compatible - * with Babeltrace 1. - */ - fprintf(stderr, - "%s%sWARNING%s%s: Tracer discarded %" PRId64 " %s%s between [", + /* Beginning and end times */ + (void) bt_packet_borrow_previous_packet_default_end_clock_value( + packet, &begin_clock_value); + (void) bt_packet_borrow_default_end_clock_value(packet, + &end_clock_value); + + /* Format message */ + g_string_assign(pretty->string, ""); + g_string_append_printf(pretty->string, + "%s%sWARNING%s%s: Tracer discarded %" PRId64 " %s%s ", bt_common_color_fg_yellow(), bt_common_color_bold(), bt_common_color_reset(), bt_common_color_fg_yellow(), - count, is_discarded_events ? "event" : "packet", - count == 1 ? "" : "s"); - g_string_assign(pretty->string, ""); - clock_value = is_discarded_events ? - bt_notification_discarded_events_get_begin_clock_value(notif) : - bt_notification_discarded_packets_get_begin_clock_value(notif); - print_timestamp_wall(pretty, clock_value); - BT_PUT(clock_value); - fprintf(stderr, "%s] and [", pretty->string->str); - g_string_assign(pretty->string, ""); - clock_value = is_discarded_events ? - bt_notification_discarded_events_get_end_clock_value(notif) : - bt_notification_discarded_packets_get_end_clock_value(notif); - print_timestamp_wall(pretty, clock_value); - BT_PUT(clock_value); - fprintf(stderr, "%s] in trace \"%s\" ", - pretty->string->str, trace_name); + count, elem_type, count == 1 ? "" : "s"); + + if (begin_clock_value && end_clock_value) { + g_string_append(pretty->string, "between ["); + print_timestamp_wall(pretty, begin_clock_value); + g_string_append(pretty->string, "] and ["); + print_timestamp_wall(pretty, end_clock_value); + g_string_append(pretty->string, "]"); + } else { + g_string_append(pretty->string, "(unknown time range)"); + } + + g_string_append_printf(pretty->string, " in trace \"%s\" ", trace_name); if (trace_uuid) { - fprintf(stderr, + g_string_append_printf(pretty->string, "(UUID: %02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x) ", trace_uuid[0], trace_uuid[1], @@ -1644,22 +1609,63 @@ enum bt_component_status pretty_print_discarded_elements( trace_uuid[14], trace_uuid[15]); } else { - fprintf(stderr, "(no UUID) "); + g_string_append(pretty->string, "(no UUID) "); } - fprintf(stderr, "within stream \"%s\" (stream class ID: %" PRId64 ", ", + g_string_append_printf(pretty->string, + "within stream \"%s\" (stream class ID: %" PRId64 ", ", stream_name, stream_class_id); if (stream_id >= 0) { - fprintf(stderr, "stream ID: %" PRId64, stream_id); + g_string_append_printf(pretty->string, + "stream ID: %" PRId64, stream_id); } else { - fprintf(stderr, "no stream ID"); + g_string_append(pretty->string, "no stream ID"); + } + + g_string_append_printf(pretty->string, ").%s\n", + bt_common_color_reset()); + + /* + * Print to standard error stream to remain backward compatible + * with Babeltrace 1. + */ + if (flush_buf(stderr, pretty)) { + ret = BT_COMPONENT_STATUS_ERROR; } - fprintf(stderr, ").%s\n", bt_common_color_reset()); - bt_put(stream); - bt_put(stream_class); - bt_put(trace); - bt_put(clock_value); return ret; } + +BT_HIDDEN +enum bt_component_status pretty_print_packet(struct pretty_component *pretty, + struct bt_notification *packet_beginning_notif) +{ + struct bt_packet *packet = bt_notification_packet_begin_borrow_packet( + packet_beginning_notif); + uint64_t count; + enum bt_component_status status = BT_COMPONENT_STATUS_OK; + + if (bt_packet_get_discarded_event_count(packet, &count) == + BT_PACKET_PROPERTY_AVAILABILITY_AVAILABLE && + count > 0) { + status = print_discarded_elements_msg(pretty, packet, + count, "event"); + if (status != BT_COMPONENT_STATUS_OK) { + goto end; + } + } + + if (bt_packet_get_discarded_packet_count(packet, &count) == + BT_PACKET_PROPERTY_AVAILABILITY_AVAILABLE && + count > 0) { + status = print_discarded_elements_msg(pretty, packet, + count, "packet"); + if (status != BT_COMPONENT_STATUS_OK) { + goto end; + } + } + +end: + return status; +}