#include <glib.h>
#include <babeltrace/common-internal.h>
#include <babeltrace/lib-logging-internal.h>
-#include <babeltrace/ref-internal.h>
#include <babeltrace/values-internal.h>
#include <babeltrace/object-pool-internal.h>
#include <babeltrace/ctf-ir/field-types-internal.h>
#include <babeltrace/ctf-ir/clock-value-internal.h>
#include <babeltrace/ctf-ir/field-path-internal.h>
#include <babeltrace/ctf-ir/utils-internal.h>
-#include <babeltrace/ctf-writer/field-types-internal.h>
-#include <babeltrace/ctf-writer/fields-internal.h>
-#include <babeltrace/ctf-writer/event-internal.h>
-#include <babeltrace/ctf-writer/stream-class-internal.h>
-#include <babeltrace/ctf-writer/stream-internal.h>
-#include <babeltrace/ctf-writer/trace-internal.h>
-#include <babeltrace/ctf-writer/clock-internal.h>
-#include <babeltrace/ctf-writer/writer-internal.h>
-#include <babeltrace/graph/clock-class-priority-map-internal.h>
#include <babeltrace/graph/component-class-internal.h>
#include <babeltrace/graph/component-class-sink-colander-internal.h>
#include <babeltrace/graph/component-filter-internal.h>
#include <babeltrace/graph/component-source-internal.h>
#include <babeltrace/graph/connection-internal.h>
#include <babeltrace/graph/graph-internal.h>
-#include <babeltrace/graph/notification-discarded-elements-internal.h>
#include <babeltrace/graph/notification-event-internal.h>
#include <babeltrace/graph/notification-inactivity-internal.h>
#include <babeltrace/graph/notification-internal.h>
static inline void format_connection(char **buf_ch, bool extended,
const char *prefix, struct bt_connection *connection);
-static inline void format_ref_count(char **buf_ch, bool extended,
+static inline void format_clock_value(char **buf_ch, bool extended,
+ const char *prefix, struct bt_clock_value *clock_value);
+
+static inline void format_object(char **buf_ch, bool extended,
const char *prefix, struct bt_object *obj)
{
- BUF_APPEND(", %sref-count=%lu", prefix, obj->ref_count.count);
+ BUF_APPEND(", %sref-count=%llu", prefix, obj->ref_count);
+}
+
+static inline void format_clock_value_set(char **buf_ch, bool extended,
+ const char *prefix, struct bt_clock_value_set *cv_set)
+{
+ char tmp_prefix[64];
+
+ if (!cv_set->clock_values) {
+ return;
+ }
+
+ BUF_APPEND(", %ssize=%u", PRFIELD(cv_set->clock_values->len));
+
+ if (cv_set->default_cv) {
+ SET_TMP_PREFIX("default-cv-");
+ format_clock_value(buf_ch, extended, tmp_prefix,
+ cv_set->default_cv);
+ }
}
static inline void format_object_pool(char **buf_ch, bool extended,
(void *) field_type);
}
-static inline void format_writer_field_type(char **buf_ch, bool extended,
- const char *prefix, struct bt_ctf_field_type *field_type)
-{
- format_field_type_common(buf_ch, extended, prefix,
- (void *) field_type);
-}
-
static inline void format_field_common_integer_extended(char **buf_ch,
const char *prefix, struct bt_field_common *field)
{
struct bt_field_common_string *str =
BT_FROM_COMMON(field);
- if (str->payload) {
- BT_ASSERT(str->payload);
+ if (str->buf) {
+ BT_ASSERT(str->buf->data);
BUF_APPEND(", %spartial-value=\"%.32s\"",
- PRFIELD(str->payload->str));
+ PRFIELD(str->buf->data));
}
break;
}
}
-static inline void format_writer_field(char **buf_ch, bool extended,
- const char *prefix, struct bt_ctf_field *field)
-{
- struct bt_field_common *common_field = (void *) field;
-
- format_field_common(buf_ch, extended, prefix, (void *) field);
-
- if (!extended) {
- return;
- }
-
- if (!common_field->type) {
- return;
- }
-
- switch (common_field->type->id) {
- case BT_FIELD_TYPE_ID_ENUM:
- {
- struct bt_ctf_field_enumeration *enumeration = (void *) field;
-
- if (enumeration->container) {
- format_writer_field(buf_ch, extended, prefix,
- (void *) enumeration->container);
- }
- break;
- }
- case BT_FIELD_TYPE_ID_VARIANT:
- {
- struct bt_ctf_field_variant *variant = (void *) field;
-
- BUF_APPEND(", %stag-field-addr=%p", PRFIELD(variant->tag));
- break;
- }
- default:
- break;
- }
-}
-
static inline void format_field_path(char **buf_ch, bool extended,
const char *prefix, struct bt_field_path *field_path)
{
&trace->packet_header_field_pool);
}
-static inline void format_writer_trace(char **buf_ch, bool extended,
- const char *prefix, struct bt_ctf_trace *trace)
-{
- format_trace_common(buf_ch, extended, prefix, BT_TO_COMMON(trace));
-}
-
static inline void format_stream_class_common(char **buf_ch, bool extended,
const char *prefix, struct bt_stream_class_common *stream_class,
format_func trace_format_func)
&stream_class->packet_context_field_pool);
}
-static inline void format_writer_stream_class(char **buf_ch, bool extended,
- const char *prefix, struct bt_ctf_stream_class *stream_class)
-{
- format_stream_class_common(buf_ch, extended, prefix,
- BT_TO_COMMON(stream_class), (format_func) format_writer_trace);
-
- if (extended && stream_class->clock) {
- BUF_APPEND(", %sctf-writer-clock-addr=%p, "
- "%sctf-writer-clock-name=\"%s\"",
- PRFIELD(stream_class->clock),
- PRFIELD(bt_clock_class_get_name(
- BT_TO_COMMON(stream_class->clock->clock_class))));
- }
-}
-
static inline void format_event_class_common(char **buf_ch, bool extended,
const char *prefix, struct bt_event_class_common *event_class,
format_func format_stream_class_func,
format_object_pool(buf_ch, extended, prefix, &event_class->event_pool);
}
-static inline void format_writer_event_class(char **buf_ch, bool extended,
- const char *prefix, struct bt_ctf_event_class *event_class)
-{
- format_event_class_common(buf_ch, extended, prefix,
- BT_TO_COMMON(event_class),
- (format_func) format_writer_stream_class,
- (format_func) format_writer_trace);
-}
-
static inline void format_stream_common(char **buf_ch, bool extended,
const char *prefix, struct bt_stream_common *stream,
format_func format_stream_class_func,
return;
}
- trace = (void *) bt_object_borrow_parent(stream);
+ trace = (void *) bt_object_borrow_parent(&stream->base);
if (!trace) {
return;
}
format_object_pool(buf_ch, extended, prefix, &stream->packet_pool);
}
-static inline void format_writer_stream(char **buf_ch, bool extended,
- const char *prefix, struct bt_ctf_stream *stream)
-{
- format_stream_common(buf_ch, extended, prefix, BT_TO_COMMON(stream),
- (format_func) format_writer_stream_class,
- (format_func) format_writer_trace);
-
- BUF_APPEND(", %sheader-field-addr=%p, %scontext-field-addr=%p"
- ", %sfd=%d, %smmap-offset=%zu, "
- "%smmap-base-offset=%zu, %spacket-size=%" PRIu64 ", "
- "%soffset=%" PRId64 ", %sevent-count=%u, "
- "%sflushed-packet-count=%u, "
- "%sdiscarded-event-count=%" PRIu64 ", "
- "%ssize=%" PRIu64 ", %slast-ts-end=%" PRIu64,
- PRFIELD(stream->packet_header),
- PRFIELD(stream->packet_context),
- PRFIELD(stream->pos.fd),
- PRFIELD((size_t) stream->pos.mmap_offset),
- PRFIELD((size_t) stream->pos.mmap_base_offset),
- PRFIELD(stream->pos.packet_size),
- PRFIELD(stream->pos.offset),
- PRFIELD(stream->events->len),
- PRFIELD(stream->flushed_packet_count),
- PRFIELD(stream->discarded_events),
- PRFIELD(stream->size), PRFIELD(stream->last_ts_end));
-
- if (stream->events) {
- BUF_APPEND(", %sevent-count=%u", PRFIELD(stream->events->len));
- }
-
- BUF_APPEND(", %sheader-field-addr=%p, %scontext-field-addr=%p"
- ", %sfd=%d, %smmap-offset=%zu, "
- "%smmap-base-offset=%zu, %spacket-size=%" PRIu64 ", "
- "%soffset=%" PRId64 ", "
- "%sflushed-packet-count=%u, "
- "%sdiscarded-event-count=%" PRIu64 ", "
- "%ssize=%" PRIu64 ", %slast-ts-end=%" PRIu64,
- PRFIELD(stream->packet_header),
- PRFIELD(stream->packet_context),
- PRFIELD(stream->pos.fd),
- PRFIELD((size_t) stream->pos.mmap_offset),
- PRFIELD((size_t) stream->pos.mmap_base_offset),
- PRFIELD(stream->pos.packet_size),
- PRFIELD(stream->pos.offset),
- PRFIELD(stream->flushed_packet_count),
- PRFIELD(stream->discarded_events),
- PRFIELD(stream->size), PRFIELD(stream->last_ts_end));
-}
-
static inline void format_packet(char **buf_ch, bool extended,
const char *prefix, struct bt_packet *packet)
{
BUF_APPEND(", %sstream-addr=%p", PRFIELD(stream));
SET_TMP_PREFIX("stream-");
format_stream(buf_ch, false, tmp_prefix, stream);
- trace = (struct bt_trace *) bt_object_borrow_parent(stream);
+ trace = (struct bt_trace *) bt_object_borrow_parent(&stream->common.base);
if (!trace) {
return;
}
return;
}
- if (event->clock_values) {
- BUF_APPEND(", %sclock-value-count=%u",
- PRFIELD(g_hash_table_size(event->clock_values)));
- }
-
+ SET_TMP_PREFIX("cvs-");
+ format_clock_value_set(buf_ch, extended, tmp_prefix, &event->cv_set);
packet = bt_event_borrow_packet(event);
if (!packet) {
return;
format_stream(buf_ch, false, tmp_prefix, stream);
}
-static inline void format_writer_event(char **buf_ch, bool extended,
- const char *prefix, struct bt_event *event)
-{
- format_event_common(buf_ch, extended, prefix, BT_TO_COMMON(event),
- (format_func) format_writer_event_class,
- (format_func) format_writer_stream_class,
- (format_func) format_writer_trace);
-}
-
static inline void format_clock_class(char **buf_ch, bool extended,
const char *prefix, struct bt_clock_class *clock_class)
{
const char *prefix, struct bt_clock_value *clock_value)
{
char tmp_prefix[64];
- BUF_APPEND(", %svalue=%" PRIu64 ", %sns-from-epoch=%" PRId64,
+ BUF_APPEND(", %sraw-value=%" PRIu64 ", %sns-from-epoch=%" PRId64,
PRFIELD(clock_value->value),
PRFIELD(clock_value->ns_from_epoch));
SET_TMP_PREFIX("event-");
format_event(buf_ch, true, tmp_prefix, notif_event->event);
-
- if (!notif_event->cc_prio_map) {
- return;
- }
-
- BUF_APPEND(", %scc-prio-map-addr=%p, %scc-prio-map-cc-count=%u",
- PRFIELD(notif_event->cc_prio_map),
- PRFIELD(notif_event->cc_prio_map->entries->len));
- break;
- }
- case BT_NOTIFICATION_TYPE_INACTIVITY:
- {
- struct bt_notification_inactivity *notif_inactivity =
- (void *) notif;
-
- if (!notif_inactivity->cc_prio_map) {
- return;
- }
-
- BUF_APPEND(", %scc-prio-map-addr=%p, %scc-prio-map-cc-count=%u",
- PRFIELD(notif_inactivity->cc_prio_map),
- PRFIELD(notif_inactivity->cc_prio_map->entries->len));
break;
}
case BT_NOTIFICATION_TYPE_STREAM_BEGIN:
format_packet(buf_ch, true, tmp_prefix, notif_packet->packet);
break;
}
- case BT_NOTIFICATION_TYPE_DISCARDED_EVENTS:
- case BT_NOTIFICATION_TYPE_DISCARDED_PACKETS:
- {
- struct bt_notification_discarded_elements *notif_discarded =
- (void *) notif;
-
- BUF_APPEND(", %scount=%" PRId64,
- PRFIELD(notif_discarded->count));
-
- if (notif_discarded->begin_clock_value) {
- SET_TMP_PREFIX("begin-clock-value-");
- format_clock_value(buf_ch, true, tmp_prefix,
- notif_discarded->begin_clock_value);
- }
-
- if (notif_discarded->end_clock_value) {
- SET_TMP_PREFIX("end-clock-value-");
- format_clock_value(buf_ch, true, tmp_prefix,
- notif_discarded->end_clock_value);
- }
- break;
- }
default:
break;
}
SET_TMP_PREFIX("colander-comp-");
format_component(buf_ch, false, tmp_prefix,
iter_output_port->colander);
- SET_TMP_PREFIX("output-port-");
- format_port(buf_ch, false, tmp_prefix,
- iter_output_port->output_port);
break;
}
default:
}
}
-static inline void format_ctf_writer(char **buf_ch, bool extended,
- const char *prefix, struct bt_ctf_writer *writer)
-{
- /* TODO */
-}
-
static inline void format_stream_class_common_common(char **buf_ch,
bool extended, const char *prefix,
struct bt_stream_class_common *stream_class)
void *obj;
enum {
CAT_DEFAULT,
- CAT_WRITER,
CAT_COMMON,
} cat = CAT_DEFAULT;
fmt_ch++;
}
- if (*fmt_ch == 'w') {
- cat = CAT_WRITER;
- fmt_ch++;
- } else if (*fmt_ch == '_') {
+ if (*fmt_ch == '_') {
cat = CAT_COMMON;
fmt_ch++;
}
switch (cat) {
case CAT_DEFAULT:
switch (*fmt_ch) {
- case 'r':
- format_ref_count(buf_ch, extended, prefix, obj);
- break;
case 'F':
format_field_type(buf_ch, extended, prefix, obj);
break;
case 'o':
format_object_pool(buf_ch, extended, prefix, obj);
break;
- default:
- abort();
- }
- break;
- case CAT_WRITER:
- switch (*fmt_ch) {
- case 'F':
- format_writer_field_type(buf_ch, extended, prefix, obj);
- break;
- case 'f':
- format_writer_field(buf_ch, extended, prefix, obj);
- break;
- case 'E':
- format_writer_event_class(buf_ch, extended, prefix, obj);
- break;
- case 'e':
- format_writer_event(buf_ch, extended, prefix, obj);
- break;
- case 'S':
- format_writer_stream_class(buf_ch, extended, prefix, obj);
- break;
- case 's':
- format_writer_stream(buf_ch, extended, prefix, obj);
- break;
- case 't':
- format_writer_trace(buf_ch, extended, prefix, obj);
- break;
- case 'w':
- format_ctf_writer(buf_ch, extended, prefix, obj);
+ case 'O':
+ format_object(buf_ch, extended, prefix, obj);
break;
default:
abort();