lib: add default clock snapshot property to packet beginning/end message
[babeltrace.git] / plugins / text / dmesg / dmesg.c
index 332322b83e4f410be598444456e114d916bc914b..d73d2abe69c537b4896453887f9b468d1a12c187 100644 (file)
@@ -50,12 +50,15 @@ struct dmesg_msg_iter {
        size_t linebuf_len;
        FILE *fp;
        bt_message *tmp_event_msg;
+       uint64_t last_clock_value;
 
        enum {
                STATE_EMIT_STREAM_BEGINNING,
+               STATE_EMIT_STREAM_ACTIVITY_BEGINNING,
                STATE_EMIT_PACKET_BEGINNING,
                STATE_EMIT_EVENT,
                STATE_EMIT_PACKET_END,
+               STATE_EMIT_STREAM_ACTIVITY_END,
                STATE_EMIT_STREAM_END,
                STATE_DONE,
        } state;
@@ -79,19 +82,19 @@ struct dmesg_component {
 };
 
 static
-bt_field_class *create_event_payload_fc(void)
+bt_field_class *create_event_payload_fc(bt_trace_class *trace_class)
 {
        bt_field_class *root_fc = NULL;
        bt_field_class *fc = NULL;
        int ret;
 
-       root_fc = bt_field_class_structure_create();
+       root_fc = bt_field_class_structure_create(trace_class);
        if (!root_fc) {
                BT_LOGE_STR("Cannot create an empty structure field class object.");
                goto error;
        }
 
-       fc = bt_field_class_string_create();
+       fc = bt_field_class_string_create(trace_class);
        if (!fc) {
                BT_LOGE_STR("Cannot create a string field class object.");
                goto error;
@@ -165,7 +168,7 @@ int create_meta(struct dmesg_component *dmesg_comp, bool has_ts)
                goto error;
        }
 
-       fc = create_event_payload_fc();
+       fc = create_event_payload_fc(dmesg_comp->trace_class);
        if (!fc) {
                BT_LOGE_STR("Cannot create event payload field class.");
                goto error;
@@ -245,7 +248,7 @@ static
 int create_packet_and_stream_and_trace(struct dmesg_component *dmesg_comp)
 {
        int ret = 0;
-       const char *trace_name;
+       const char *trace_name = NULL;
        gchar *basename = NULL;
 
        dmesg_comp->trace = bt_trace_create(dmesg_comp->trace_class);
@@ -358,6 +361,7 @@ void destroy_dmesg_component(struct dmesg_component *dmesg_comp)
        bt_event_class_put_ref(dmesg_comp->event_class);
        bt_stream_put_ref(dmesg_comp->stream);
        bt_clock_class_put_ref(dmesg_comp->clock_class);
+       bt_trace_class_put_ref(dmesg_comp->trace_class);
        g_free(dmesg_comp);
 }
 
@@ -524,6 +528,7 @@ skip_ts:
 
        if (dmesg_comp->clock_class) {
                bt_event_set_default_clock_snapshot(event, ts);
+               msg_iter->last_clock_value = ts;
        }
 
        goto end;
@@ -711,6 +716,7 @@ bt_self_message_iterator_status dmesg_msg_iter_next_one(
 
        if (dmesg_msg_iter->tmp_event_msg ||
                        dmesg_msg_iter->state == STATE_EMIT_PACKET_END ||
+                       dmesg_msg_iter->state == STATE_EMIT_STREAM_ACTIVITY_END ||
                        dmesg_msg_iter->state == STATE_EMIT_STREAM_END) {
                goto handle_state;
        }
@@ -775,12 +781,26 @@ handle_state:
                BT_ASSERT(dmesg_msg_iter->tmp_event_msg);
                *msg = bt_message_stream_beginning_create(
                        dmesg_msg_iter->pc_msg_iter, dmesg_comp->stream);
+               dmesg_msg_iter->state = STATE_EMIT_STREAM_ACTIVITY_BEGINNING;
+               break;
+       case STATE_EMIT_STREAM_ACTIVITY_BEGINNING:
+               BT_ASSERT(dmesg_msg_iter->tmp_event_msg);
+               *msg = bt_message_stream_activity_beginning_create(
+                       dmesg_msg_iter->pc_msg_iter, dmesg_comp->stream);
                dmesg_msg_iter->state = STATE_EMIT_PACKET_BEGINNING;
                break;
        case STATE_EMIT_PACKET_BEGINNING:
                BT_ASSERT(dmesg_msg_iter->tmp_event_msg);
-               *msg = bt_message_packet_beginning_create(
-                       dmesg_msg_iter->pc_msg_iter, dmesg_comp->packet);
+
+               if (dmesg_comp->clock_class) {
+                       *msg = bt_message_packet_beginning_create_with_default_clock_snapshot(
+                               dmesg_msg_iter->pc_msg_iter, dmesg_comp->packet,
+                               dmesg_msg_iter->last_clock_value);
+               } else {
+                       *msg = bt_message_packet_beginning_create(
+                               dmesg_msg_iter->pc_msg_iter, dmesg_comp->packet);
+               }
+
                dmesg_msg_iter->state = STATE_EMIT_EVENT;
                break;
        case STATE_EMIT_EVENT:
@@ -789,8 +809,20 @@ handle_state:
                dmesg_msg_iter->tmp_event_msg = NULL;
                break;
        case STATE_EMIT_PACKET_END:
-               *msg = bt_message_packet_end_create(
-                       dmesg_msg_iter->pc_msg_iter, dmesg_comp->packet);
+               if (dmesg_comp->clock_class) {
+                       *msg = bt_message_packet_end_create_with_default_clock_snapshot(
+                               dmesg_msg_iter->pc_msg_iter, dmesg_comp->packet,
+                               dmesg_msg_iter->last_clock_value);
+               } else {
+                       *msg = bt_message_packet_end_create(
+                               dmesg_msg_iter->pc_msg_iter, dmesg_comp->packet);
+               }
+
+               dmesg_msg_iter->state = STATE_EMIT_STREAM_ACTIVITY_END;
+               break;
+       case STATE_EMIT_STREAM_ACTIVITY_END:
+               *msg = bt_message_stream_activity_end_create(
+                       dmesg_msg_iter->pc_msg_iter, dmesg_comp->stream);
                dmesg_msg_iter->state = STATE_EMIT_STREAM_END;
                break;
        case STATE_EMIT_STREAM_END:
This page took 0.025189 seconds and 4 git commands to generate.