* SOFTWARE.
*/
+#define BT_LOG_TAG "LIB-LOGGING"
+
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <babeltrace/ctf-ir/clock-class-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/port-internal.h>
#include <babeltrace/plugin/plugin-internal.h>
#include <babeltrace/plugin/plugin-so-internal.h>
-#include <babeltrace/ctf-writer/writer-internal.h>
-#include <babeltrace/ctf-writer/clock-internal.h>
#define LIB_LOGGING_BUF_SIZE (4096 * 4)
strcat(tmp_prefix, (_prefix2)); \
} while (0)
+typedef void (*format_func)(char **, bool, const char *, void *);
+
static inline void format_component(char **buf_ch, bool extended,
const char *prefix, struct bt_component *component);
BUF_APPEND(", %sref-count=%lu", prefix, obj->ref_count.count);
}
-static inline void format_field_type(char **buf_ch, bool extended,
- const char *prefix, struct bt_field_type *field_type)
+static inline void format_field_type_common(char **buf_ch, bool extended,
+ const char *prefix, struct bt_field_type_common *field_type)
{
BUF_APPEND(", %stype-id=%s, %salignment=%u",
- PRFIELD(bt_field_type_id_string(field_type->id)),
+ PRFIELD(bt_common_field_type_id_string(field_type->id)),
PRFIELD(field_type->alignment));
if (extended) {
switch (field_type->id) {
case BT_FIELD_TYPE_ID_INTEGER:
{
- struct bt_field_type_integer *integer = (void *) field_type;
+ struct bt_field_type_common_integer *integer =
+ BT_FROM_COMMON(field_type);
BUF_APPEND(", %ssize=%u, %sis-signed=%d, %sbyte-order=%s, "
"%sbase=%d, %sencoding=%s, "
"%smapped-clock-class-addr=%p",
PRFIELD(integer->size), PRFIELD(integer->is_signed),
- PRFIELD(bt_byte_order_string(integer->user_byte_order)),
+ PRFIELD(bt_common_byte_order_string(integer->user_byte_order)),
PRFIELD(integer->base),
- PRFIELD(bt_string_encoding_string(integer->encoding)),
- PRFIELD(integer->mapped_clock));
+ PRFIELD(bt_common_string_encoding_string(integer->encoding)),
+ PRFIELD(integer->mapped_clock_class));
- if (integer->mapped_clock) {
+ if (integer->mapped_clock_class) {
BUF_APPEND(", %smapped-clock-class-name=\"%s\"",
- PRFIELD(bt_clock_class_get_name(integer->mapped_clock)));
+ PRFIELD(bt_clock_class_get_name(integer->mapped_clock_class)));
}
break;
}
case BT_FIELD_TYPE_ID_FLOAT:
{
- struct bt_field_type_floating_point *flt = (void *) field_type;
+ struct bt_field_type_common_floating_point *flt =
+ BT_FROM_COMMON(field_type);
BUF_APPEND(", %sexp-dig=%u, %smant-dig=%u, %sbyte-order=%s",
PRFIELD(flt->exp_dig), PRFIELD(flt->mant_dig),
- PRFIELD(bt_byte_order_string(flt->user_byte_order)));
+ PRFIELD(bt_common_byte_order_string(flt->user_byte_order)));
break;
}
case BT_FIELD_TYPE_ID_ENUM:
{
- struct bt_field_type_enumeration *enm = (void *) field_type;
+ struct bt_field_type_common_enumeration *enm =
+ BT_FROM_COMMON(field_type);
BUF_APPEND(", %smapping-count=%u",
PRFIELD(enm->entries->len));
}
case BT_FIELD_TYPE_ID_STRING:
{
- struct bt_field_type_string *str = (void *) field_type;
+ struct bt_field_type_common_string *str =
+ BT_FROM_COMMON(field_type);
BUF_APPEND(", %sencoding=%s",
- PRFIELD(bt_string_encoding_string(str->encoding)));
+ PRFIELD(bt_common_string_encoding_string(str->encoding)));
break;
}
case BT_FIELD_TYPE_ID_STRUCT:
{
- struct bt_field_type_structure *structure = (void *) field_type;
+ struct bt_field_type_common_structure *structure =
+ BT_FROM_COMMON(field_type);
BUF_APPEND(", %sfield-count=%u",
PRFIELD(structure->fields->len));
}
case BT_FIELD_TYPE_ID_SEQUENCE:
{
- struct bt_field_type_sequence *seq = (void *) field_type;
+ struct bt_field_type_common_sequence *seq =
+ BT_FROM_COMMON(field_type);
BUF_APPEND(", %slength-ft-addr=\"%s\", %selem-ft-addr=%p",
PRFIELD(seq->length_field_name->str),
- PRFIELD(seq->element_type));
+ PRFIELD(seq->element_ft));
break;
}
case BT_FIELD_TYPE_ID_VARIANT:
{
- struct bt_field_type_variant *variant = (void *) field_type;
+ struct bt_field_type_common_variant *variant =
+ BT_FROM_COMMON(field_type);
BUF_APPEND(", %stag-name=\"%s\", %stag-ft-addr=%p, "
"%sfield-count=%u",
PRFIELD(variant->tag_name->str),
- PRFIELD(variant->tag), PRFIELD(variant->fields->len));
+ PRFIELD(variant->tag_ft), PRFIELD(variant->fields->len));
break;
}
default:
}
}
-static inline void format_field_integer_extended(char **buf_ch,
- const char *prefix, struct bt_field *field)
+static inline void format_field_type(char **buf_ch, bool extended,
+ const char *prefix, struct bt_field_type *field_type)
+{
+ format_field_type_common(buf_ch, extended, prefix,
+ (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_integer *integer = (void *) field;
- struct bt_field_type_integer *field_type = (void *) field->type;
+ struct bt_field_common_integer *integer = BT_FROM_COMMON(field);
+ struct bt_field_type_common_integer *field_type =
+ BT_FROM_COMMON(field->type);
const char *fmt = NULL;
if (field_type->base == 8) {
}
}
-static inline void format_field(char **buf_ch, bool extended,
- const char *prefix, struct bt_field *field)
+static inline void format_field_common(char **buf_ch, bool extended,
+ const char *prefix, struct bt_field_common *field)
{
BUF_APPEND(", %sis-set=%d", PRFIELD(field->payload_set));
BUF_APPEND(", %stype-addr=%p, %stype-id=%s",
PRFIELD(field->type),
- PRFIELD(bt_field_type_id_string(field->type->id)));
+ PRFIELD(bt_common_field_type_id_string(field->type->id)));
if (!extended || field->type->id == BT_FIELD_TYPE_ID_UNKNOWN ||
!field->payload_set) {
switch (field->type->id) {
case BT_FIELD_TYPE_ID_INTEGER:
{
- format_field_integer_extended(buf_ch, prefix, field);
+ format_field_common_integer_extended(buf_ch, prefix, field);
break;
}
case BT_FIELD_TYPE_ID_FLOAT:
{
- struct bt_field_floating_point *flt = (void *) field;
+ struct bt_field_common_floating_point *flt =
+ BT_FROM_COMMON(field);
BUF_APPEND(", %svalue=%f", PRFIELD(flt->payload));
break;
}
case BT_FIELD_TYPE_ID_ENUM:
{
- struct bt_field_enumeration *enm = (void *) field;
+ struct bt_field_common_enumeration *enm =
+ BT_FROM_COMMON(field);
if (enm->payload) {
- format_field_integer_extended(buf_ch, prefix,
+ format_field_common_integer_extended(buf_ch, prefix,
enm->payload);
}
break;
}
case BT_FIELD_TYPE_ID_STRING:
{
- struct bt_field_string *str = (void *) field;
+ struct bt_field_common_string *str =
+ BT_FROM_COMMON(field);
BT_ASSERT(str->payload);
BUF_APPEND(", %spartial-value=\"%.32s\"",
}
case BT_FIELD_TYPE_ID_SEQUENCE:
{
- struct bt_field_sequence *seq = (void *) field;
+ struct bt_field_common_sequence *seq =
+ BT_FROM_COMMON(field);
BUF_APPEND(", %slength-field-addr=%p", PRFIELD(seq->length));
break;
}
case BT_FIELD_TYPE_ID_VARIANT:
{
- struct bt_field_variant *variant = (void *) field;
+ struct bt_field_common_variant *variant =
+ BT_FROM_COMMON(field);
BUF_APPEND(", %stag-field-addr=%p, %svalue-field-addr=%p",
PRFIELD(variant->tag), PRFIELD(variant->payload));
}
}
+static inline void format_field(char **buf_ch, bool extended,
+ const char *prefix, struct bt_field *field)
+{
+ format_field_common(buf_ch, extended, prefix, (void *) field);
+}
+
+static inline void format_writer_field(char **buf_ch, bool extended,
+ const char *prefix, struct bt_ctf_field *field)
+{
+ format_field_common(buf_ch, extended, prefix, (void *) field);
+}
+
static inline void format_field_path(char **buf_ch, bool extended,
const char *prefix, struct bt_field_path *field_path)
{
return;
}
- BUF_APPEND(", %spath=[%s", PRFIELD(bt_scope_string(field_path->root)));
+ BUF_APPEND(", %spath=[%s", PRFIELD(bt_common_scope_string(field_path->root)));
for (i = 0; i < field_path->indexes->len; i++) {
int index = g_array_index(field_path->indexes, int, i);
BUF_APPEND("%s", "]");
}
-static inline void format_trace(char **buf_ch, bool extended,
- const char *prefix, struct bt_trace *trace)
+static inline void format_trace_common(char **buf_ch, bool extended,
+ const char *prefix, struct bt_trace_common *trace)
{
if (trace->name) {
BUF_APPEND(", %sname=\"%s\"", PRFIELD(trace->name->str));
return;
}
- BUF_APPEND(", %sis-frozen=%d, %sis-static=%d",
- PRFIELD(trace->frozen), PRFIELD(trace->is_static));
+ BUF_APPEND(", %sis-frozen=%d", PRFIELD(trace->frozen));
if (trace->uuid_set) {
BUF_APPEND_UUID(trace->uuid);
}
BUF_APPEND(", %sclock-class-count=%u, %sstream-class-count=%u, "
- "%sstream-count=%u, %sis-ctf-writer-trace=%d, "
- "%spacket-header-ft-addr=%p",
- PRFIELD(trace->clocks->len),
+ "%sstream-count=%u, %spacket-header-ft-addr=%p",
+ PRFIELD(trace->clock_classes->len),
PRFIELD(trace->stream_classes->len),
PRFIELD(trace->streams->len),
- PRFIELD(trace->is_created_by_writer),
- PRFIELD(trace->packet_header_type));
+ PRFIELD(trace->packet_header_field_type));
}
-static inline void format_stream_class(char **buf_ch, bool extended,
- const char *prefix, struct bt_stream_class *stream_class)
+static inline void format_trace(char **buf_ch, bool extended,
+ const char *prefix, struct bt_trace *trace)
{
- struct bt_trace *trace;
+ format_trace_common(buf_ch, extended, prefix, BT_TO_COMMON(trace));
+
+ if (extended) {
+ BUF_APPEND(", %sis-static=%d", PRFIELD(trace->is_static));
+ }
+}
+
+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)
+{
+ struct bt_trace_common *trace;
char tmp_prefix[64];
if (stream_class->id_set) {
}
BUF_APPEND(", %sis-frozen=%d", PRFIELD(stream_class->frozen));
-
- if (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(stream_class->clock->clock_class)));
- }
-
BUF_APPEND(", %sevent-class-count=%u, %spacket-context-ft-addr=%p, "
"%sevent-header-ft-addr=%p, %sevent-context-ft-addr=%p",
PRFIELD(stream_class->event_classes->len),
- PRFIELD(stream_class->packet_context_type),
- PRFIELD(stream_class->event_header_type),
- PRFIELD(stream_class->event_context_type));
- trace = bt_stream_class_borrow_trace(stream_class);
+ PRFIELD(stream_class->packet_context_field_type),
+ PRFIELD(stream_class->event_header_field_type),
+ PRFIELD(stream_class->event_context_field_type));
+ trace = bt_stream_class_common_borrow_trace(stream_class);
if (!trace) {
return;
}
BUF_APPEND(", %strace-addr=%p", PRFIELD(trace));
SET_TMP_PREFIX("trace-");
- format_trace(buf_ch, false, tmp_prefix, trace);
+ trace_format_func(buf_ch, false, tmp_prefix, trace);
}
-static inline void format_event_class(char **buf_ch, bool extended,
- const char *prefix, struct bt_event_class *event_class)
+static inline void format_stream_class(char **buf_ch, bool extended,
+ const char *prefix, struct bt_stream_class *stream_class)
{
- struct bt_stream_class *stream_class;
- struct bt_trace *trace;
+ format_stream_class_common(buf_ch, extended, prefix,
+ BT_TO_COMMON(stream_class), (format_func) format_trace);
+}
+
+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_func format_trace_func)
+{
+ struct bt_stream_class_common *stream_class;
+ struct bt_trace_common *trace;
char tmp_prefix[64];
BUF_APPEND(", %sid=%" PRId64, PRFIELD(event_class->id));
BUF_APPEND(", %sis-frozen=%d, %slog-level=%s",
PRFIELD(event_class->frozen),
- PRFIELD(bt_event_class_log_level_string(event_class->log_level)));
+ PRFIELD(bt_common_event_class_log_level_string(event_class->log_level)));
if (event_class->emf_uri) {
BUF_APPEND(", %semf-uri=\"%s\"",
}
BUF_APPEND(", %scontext-ft-addr=%p, %spayload-ft-addr=%p",
- PRFIELD(event_class->context),
- PRFIELD(event_class->fields));
+ PRFIELD(event_class->context_field_type),
+ PRFIELD(event_class->payload_field_type));
- stream_class = bt_event_class_borrow_stream_class(event_class);
+ stream_class = bt_event_class_common_borrow_stream_class(event_class);
if (!stream_class) {
return;
}
BUF_APPEND(", %sstream-class-addr=%p", PRFIELD(stream_class));
SET_TMP_PREFIX("stream-class-");
- format_stream_class(buf_ch, false, tmp_prefix, stream_class);
- trace = bt_stream_class_borrow_trace(stream_class);
+ format_stream_class_func(buf_ch, false, tmp_prefix, stream_class);
+ trace = bt_stream_class_common_borrow_trace(stream_class);
if (!trace) {
return;
}
BUF_APPEND(", %strace-addr=%p", PRFIELD(trace));
SET_TMP_PREFIX("trace-");
- format_trace(buf_ch, false, tmp_prefix, trace);
+ format_trace_func(buf_ch, false, tmp_prefix, trace);
}
-static inline void format_stream(char **buf_ch, bool extended,
- const char *prefix, struct bt_stream *stream)
+static inline void format_event_class(char **buf_ch, bool extended,
+ const char *prefix, struct bt_event_class *event_class)
{
- struct bt_stream_class *stream_class;
- struct bt_trace *trace;
+ format_event_class_common(buf_ch, extended, prefix,
+ BT_TO_COMMON(event_class), (format_func) format_stream_class,
+ (format_func) format_trace);
+}
+
+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,
+ format_func format_trace_func)
+{
+ struct bt_stream_class_common *stream_class;
+ struct bt_trace_common *trace;
char tmp_prefix[64];
BUF_APPEND(", %sid=%" PRId64, PRFIELD(stream->id));
BUF_APPEND(", %sname=\"%s\"", PRFIELD(stream->name->str));
}
- BUF_APPEND(", %sis-ctf-writer-stream=%d",
- PRFIELD(stream->pos.fd != -1));
-
if (!extended) {
return;
}
- if (stream->pos.fd != -1) {
- 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));
- }
-
- stream_class = bt_stream_borrow_stream_class(stream);
+ stream_class = bt_stream_common_borrow_class(stream);
if (!stream_class) {
return;
}
BUF_APPEND(", %sstream-class-addr=%p", PRFIELD(stream_class));
SET_TMP_PREFIX("stream-class-");
- format_stream_class(buf_ch, false, tmp_prefix, stream_class);
- trace = bt_stream_class_borrow_trace(stream_class);
+ format_stream_class_func(buf_ch, false, tmp_prefix, stream_class);
+ trace = bt_stream_class_common_borrow_trace(stream_class);
if (!trace) {
return;
}
- trace = (struct bt_trace *) bt_object_borrow_parent(stream);
+ trace = (void *) bt_object_borrow_parent(stream);
if (!trace) {
return;
}
BUF_APPEND(", %strace-addr=%p", PRFIELD(trace));
SET_TMP_PREFIX("trace-");
- format_trace(buf_ch, false, tmp_prefix, trace);
+ format_trace_common(buf_ch, false, tmp_prefix, trace);
+}
+
+static inline void format_stream(char **buf_ch, bool extended,
+ const char *prefix, struct bt_stream *stream)
+{
+ format_stream_common(buf_ch, extended, prefix, BT_TO_COMMON(stream),
+ (format_func) format_stream_class,
+ (format_func) format_trace);
+}
+
+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));
}
static inline void format_packet(char **buf_ch, bool extended,
format_trace(buf_ch, false, tmp_prefix, trace);
}
-static inline void format_event(char **buf_ch, bool extended,
- const char *prefix, struct bt_event *event)
+static inline void format_event_common(char **buf_ch, bool extended,
+ const char *prefix, struct bt_event_common *event,
+ format_func format_event_class_func,
+ format_func format_stream_class_func,
+ format_func format_trace_func)
{
- struct bt_trace *trace;
- struct bt_stream_class *stream_class;
- struct bt_packet *packet;
- struct bt_stream *stream;
+ struct bt_trace_common *trace;
+ struct bt_stream_class_common *stream_class;
char tmp_prefix[64];
if (!extended) {
BUF_APPEND(", %sis-frozen=%d, %sheader-field-addr=%p, "
"%sstream-context-field-addr=%p, "
- "%scontext-field-addr=%p, %spayload-field-addr=%p, "
- "%sclock-value-count=%u",
+ "%scontext-field-addr=%p, %spayload-field-addr=%p, ",
PRFIELD(event->frozen),
- PRFIELD(event->event_header),
- PRFIELD(event->stream_event_context),
- PRFIELD(event->context_payload),
- PRFIELD(event->fields_payload),
- PRFIELD(g_hash_table_size(event->clock_values)));
- BUF_APPEND(", %sevent-class-addr=%p", PRFIELD(event->event_class));
+ PRFIELD(event->header_field),
+ PRFIELD(event->stream_event_context_field),
+ PRFIELD(event->context_field),
+ PRFIELD(event->payload_field));
+ BUF_APPEND(", %sevent-class-addr=%p", PRFIELD(event->class));
SET_TMP_PREFIX("event-class-");
- format_event_class(buf_ch, false, tmp_prefix, event->event_class);
- stream_class = bt_event_class_borrow_stream_class(event->event_class);
+ format_event_class_func(buf_ch, false, tmp_prefix, event->class);
+ stream_class = bt_event_class_common_borrow_stream_class(event->class);
if (stream_class) {
BUF_APPEND(", %sstream-class-addr=%p", PRFIELD(stream_class));
SET_TMP_PREFIX("stream-class-");
- format_stream_class(buf_ch, false, tmp_prefix, stream_class);
+ format_stream_class_func(buf_ch, false, tmp_prefix,
+ stream_class);
- trace = bt_stream_class_borrow_trace(stream_class);
+ trace = bt_stream_class_common_borrow_trace(stream_class);
if (trace) {
BUF_APPEND(", %strace-addr=%p", PRFIELD(trace));
SET_TMP_PREFIX("trace-");
- format_trace(buf_ch, false, tmp_prefix, trace);
+ format_trace_func(buf_ch, false, tmp_prefix, trace);
}
}
+}
+
+static inline void format_event(char **buf_ch, bool extended,
+ const char *prefix, struct bt_event *event)
+{
+ struct bt_packet *packet;
+ struct bt_stream *stream;
+ char tmp_prefix[64];
+
+ format_event_common(buf_ch, extended, prefix, BT_TO_COMMON(event),
+ (format_func) format_event_class,
+ (format_func) format_stream_class, (format_func) format_trace);
+
+ if (!extended) {
+ return;
+ }
+
+ BUF_APPEND(", %sclock-value-count=%u",
+ PRFIELD(g_hash_table_size(event->clock_values)));
packet = bt_event_borrow_packet(event);
if (!packet) {
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)
{
/* TODO */
}
+static inline void format_stream_class_common_common(char **buf_ch,
+ bool extended, const char *prefix,
+ struct bt_stream_class_common *stream_class)
+{
+ format_stream_class_common(buf_ch, extended, prefix, stream_class,
+ (format_func) format_trace_common);
+}
+
+static inline void format_event_class_common_common(char **buf_ch,
+ bool extended, const char *prefix,
+ struct bt_event_class_common *event_class)
+{
+ format_event_class_common(buf_ch, extended, prefix, event_class,
+ (format_func) format_stream_class_common,
+ (format_func) format_trace_common);
+}
+
+static inline void format_event_common_common(char **buf_ch,
+ bool extended, const char *prefix,
+ struct bt_event_common *event)
+{
+ format_event_common(buf_ch, extended, prefix, event,
+ (format_func) format_event_class_common,
+ (format_func) format_stream_class_common,
+ (format_func) format_trace_common);
+}
+
+static inline void format_stream_common_common(char **buf_ch, bool extended,
+ const char *prefix, struct bt_stream_common *stream)
+{
+ format_stream_common(buf_ch, extended, prefix, stream,
+ (format_func) format_stream_class_common,
+ (format_func) format_trace_common);
+}
+
static inline void handle_conversion_specifier_bt(void *priv_data,
char **buf_ch, size_t avail_size,
const char **out_fmt_ch, va_list *args)
char prefix[64];
char *prefix_ch = prefix;
void *obj;
+ enum {
+ CAT_DEFAULT,
+ CAT_WRITER,
+ CAT_COMMON,
+ } cat = CAT_DEFAULT;
/* skip "%!" */
fmt_ch += 2;
fmt_ch++;
}
+ if (*fmt_ch == 'w') {
+ cat = CAT_WRITER;
+ fmt_ch++;
+ } else if (*fmt_ch == '_') {
+ cat = CAT_COMMON;
+ fmt_ch++;
+ }
+
obj = va_arg(*args, void *);
BUF_APPEND("%saddr=%p", prefix, obj);
goto update_fmt;
}
- 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 'f':
- format_field(buf_ch, extended, prefix, obj);
- break;
- case 'P':
- format_field_path(buf_ch, extended, prefix, obj);
- break;
- case 'E':
- format_event_class(buf_ch, extended, prefix, obj);
- break;
- case 'e':
- format_event(buf_ch, extended, prefix, obj);
- break;
- case 'S':
- format_stream_class(buf_ch, extended, prefix, obj);
- break;
- case 's':
- format_stream(buf_ch, extended, prefix, obj);
- break;
- case 'a':
- format_packet(buf_ch, extended, prefix, obj);
- break;
- case 't':
- format_trace(buf_ch, extended, prefix, obj);
- break;
- case 'K':
- format_clock_class(buf_ch, extended, prefix, obj);
- break;
- case 'k':
- format_clock_value(buf_ch, extended, prefix, obj);
- break;
- case 'v':
- format_value(buf_ch, extended, prefix, obj);
- break;
- case 'n':
- format_notification(buf_ch, extended, prefix, obj);
- break;
- case 'i':
- format_notification_iterator(buf_ch, extended, prefix, obj);
- break;
- case 'C':
- format_component_class(buf_ch, extended, prefix, obj);
- break;
- case 'c':
- format_component(buf_ch, extended, prefix, obj);
- break;
- case 'p':
- format_port(buf_ch, extended, prefix, obj);
- break;
- case 'x':
- format_connection(buf_ch, extended, prefix, obj);
- break;
- case 'u':
- format_plugin(buf_ch, extended, prefix, obj);
+ 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 'f':
+ format_field(buf_ch, extended, prefix, obj);
+ break;
+ case 'P':
+ format_field_path(buf_ch, extended, prefix, obj);
+ break;
+ case 'E':
+ format_event_class(buf_ch, extended, prefix, obj);
+ break;
+ case 'e':
+ format_event(buf_ch, extended, prefix, obj);
+ break;
+ case 'S':
+ format_stream_class(buf_ch, extended, prefix, obj);
+ break;
+ case 's':
+ format_stream(buf_ch, extended, prefix, obj);
+ break;
+ case 'a':
+ format_packet(buf_ch, extended, prefix, obj);
+ break;
+ case 't':
+ format_trace(buf_ch, extended, prefix, obj);
+ break;
+ case 'K':
+ format_clock_class(buf_ch, extended, prefix, obj);
+ break;
+ case 'k':
+ format_clock_value(buf_ch, extended, prefix, obj);
+ break;
+ case 'v':
+ format_value(buf_ch, extended, prefix, obj);
+ break;
+ case 'n':
+ format_notification(buf_ch, extended, prefix, obj);
+ break;
+ case 'i':
+ format_notification_iterator(buf_ch, extended, prefix, obj);
+ break;
+ case 'C':
+ format_component_class(buf_ch, extended, prefix, obj);
+ break;
+ case 'c':
+ format_component(buf_ch, extended, prefix, obj);
+ break;
+ case 'p':
+ format_port(buf_ch, extended, prefix, obj);
+ break;
+ case 'x':
+ format_connection(buf_ch, extended, prefix, obj);
+ break;
+ case 'u':
+ format_plugin(buf_ch, extended, prefix, obj);
+ break;
+ case 'g':
+ format_graph(buf_ch, extended, prefix, obj);
+ break;
+ default:
+ abort();
+ }
break;
- case 'g':
- format_graph(buf_ch, extended, prefix, obj);
+ 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);
+ break;
+ default:
+ abort();
+ }
break;
- case 'w':
- format_ctf_writer(buf_ch, extended, prefix, obj);
+ case CAT_COMMON:
+ switch (*fmt_ch) {
+ case 'F':
+ format_field_type_common(buf_ch, extended, prefix, obj);
+ break;
+ case 'f':
+ format_field_common(buf_ch, extended, prefix, obj);
+ break;
+ case 'E':
+ format_event_class_common_common(buf_ch, extended, prefix, obj);
+ break;
+ case 'e':
+ format_event_common_common(buf_ch, extended, prefix, obj);
+ break;
+ case 'S':
+ format_stream_class_common_common(buf_ch, extended, prefix, obj);
+ break;
+ case 's':
+ format_stream_common_common(buf_ch, extended, prefix, obj);
+ break;
+ case 't':
+ format_trace_common(buf_ch, extended, prefix, obj);
+ break;
+ default:
+ abort();
+ }
break;
- default:
- abort();
}
update_fmt: