X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=lib%2Ftrace-ir%2Fevent.c;h=f63bd309965ed1e45f03de914fd70e7ea753632b;hb=35fa110e5bea4a35497313adf3e3d0fa09db9ff7;hp=ed42d0a2eabbf525def895d61dfab7b7c7227944;hpb=939190b374e61ac2a31e38ecc6c31f2f986690ab;p=babeltrace.git diff --git a/lib/trace-ir/event.c b/lib/trace-ir/event.c index ed42d0a2..f63bd309 100644 --- a/lib/trace-ir/event.c +++ b/lib/trace-ir/event.c @@ -1,12 +1,7 @@ /* - * event.c - * - * Babeltrace trace IR - Event - * + * Copyright 2017-2018 Philippe Proulx * Copyright 2013, 2014 Jérémie Galarneau * - * Author: Jérémie Galarneau - * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights @@ -30,16 +25,18 @@ #include #include -#include -#include +#include +#include #include -#include -#include +#include +#include #include +#include #include #include #include #include +#include #include #include #include @@ -47,14 +44,13 @@ #include #include #include -#include #include -#include #include +#include #include BT_HIDDEN -void _bt_event_set_is_frozen(struct bt_event *event, bool is_frozen) +void _bt_event_set_is_frozen(const struct bt_event *event, bool is_frozen) { BT_ASSERT(event); BT_LIB_LOGD("Setting event's frozen state: %!+e, is-frozen=%d", @@ -84,7 +80,7 @@ void _bt_event_set_is_frozen(struct bt_event *event, bool is_frozen) is_frozen); } - event->frozen = is_frozen; + ((struct bt_event *) event)->frozen = is_frozen; BT_LOGD_STR("Setting event's packet's frozen state."); bt_packet_set_is_frozen(event->packet, is_frozen); } @@ -110,7 +106,7 @@ struct bt_field_wrapper *create_event_header_field( field_wrapper = bt_field_wrapper_create( &stream_class->event_header_field_pool, - bt_stream_class_borrow_event_header_field_class(stream_class)); + stream_class->event_header_fc); if (!field_wrapper) { goto error; } @@ -145,7 +141,7 @@ struct bt_event *bt_event_new(struct bt_event_class *event_class) stream_class = bt_event_class_borrow_stream_class(event_class); BT_ASSERT(stream_class); - if (bt_stream_class_borrow_event_header_field_class(stream_class)) { + if (stream_class->event_header_fc) { event->header_field = create_event_header_field(stream_class); if (!event->header_field) { BT_LOGE_STR("Cannot create event header field."); @@ -153,8 +149,7 @@ struct bt_event *bt_event_new(struct bt_event_class *event_class) } } - fc = bt_stream_class_borrow_event_common_context_field_class( - stream_class); + fc = stream_class->event_common_context_fc; if (fc) { event->common_context_field = bt_field_create(fc); if (!event->common_context_field) { @@ -163,7 +158,7 @@ struct bt_event *bt_event_new(struct bt_event_class *event_class) } } - fc = bt_event_class_borrow_specific_context_field_class(event_class); + fc = event_class->specific_context_fc; if (fc) { event->specific_context_field = bt_field_create(fc); if (!event->specific_context_field) { @@ -172,7 +167,7 @@ struct bt_event *bt_event_new(struct bt_event_class *event_class) } } - fc = bt_event_class_borrow_payload_field_class(event_class); + fc = event_class->payload_fc; if (fc) { event->payload_field = bt_field_create(fc); if (!event->payload_field) { @@ -182,10 +177,10 @@ struct bt_event *bt_event_new(struct bt_event_class *event_class) } if (stream_class->default_clock_class) { - event->default_cv = bt_clock_value_create( + event->default_cs = bt_clock_snapshot_create( stream_class->default_clock_class); - if (!event->default_cv) { - /* bt_clock_value_create() logs errors */ + if (!event->default_cs) { + /* bt_clock_snapshot_create() logs errors */ goto error; } } @@ -208,36 +203,76 @@ struct bt_event_class *bt_event_borrow_class(struct bt_event *event) return event->class; } +const struct bt_event_class *bt_event_borrow_class_const( + const struct bt_event *event) +{ + return bt_event_borrow_class((void *) event); +} + struct bt_stream *bt_event_borrow_stream(struct bt_event *event) { BT_ASSERT_PRE_NON_NULL(event, "Event"); return event->packet ? event->packet->stream : NULL; } +const struct bt_stream *bt_event_borrow_stream_const( + const struct bt_event *event) +{ + return bt_event_borrow_stream((void *) event); +} + struct bt_field *bt_event_borrow_header_field(struct bt_event *event) { BT_ASSERT_PRE_NON_NULL(event, "Event"); return event->header_field ? event->header_field->field : NULL; } +const struct bt_field *bt_event_borrow_header_field_const( + const struct bt_event *event) +{ + BT_ASSERT_PRE_NON_NULL(event, "Event"); + return event->header_field ? event->header_field->field : NULL; +} + struct bt_field *bt_event_borrow_common_context_field(struct bt_event *event) { BT_ASSERT_PRE_NON_NULL(event, "Event"); return event->common_context_field; } +const struct bt_field *bt_event_borrow_common_context_field_const( + const struct bt_event *event) +{ + BT_ASSERT_PRE_NON_NULL(event, "Event"); + return event->common_context_field; +} + struct bt_field *bt_event_borrow_specific_context_field(struct bt_event *event) { BT_ASSERT_PRE_NON_NULL(event, "Event"); return event->specific_context_field; } +const struct bt_field *bt_event_borrow_specific_context_field_const( + const struct bt_event *event) +{ + BT_ASSERT_PRE_NON_NULL(event, "Event"); + return event->specific_context_field; +} + struct bt_field *bt_event_borrow_payload_field(struct bt_event *event) { BT_ASSERT_PRE_NON_NULL(event, "Event"); return event->payload_field; } +const struct bt_field *bt_event_borrow_payload_field_const( + const struct bt_event *event) +{ + BT_ASSERT_PRE_NON_NULL(event, "Event"); + return event->payload_field; +} + static void release_event_header_field(struct bt_field_wrapper *field_wrapper, struct bt_event *event) @@ -262,36 +297,41 @@ void bt_event_destroy(struct bt_event *event) if (event->header_field) { BT_LOGD_STR("Releasing event's header field."); release_event_header_field(event->header_field, event); + event->header_field = NULL; } if (event->common_context_field) { BT_LOGD_STR("Destroying event's stream event context field."); bt_field_destroy(event->common_context_field); + event->common_context_field = NULL; } if (event->specific_context_field) { BT_LOGD_STR("Destroying event's context field."); bt_field_destroy(event->specific_context_field); + event->specific_context_field = NULL; } if (event->payload_field) { BT_LOGD_STR("Destroying event's payload field."); bt_field_destroy(event->payload_field); + event->payload_field = NULL; } BT_LOGD_STR("Putting event's class."); - bt_put(event->class); + bt_object_put_ref(event->class); - if (event->default_cv) { - bt_clock_value_recycle(event->default_cv); + if (event->default_cs) { + bt_clock_snapshot_recycle(event->default_cs); + event->default_cs = NULL; } BT_LOGD_STR("Putting event's packet."); - bt_put(event->packet); + BT_OBJECT_PUT_REF_AND_RESET(event->packet); g_free(event); } -int bt_event_set_default_clock_value(struct bt_event *event, +void bt_event_set_default_clock_snapshot(struct bt_event *event, uint64_t value_cycles) { struct bt_stream_class *sc; @@ -303,20 +343,20 @@ int bt_event_set_default_clock_value(struct bt_event *event, BT_ASSERT_PRE(sc->default_clock_class, "Event's stream class has no default clock class: " "%![ev-]+e, %![sc-]+S", event, sc); - BT_ASSERT(event->default_cv); - bt_clock_value_set_value_inline(event->default_cv, value_cycles); - BT_LIB_LOGV("Set event's default clock value: %![event-]+e, " + BT_ASSERT(event->default_cs); + bt_clock_snapshot_set_value_inline(event->default_cs, value_cycles); + BT_LIB_LOGV("Set event's default clock snapshot: %![event-]+e, " "value=%" PRIu64, event, value_cycles); - return 0; } -enum bt_clock_value_status bt_event_borrow_default_clock_value( - struct bt_event *event, struct bt_clock_value **clock_value) +enum bt_clock_snapshot_state bt_event_borrow_default_clock_snapshot_const( + const struct bt_event *event, + const struct bt_clock_snapshot **clock_snapshot) { BT_ASSERT_PRE_NON_NULL(event, "Event"); - BT_ASSERT_PRE_NON_NULL(clock_value, "Clock value (output)"); - *clock_value = event->default_cv; - return BT_CLOCK_VALUE_STATUS_KNOWN; + BT_ASSERT_PRE_NON_NULL(clock_snapshot, "Clock snapshot (output)"); + *clock_snapshot = event->default_cs; + return BT_CLOCK_SNAPSHOT_STATE_KNOWN; } struct bt_packet *bt_event_borrow_packet(struct bt_event *event) @@ -325,7 +365,13 @@ struct bt_packet *bt_event_borrow_packet(struct bt_event *event) return event->packet; } -int bt_event_move_header(struct bt_event *event, +const struct bt_packet *bt_event_borrow_packet_const( + const struct bt_event *event) +{ + return bt_event_borrow_packet((void *) event); +} + +enum bt_event_status bt_event_move_header_field(struct bt_event *event, struct bt_event_header_field *header_field) { struct bt_stream_class *stream_class; @@ -336,7 +382,7 @@ int bt_event_move_header(struct bt_event *event, BT_ASSERT_PRE_EVENT_HOT(event); stream_class = bt_event_class_borrow_stream_class_inline(event->class); BT_ASSERT_PRE(stream_class->event_header_fc, - "Stream class has no event header field classe: %!+S", + "Stream class has no event header field class: %!+S", stream_class); /* Recycle current header field: always exists */ @@ -345,5 +391,5 @@ int bt_event_move_header(struct bt_event *event, /* Move new field */ event->header_field = field_wrapper; - return 0; + return BT_EVENT_STATUS_OK; }