X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Ftext%2Fdmesg%2Fdmesg.c;h=aac38c23e3fa294a17f08d001a91f115c57ed806;hb=2c091c0465f433cc37e0042254c9132bac70a181;hp=c70fd1eb6bd61d3d66a374ad1983fdec8df64ebd;hpb=e54986cfdbdbd50d3908af27d446eeec5c145090;p=babeltrace.git diff --git a/plugins/text/dmesg/dmesg.c b/plugins/text/dmesg/dmesg.c index c70fd1eb..aac38c23 100644 --- a/plugins/text/dmesg/dmesg.c +++ b/plugins/text/dmesg/dmesg.c @@ -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; @@ -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); } @@ -512,8 +516,16 @@ skip_ts: goto error; } - msg = bt_message_event_create(msg_iter->pc_msg_iter, - dmesg_comp->event_class, dmesg_comp->packet); + if (dmesg_comp->clock_class) { + msg = bt_message_event_create_with_default_clock_snapshot( + msg_iter->pc_msg_iter, + dmesg_comp->event_class, dmesg_comp->packet, ts); + msg_iter->last_clock_value = ts; + } else { + msg = bt_message_event_create(msg_iter->pc_msg_iter, + dmesg_comp->event_class, dmesg_comp->packet); + } + if (!msg) { BT_LOGE_STR("Cannot create event message."); goto error; @@ -521,11 +533,6 @@ skip_ts: event = bt_message_event_borrow_event(msg); BT_ASSERT(event); - - if (dmesg_comp->clock_class) { - bt_event_set_default_clock_snapshot(event, ts); - } - goto end; error: @@ -711,6 +718,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 +783,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 +811,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: