if (has_ts) {
dmesg_comp->clock_class = bt_clock_class_create(
- dmesg_comp->trace_class);
+ bt_self_component_source_as_self_component(
+ dmesg_comp->self_comp));
if (!dmesg_comp->clock_class) {
BT_LOGE_STR("Cannot create clock class.");
goto error;
}
+ /*
+ * The `dmesg` timestamp's origin is not the Unix epoch,
+ * it's the boot time.
+ */
+ bt_clock_class_set_origin_is_unix_epoch(dmesg_comp->clock_class,
+ BT_FALSE);
+
ret = bt_stream_class_set_default_clock_class(
dmesg_comp->stream_class, dmesg_comp->clock_class);
if (ret) {
BT_LOGE_STR("Cannot set stream class's default clock class.");
goto error;
}
+
+ bt_stream_class_set_packets_have_default_beginning_clock_snapshot(
+ dmesg_comp->stream_class, BT_TRUE);
+ bt_stream_class_set_packets_have_default_end_clock_snapshot(
+ dmesg_comp->stream_class, BT_TRUE);
}
dmesg_comp->event_class = bt_event_class_create(
goto error;
}
- ret = bt_trace_make_static(dmesg_comp->trace);
- if (ret) {
- BT_LOGE_STR("Cannot make trace static.");
- goto error;
- }
-
goto end;
error:
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;
event = bt_message_event_borrow_event(msg);
BT_ASSERT(event);
-
- if (dmesg_comp->clock_class) {
- bt_event_set_default_clock_snapshot(event, ts);
- msg_iter->last_clock_value = ts;
- }
-
goto end;
error:
g_free(dmesg_msg_iter);
}
+
+
BT_HIDDEN
bt_self_message_iterator_status dmesg_msg_iter_init(
bt_self_message_iterator *self_msg_iter,
return status;
}
+
+BT_HIDDEN
+bt_bool dmesg_msg_iter_can_seek_beginning(
+ bt_self_message_iterator *self_msg_iter)
+{
+ struct dmesg_msg_iter *dmesg_msg_iter =
+ bt_self_message_iterator_get_data(self_msg_iter);
+
+ /* Can't seek the beginning of the standard input stream */
+ return !dmesg_msg_iter->dmesg_comp->params.read_from_stdin;
+}
+
+BT_HIDDEN
+bt_self_message_iterator_status dmesg_msg_iter_seek_beginning(
+ bt_self_message_iterator *self_msg_iter)
+{
+ struct dmesg_msg_iter *dmesg_msg_iter =
+ bt_self_message_iterator_get_data(self_msg_iter);
+
+ BT_ASSERT(!dmesg_msg_iter->dmesg_comp->params.read_from_stdin);
+
+ BT_MESSAGE_PUT_REF_AND_RESET(dmesg_msg_iter->tmp_event_msg);
+ dmesg_msg_iter->last_clock_value = 0;
+ dmesg_msg_iter->state = STATE_EMIT_STREAM_BEGINNING;
+ return BT_SELF_MESSAGE_ITERATOR_STATUS_OK;
+}