lib: fully detach CTF IR and CTF writer implementations
[babeltrace.git] / plugins / text / pretty / print.c
index a9e6104d667ff84437fafbab9ec310da1a7b6d97..c5f57ae3a62dc45d9416fb2128f6b32d5ec9f34a 100644 (file)
@@ -82,14 +82,13 @@ 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_borrow_clock_value(event, clock_class);
+       clock_value = bt_event_borrow_default_clock_value(event);
        if (!clock_value) {
                g_string_append(pretty->string, "????????????????????");
                return;
@@ -227,16 +226,14 @@ 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_borrow_stream(event);
        if (!stream) {
@@ -255,16 +252,9 @@ enum bt_component_status print_event_timestamp(struct pretty_component *pretty,
                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_borrow_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;
        }
 
@@ -277,10 +267,10 @@ 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_borrow_clock_value(event, clock_class);
+                       bt_event_borrow_default_clock_value(event);
 
                print_timestamp_wall(pretty, clock_value);
        }
@@ -332,8 +322,7 @@ end:
 
 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;
@@ -357,8 +346,7 @@ enum bt_component_status print_event_header(struct pretty_component *pretty,
                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;
        }
@@ -1274,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 BT_CTF_FIELD_TYPE_ID_INTEGER:
+       case BT_FIELD_TYPE_ID_INTEGER:
                return print_integer(pretty, field);
-       case BT_CTF_FIELD_TYPE_ID_FLOAT:
+       case BT_FIELD_TYPE_ID_FLOAT:
        {
                double v;
 
@@ -1292,9 +1280,9 @@ enum bt_component_status print_field(struct pretty_component *pretty,
                }
                return BT_COMPONENT_STATUS_OK;
        }
-       case BT_CTF_FIELD_TYPE_ID_ENUM:
+       case BT_FIELD_TYPE_ID_ENUM:
                return print_enum(pretty, field);
-       case BT_CTF_FIELD_TYPE_ID_STRING:
+       case BT_FIELD_TYPE_ID_STRING:
        {
                const char *str;
 
@@ -1312,14 +1300,14 @@ enum bt_component_status print_field(struct pretty_component *pretty,
                }
                return BT_COMPONENT_STATUS_OK;
        }
-       case BT_CTF_FIELD_TYPE_ID_STRUCT:
+       case BT_FIELD_TYPE_ID_STRUCT:
                return print_struct(pretty, field, print_names, filter_fields,
                                filter_array_len);
-       case BT_CTF_FIELD_TYPE_ID_VARIANT:
+       case BT_FIELD_TYPE_ID_VARIANT:
                return print_variant(pretty, field, print_names);
-       case BT_CTF_FIELD_TYPE_ID_ARRAY:
+       case BT_FIELD_TYPE_ID_ARRAY:
                return print_array(pretty, field, print_names);
-       case BT_CTF_FIELD_TYPE_ID_SEQUENCE:
+       case BT_FIELD_TYPE_ID_SEQUENCE:
                return print_sequence(pretty, field, print_names);
        default:
                // TODO: log instead
@@ -1462,7 +1450,7 @@ end:
 }
 
 static
-int flush_buf(struct pretty_component *pretty)
+int flush_buf(FILE *stream, struct pretty_component *pretty)
 {
        int ret = 0;
 
@@ -1470,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;
        }
 
@@ -1485,15 +1473,11 @@ enum bt_component_status pretty_print_event(struct pretty_component *pretty,
        enum bt_component_status ret;
        struct bt_event *event =
                bt_notification_event_borrow_event(event_notif);
-       struct bt_clock_class_priority_map *cc_prio_map =
-               bt_notification_event_borrow_clock_class_priority_map(
-                       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;
        }
@@ -1526,7 +1510,7 @@ 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;
        }
@@ -1535,10 +1519,10 @@ end:
        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;
@@ -1549,26 +1533,12 @@ 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_borrow_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_borrow_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);
 
@@ -1580,7 +1550,7 @@ enum bt_component_status pretty_print_discarded_elements(
        /* Stream ID */
        stream_id = bt_stream_get_id(stream);
 
-       /* Trace path */
+       /* Trace name */
        trace = bt_stream_class_borrow_trace(stream_class);
        BT_ASSERT(trace);
        trace_name = bt_trace_get_name(trace);
@@ -1591,34 +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_borrow_begin_clock_value(notif) :
-               bt_notification_discarded_packets_borrow_begin_clock_value(notif);
-       print_timestamp_wall(pretty, clock_value);
-       fprintf(stderr, "%s] and [", pretty->string->str);
-       g_string_assign(pretty->string, "");
-       clock_value = is_discarded_events ?
-               bt_notification_discarded_events_borrow_end_clock_value(notif) :
-               bt_notification_discarded_packets_borrow_end_clock_value(notif);
-       print_timestamp_wall(pretty, 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],
@@ -1637,18 +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());
        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;
+}
This page took 0.027841 seconds and 4 git commands to generate.