X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Ftext%2Fpretty%2Fprint.c;h=efcf2b885d3d6523f52218e3e86fec0226f12de1;hb=0cbc2c3316814e4b4bf3fd3ba3b361b165949e95;hp=cdbbc1b66084804ed5c8411ab56a6e2b8aa5522f;hpb=605e1019783967f33d86967e7c98dd52cbd69a4c;p=babeltrace.git diff --git a/plugins/text/pretty/print.c b/plugins/text/pretty/print.c index cdbbc1b6..efcf2b88 100644 --- a/plugins/text/pretty/print.c +++ b/plugins/text/pretty/print.c @@ -78,30 +78,25 @@ void print_field_name_equal(struct pretty_component *pretty, const char *name) static void print_timestamp_cycles(struct pretty_component *pretty, - const bt_event *event) + const bt_clock_snapshot *clock_snapshot, bool update_last) { - const bt_clock_snapshot *clock_snapshot; uint64_t cycles; - enum bt_clock_snapshot_status cv_status; - - cv_status = bt_event_borrow_default_clock_snapshot_const(event, &clock_snapshot); - if (cv_status != BT_CLOCK_SNAPSHOT_STATUS_KNOWN || !clock_snapshot) { - g_string_append(pretty->string, "????????????????????"); - return; - } cycles = bt_clock_snapshot_get_value(clock_snapshot); g_string_append_printf(pretty->string, "%020" PRIu64, cycles); - if (pretty->last_cycles_timestamp != -1ULL) { - pretty->delta_cycles = cycles - pretty->last_cycles_timestamp; + if (update_last) { + if (pretty->last_cycles_timestamp != -1ULL) { + pretty->delta_cycles = cycles - pretty->last_cycles_timestamp; + } + + pretty->last_cycles_timestamp = cycles; } - pretty->last_cycles_timestamp = cycles; } static void print_timestamp_wall(struct pretty_component *pretty, - const bt_clock_snapshot *clock_snapshot) + const bt_clock_snapshot *clock_snapshot, bool update_last) { int ret; int64_t ts_nsec = 0; /* add configurable offset */ @@ -121,11 +116,14 @@ void print_timestamp_wall(struct pretty_component *pretty, return; } - if (pretty->last_real_timestamp != -1ULL) { - pretty->delta_real_timestamp = ts_nsec - pretty->last_real_timestamp; + if (update_last) { + if (pretty->last_real_timestamp != -1ULL) { + pretty->delta_real_timestamp = ts_nsec - pretty->last_real_timestamp; + } + + pretty->last_real_timestamp = ts_nsec; } - pretty->last_real_timestamp = ts_nsec; ts_sec += ts_nsec / NSEC_PER_SEC; ts_nsec = ts_nsec % NSEC_PER_SEC; @@ -216,33 +214,19 @@ end: static int print_event_timestamp(struct pretty_component *pretty, - const bt_event *event, bool *start_line) + const bt_message *event_msg, bool *start_line) { bool print_names = pretty->options.print_header_field_names; int ret = 0; - const bt_stream *stream = NULL; - const bt_stream_class *stream_class = NULL; const bt_clock_snapshot *clock_snapshot = NULL; - enum bt_clock_snapshot_status cv_status; - stream = bt_event_borrow_stream_const(event); - if (!stream) { - ret = -1; + if (!bt_message_event_borrow_stream_class_default_clock_class_const( + event_msg)) { + /* No default clock class: skip the timestamp without an error */ goto end; } - stream_class = bt_stream_borrow_class_const(stream); - if (!stream_class) { - ret = -1; - goto end; - } - - cv_status = bt_event_borrow_default_clock_snapshot_const(event, - &clock_snapshot); - if (cv_status != BT_CLOCK_SNAPSHOT_STATUS_KNOWN || !clock_snapshot) { - /* No default clock value: skip the timestamp without an error */ - goto end; - } + clock_snapshot = bt_message_event_borrow_default_clock_snapshot_const(event_msg); if (print_names) { print_name_equal(pretty, "timestamp"); @@ -253,12 +237,9 @@ int print_event_timestamp(struct pretty_component *pretty, g_string_append(pretty->string, COLOR_TIMESTAMP); } if (pretty->options.print_timestamp_cycles) { - print_timestamp_cycles(pretty, event); + print_timestamp_cycles(pretty, clock_snapshot, true); } else { - clock_snapshot = NULL; - cv_status = bt_event_borrow_default_clock_snapshot_const(event, - &clock_snapshot); - print_timestamp_wall(pretty, clock_snapshot); + print_timestamp_wall(pretty, clock_snapshot, true); } if (pretty->use_colors) { g_string_append(pretty->string, COLOR_RST); @@ -277,7 +258,7 @@ int print_event_timestamp(struct pretty_component *pretty, if (pretty->options.print_timestamp_cycles) { if (pretty->delta_cycles == -1ULL) { g_string_append(pretty->string, - "+??????????\?\?) "); /* Not a trigraph. */ + "+??????????\?\?"); /* Not a trigraph. */ } else { g_string_append_printf(pretty->string, "+%012" PRIu64, pretty->delta_cycles); @@ -308,7 +289,7 @@ end: static int print_event_header(struct pretty_component *pretty, - const bt_event *event) + const bt_message *event_msg) { bool print_names = pretty->options.print_header_field_names; int ret = 0; @@ -318,8 +299,9 @@ int print_event_header(struct pretty_component *pretty, const bt_packet *packet = NULL; const bt_stream *stream = NULL; const bt_trace *trace = NULL; + const bt_event *event = bt_message_event_borrow_event_const(event_msg); int dom_print = 0; - enum bt_property_availability prop_avail; + bt_property_availability prop_avail; event_class = bt_event_borrow_class_const(event); stream_class = bt_event_class_borrow_stream_class_const(event_class); @@ -327,7 +309,7 @@ int print_event_header(struct pretty_component *pretty, packet = bt_event_borrow_packet_const(event); stream = bt_packet_borrow_stream_const(packet); trace = bt_stream_borrow_trace_const(stream); - ret = print_event_timestamp(pretty, event, &pretty->start_line); + ret = print_event_timestamp(pretty, event_msg, &pretty->start_line); if (ret) { goto end; } @@ -345,8 +327,8 @@ int print_event_header(struct pretty_component *pretty, g_string_append(pretty->string, name); - if (!print_names) { - g_string_append(pretty->string, " "); + if (print_names) { + g_string_append(pretty->string, ", "); } } } @@ -427,7 +409,7 @@ int print_event_header(struct pretty_component *pretty, } else if (dom_print) { g_string_append(pretty->string, ":"); } - value = bt_value_integer_get(vpid_value); + value = bt_value_signed_integer_get(vpid_value); g_string_append_printf(pretty->string, "(%" PRId64 ")", value); dom_print = 1; @@ -451,7 +433,7 @@ int print_event_header(struct pretty_component *pretty, [ BT_EVENT_CLASS_LOG_LEVEL_DEBUG_LINE ] = "TRACE_DEBUG_LINE", [ BT_EVENT_CLASS_LOG_LEVEL_DEBUG ] = "TRACE_DEBUG", }; - enum bt_event_class_log_level log_level; + bt_event_class_log_level log_level; const char *log_level_str = NULL; prop_avail = bt_event_class_get_log_level(event_class, @@ -525,14 +507,14 @@ int print_integer(struct pretty_component *pretty, const bt_field *field) { int ret = 0; - enum bt_field_class_integer_preferred_display_base base; + bt_field_class_integer_preferred_display_base base; const bt_field_class *int_fc; union { uint64_t u; int64_t s; } v; bool rst_color = false; - enum bt_field_class_type ft_type; + bt_field_class_type ft_type; int_fc = bt_field_borrow_class_const(field); BT_ASSERT(int_fc); @@ -557,10 +539,10 @@ int print_integer(struct pretty_component *pretty, len = bt_field_class_integer_get_field_value_range(int_fc); g_string_append(pretty->string, "0b"); - v.u = _bt_piecewise_lshift(v.u, 64 - len); + _bt_safe_lshift(v.u, 64 - len); for (bitnr = 0; bitnr < len; bitnr++) { g_string_append_printf(pretty->string, "%u", (v.u & (1ULL << 63)) ? 1 : 0); - v.u = _bt_piecewise_lshift(v.u, 1); + _bt_safe_lshift(v.u, 1); } break; } @@ -786,7 +768,7 @@ int print_struct_field(struct pretty_component *pretty, int ret = 0; const char *field_name; const bt_field *field = NULL; - const bt_field_class *field_class = NULL;; + const bt_field_class_structure_member *member; field = bt_field_structure_borrow_member_field_by_index_const(_struct, i); if (!field) { @@ -794,8 +776,9 @@ int print_struct_field(struct pretty_component *pretty, goto end; } - bt_field_class_structure_borrow_member_by_index_const(struct_class, i, - &field_name, &field_class); + member = bt_field_class_structure_borrow_member_by_index_const( + struct_class, i); + field_name = bt_field_class_structure_member_get_name(member); if (filter_fields && !filter_field_name(pretty, field_name, filter_fields, filter_array_len)) { @@ -832,11 +815,9 @@ int print_struct(struct pretty_component *pretty, ret = -1; goto end; } + nr_fields = bt_field_class_structure_get_member_count(struct_class); - if (nr_fields < 0) { - ret = -1; - goto end; - } + g_string_append(pretty->string, "{"); pretty->depth++; nr_printed_fields = 0; @@ -934,11 +915,6 @@ int print_sequence(struct pretty_component *pretty, uint64_t i; len = bt_field_array_get_length(seq); - if (len < 0) { - ret = -1; - goto end; - } - g_string_append(pretty->string, "["); pretty->depth++; @@ -986,7 +962,7 @@ int print_field(struct pretty_component *pretty, const bt_field *field, bool print_names, GQuark *filter_fields, int filter_array_len) { - enum bt_field_class_type class_id; + bt_field_class_type class_id; class_id = bt_field_get_class_type(field); switch (class_id) { @@ -1077,31 +1053,6 @@ end: return ret; } -static -int print_event_header_raw(struct pretty_component *pretty, - const bt_event *event) -{ - int ret = 0; - const bt_field *main_field = NULL; - - main_field = bt_event_borrow_header_field_const(event); - if (!main_field) { - goto end; - } - if (!pretty->start_line) { - g_string_append(pretty->string, ", "); - } - pretty->start_line = false; - if (pretty->options.print_scope_field_names) { - print_name_equal(pretty, "stream.event.header"); - } - ret = print_field(pretty, main_field, - pretty->options.print_header_field_names, NULL, 0); - -end: - return ret; -} - static int print_stream_event_context(struct pretty_component *pretty, const bt_event *event) @@ -1205,7 +1156,7 @@ int pretty_print_event(struct pretty_component *pretty, BT_ASSERT(event); pretty->start_line = true; g_string_assign(pretty->string, ""); - ret = print_event_header(pretty, event); + ret = print_event_header(pretty, event_msg); if (ret != 0) { goto end; } @@ -1215,13 +1166,6 @@ int pretty_print_event(struct pretty_component *pretty, goto end; } - if (pretty->options.verbose) { - ret = print_event_header_raw(pretty, event); - if (ret != 0) { - goto end; - } - } - ret = print_stream_event_context(pretty, event); if (ret != 0) { goto end; @@ -1248,28 +1192,27 @@ end: } static -int print_discarded_elements_msg( - struct pretty_component *pretty, const bt_packet *packet, +int print_discarded_elements_msg(struct pretty_component *pretty, + const bt_stream *stream, + const bt_clock_snapshot *begin_clock_snapshot, + const bt_clock_snapshot *end_clock_snapshot, uint64_t count, const char *elem_type) { -#if 0 int ret = 0; - const bt_stream *stream = NULL; const bt_stream_class *stream_class = NULL; const bt_trace *trace = NULL; const char *stream_name; const char *trace_name; - const unsigned char *trace_uuid; + bt_uuid trace_uuid; int64_t stream_class_id; int64_t stream_id; - bt_clock_snapshot *begin_clock_snapshot = NULL; - bt_clock_snapshot *end_clock_snapshot = NULL; + const char *init_msg; /* Stream name */ - BT_ASSERT(packet); - stream = bt_packet_borrow_stream_const(packet); - BT_ASSERT(stream); stream_name = bt_stream_get_name(stream); + if (!stream_name) { + stream_name = "(unknown)"; + } /* Stream class ID */ stream_class = bt_stream_borrow_class_const(stream); @@ -1280,7 +1223,7 @@ int print_discarded_elements_msg( stream_id = bt_stream_get_id(stream); /* Trace name */ - trace = bt_stream_class_borrow_trace_const(stream_class); + trace = bt_stream_borrow_trace_const(stream); BT_ASSERT(trace); trace_name = bt_trace_get_name(trace); if (!trace_name) { @@ -1288,29 +1231,38 @@ int print_discarded_elements_msg( } /* Trace UUID */ - trace_uuid = bt_trace_get_uuid(trace); - - /* Beginning and end times */ - (void) bt_packet_borrow_previous_packet_default_end_clock_snapshot_const( - packet, &begin_clock_snapshot); - (void) bt_packet_borrow_default_end_clock_snapshot_const(packet, - &end_clock_snapshot); + trace_uuid = bt_trace_class_get_uuid( + bt_trace_borrow_class_const(trace)); /* Format message */ g_string_assign(pretty->string, ""); + + if (count == UINT64_C(-1)) { + init_msg = "Tracer may have discarded"; + } else { + init_msg = "Tracer discarded"; + } + g_string_append_printf(pretty->string, - "%s%sWARNING%s%s: Tracer discarded %" PRId64 " %s%s ", + "%s%sWARNING%s%s: %s ", bt_common_color_fg_yellow(), bt_common_color_bold(), bt_common_color_reset(), - bt_common_color_fg_yellow(), - count, elem_type, count == 1 ? "" : "s"); + bt_common_color_fg_yellow(), init_msg); + + if (count == UINT64_C(-1)) { + g_string_append_printf(pretty->string, "%ss", elem_type); + } else { + g_string_append_printf(pretty->string, + "%" PRIu64 " %s%s", count, elem_type, + count == 1 ? "" : "s"); + } if (begin_clock_snapshot && end_clock_snapshot) { - g_string_append(pretty->string, "between ["); - print_timestamp_wall(pretty, begin_clock_snapshot); + g_string_append(pretty->string, " between ["); + print_timestamp_wall(pretty, begin_clock_snapshot, false); g_string_append(pretty->string, "] and ["); - print_timestamp_wall(pretty, end_clock_snapshot); + print_timestamp_wall(pretty, end_clock_snapshot, false); g_string_append(pretty->string, "]"); } else { g_string_append(pretty->string, "(unknown time range)"); @@ -1342,12 +1294,12 @@ int print_discarded_elements_msg( } g_string_append_printf(pretty->string, - "within stream \"%s\" (stream class ID: %" PRId64 ", ", + "within stream \"%s\" (stream class ID: %" PRIu64 ", ", stream_name, stream_class_id); if (stream_id >= 0) { g_string_append_printf(pretty->string, - "stream ID: %" PRId64, stream_id); + "stream ID: %" PRIu64, stream_id); } else { g_string_append(pretty->string, "no stream ID"); } @@ -1364,42 +1316,67 @@ int print_discarded_elements_msg( } return ret; -#endif - return 0; } BT_HIDDEN -int pretty_print_packet(struct pretty_component *pretty, - const bt_message *packet_beginning_msg) +int pretty_print_discarded_items(struct pretty_component *pretty, + const bt_message *msg) { -#if 0 - const bt_packet *packet = bt_message_packet_beginning_borrow_packet_const( - packet_beginning_msg); - uint64_t count; - int status = 0; - - 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 != 0) { - goto end; + const bt_clock_snapshot *begin = NULL; + const bt_clock_snapshot *end = NULL; + const bt_stream *stream; + const bt_stream_class *stream_class; + uint64_t count = UINT64_C(-1); + const char *elem_type; + + switch (bt_message_get_type(msg)) { + case BT_MESSAGE_TYPE_DISCARDED_EVENTS: + stream = bt_message_discarded_events_borrow_stream_const(msg); + + if (bt_message_discarded_events_get_count(msg, &count) == + BT_PROPERTY_AVAILABILITY_NOT_AVAILABLE) { + count = UINT64_C(-1); } + + elem_type = "event"; + break; + case BT_MESSAGE_TYPE_DISCARDED_PACKETS: + stream = bt_message_discarded_packets_borrow_stream_const(msg); + + if (bt_message_discarded_packets_get_count(msg, &count) == + BT_PROPERTY_AVAILABILITY_NOT_AVAILABLE) { + count = UINT64_C(-1); + } + + elem_type = "packet"; + break; + default: + abort(); } - 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 != 0) { - goto end; + BT_ASSERT(stream); + stream_class = bt_stream_borrow_class_const(stream); + + if (bt_stream_class_borrow_default_clock_class_const(stream_class)) { + switch (bt_message_get_type(msg)) { + case BT_MESSAGE_TYPE_DISCARDED_EVENTS: + begin = bt_message_discarded_events_borrow_default_beginning_clock_snapshot_const( + msg); + end = bt_message_discarded_events_borrow_default_end_clock_snapshot_const( + msg); + break; + case BT_MESSAGE_TYPE_DISCARDED_PACKETS: + begin = bt_message_discarded_packets_borrow_default_beginning_clock_snapshot_const( + msg); + end = bt_message_discarded_packets_borrow_default_end_clock_snapshot_const( + msg); + break; + default: + abort(); } } -end: - return status; -#endif + print_discarded_elements_msg(pretty, stream, begin, end, + count, elem_type); return 0; }