X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Ftrace-ir%2Fpacket.c;h=e005ceaa1f9524c3614be6fd1f35162584fbab96;hb=3fadfbc0c91f82c46bd36e6e0657ea93570c9db1;hp=501a8249c407b63c4cfa1a8218a7239995e23317;hpb=dc68f16da7c8a96930d36f50489d6697c852b733;p=babeltrace.git diff --git a/lib/trace-ir/packet.c b/lib/trace-ir/packet.c index 501a8249..e005ceaa 100644 --- a/lib/trace-ir/packet.c +++ b/lib/trace-ir/packet.c @@ -21,23 +21,22 @@ */ #define BT_LOG_TAG "PACKET" -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #define BT_ASSERT_PRE_PACKET_HOT(_packet) \ @@ -55,18 +54,6 @@ const struct bt_stream *bt_packet_borrow_stream_const( return bt_packet_borrow_stream((void *) packet); } -struct bt_field *bt_packet_borrow_header_field(struct bt_packet *packet) -{ - BT_ASSERT_PRE_NON_NULL(packet, "Packet"); - return packet->header_field ? packet->header_field->field : NULL; -} - -const struct bt_field *bt_packet_borrow_header_field_const( - const struct bt_packet *packet) -{ - return bt_packet_borrow_header_field((void *) packet); -} - struct bt_field *bt_packet_borrow_context_field(struct bt_packet *packet) { BT_ASSERT_PRE_NON_NULL(packet, "Packet"); @@ -89,12 +76,6 @@ void _bt_packet_set_is_frozen(const struct bt_packet *packet, bool is_frozen) BT_LIB_LOGD("Setting packet's frozen state: %![packet-]+a, " "is-frozen=%d", packet, is_frozen); - if (packet->header_field) { - BT_LOGD_STR("Setting packet's header field's frozen state."); - bt_field_set_is_frozen(packet->header_field->field, - is_frozen); - } - if (packet->context_field) { BT_LOGD_STR("Setting packet's context field's frozen state."); bt_field_set_is_frozen(packet->context_field->field, @@ -104,15 +85,6 @@ void _bt_packet_set_is_frozen(const struct bt_packet *packet, bool is_frozen) ((struct bt_packet *) packet)->frozen = is_frozen; } -static inline -void reset_counter_snapshots(struct bt_packet *packet) -{ - packet->discarded_event_counter_snapshot.base.avail = - BT_PROPERTY_AVAILABILITY_NOT_AVAILABLE; - packet->packet_counter_snapshot.base.avail = - BT_PROPERTY_AVAILABILITY_NOT_AVAILABLE; -} - static inline void reset_packet(struct bt_packet *packet) { @@ -120,37 +92,10 @@ void reset_packet(struct bt_packet *packet) BT_LIB_LOGD("Resetting packet: %!+a", packet); bt_packet_set_is_frozen(packet, false); - if (packet->header_field) { - bt_field_set_is_frozen(packet->header_field->field, false); - bt_field_reset(packet->header_field->field); - } - if (packet->context_field) { bt_field_set_is_frozen(packet->context_field->field, false); bt_field_reset(packet->context_field->field); } - - if (packet->default_beginning_cs) { - bt_clock_snapshot_reset(packet->default_beginning_cs); - } - - if (packet->default_end_cs) { - bt_clock_snapshot_reset(packet->default_end_cs); - } - - reset_counter_snapshots(packet); -} - -static -void recycle_header_field(struct bt_field_wrapper *header_field, - struct bt_trace_class *tc) -{ - BT_ASSERT(header_field); - BT_LIB_LOGD("Recycling packet header field: " - "addr=%p, %![tc-]+T, %![field-]+f", header_field, - tc, header_field->field); - bt_object_pool_recycle_object(&tc->packet_header_field_pool, - header_field); } static @@ -208,19 +153,6 @@ void bt_packet_destroy(struct bt_packet *packet) { BT_LIB_LOGD("Destroying packet: %!+a", packet); - if (packet->header_field) { - if (packet->stream) { - BT_LOGD_STR("Recycling packet's header field."); - recycle_header_field(packet->header_field, - bt_stream_class_borrow_trace_class_inline( - packet->stream->class)); - } else { - bt_field_wrapper_destroy(packet->header_field); - } - - packet->header_field = NULL; - } - if (packet->context_field) { if (packet->stream) { BT_LOGD_STR("Recycling packet's context field."); @@ -233,18 +165,6 @@ void bt_packet_destroy(struct bt_packet *packet) packet->context_field = NULL; } - if (packet->default_beginning_cs) { - BT_LOGD_STR("Recycling beginning clock snapshot."); - bt_clock_snapshot_recycle(packet->default_beginning_cs); - packet->default_beginning_cs = NULL; - } - - if (packet->default_end_cs) { - BT_LOGD_STR("Recycling end clock snapshot."); - bt_clock_snapshot_recycle(packet->default_end_cs); - packet->default_end_cs = NULL; - } - BT_LOGD_STR("Putting packet's stream."); BT_OBJECT_PUT_REF_AND_RESET(packet->stream); g_free(packet); @@ -271,17 +191,6 @@ struct bt_packet *bt_packet_new(struct bt_stream *stream) trace_class = bt_stream_class_borrow_trace_class_inline(stream->class); BT_ASSERT(trace_class); - if (trace_class->packet_header_fc) { - BT_LOGD_STR("Creating initial packet header field."); - packet->header_field = bt_field_wrapper_create( - &trace_class->packet_header_field_pool, - trace_class->packet_header_fc); - if (!packet->header_field) { - BT_LOGE_STR("Cannot create packet header field wrapper."); - goto error; - } - } - if (stream->class->packet_context_fc) { BT_LOGD_STR("Creating initial packet context field."); packet->context_field = bt_field_wrapper_create( @@ -293,27 +202,6 @@ struct bt_packet *bt_packet_new(struct bt_stream *stream) } } - if (stream->class->default_clock_class) { - if (stream->class->packets_have_default_beginning_cs) { - packet->default_beginning_cs = bt_clock_snapshot_create( - stream->class->default_clock_class); - if (!packet->default_beginning_cs) { - /* bt_clock_snapshot_create() logs errors */ - goto error; - } - } - - if (stream->class->packets_have_default_end_cs) { - packet->default_end_cs = bt_clock_snapshot_create( - stream->class->default_clock_class); - if (!packet->default_end_cs) { - /* bt_clock_snapshot_create() logs errors */ - goto error; - } - } - } - - reset_counter_snapshots(packet); BT_LIB_LOGD("Created packet object: %!+a", packet); goto end; @@ -324,9 +212,10 @@ end: return packet; } -struct bt_packet *bt_packet_create(struct bt_stream *stream) +struct bt_packet *bt_packet_create(const struct bt_stream *c_stream) { struct bt_packet *packet = NULL; + struct bt_stream *stream = (void *) c_stream; BT_ASSERT_PRE_NON_NULL(stream, "Stream"); packet = bt_object_pool_create_object(&stream->packet_pool); @@ -346,34 +235,7 @@ end: return (void *) packet; } -int bt_packet_move_header_field(struct bt_packet *packet, - struct bt_packet_header_field *header_field) -{ - struct bt_trace_class *tc; - struct bt_field_wrapper *field_wrapper = (void *) header_field; - - BT_ASSERT_PRE_NON_NULL(packet, "Packet"); - BT_ASSERT_PRE_NON_NULL(field_wrapper, "Header field"); - BT_ASSERT_PRE_PACKET_HOT(packet); - tc = bt_stream_class_borrow_trace_class_inline(packet->stream->class); - BT_ASSERT_PRE(tc->packet_header_fc, - "Trace class has no packet header field class: %!+T", tc); - BT_ASSERT_PRE(field_wrapper->field->class == - tc->packet_header_fc, - "Unexpected packet header field's class: " - "%![fc-]+F, %![expected-fc-]+F", field_wrapper->field->class, - tc->packet_header_fc); - - /* Recycle current header field: always exists */ - BT_ASSERT(packet->header_field); - recycle_header_field(packet->header_field, tc); - - /* Move new field */ - packet->header_field = field_wrapper; - return 0; -} - -int bt_packet_move_context_field(struct bt_packet *packet, +enum bt_packet_status bt_packet_move_context_field(struct bt_packet *packet, struct bt_packet_context_field *context_field) { struct bt_stream_class *stream_class; @@ -388,7 +250,7 @@ int bt_packet_move_context_field(struct bt_packet *packet, stream_class); BT_ASSERT_PRE(field_wrapper->field->class == stream_class->packet_context_fc, - "Unexpected packet header field's class: " + "Unexpected packet context field's class: " "%![fc-]+F, %![expected-fc-]+F", field_wrapper->field->class, stream_class->packet_context_fc); @@ -398,112 +260,7 @@ int bt_packet_move_context_field(struct bt_packet *packet, /* Move new field */ packet->context_field = field_wrapper; - return 0; -} - -void bt_packet_set_default_beginning_clock_snapshot(struct bt_packet *packet, - uint64_t value_cycles) -{ - struct bt_stream_class *sc; - - BT_ASSERT_PRE_NON_NULL(packet, "Packet"); - BT_ASSERT_PRE_PACKET_HOT(packet); - sc = packet->stream->class; - BT_ASSERT(sc); - BT_ASSERT_PRE(sc->default_clock_class, - "Packet's stream class has no default clock class: " - "%![packet-]+a, %![sc-]+S", packet, sc); - BT_ASSERT_PRE(sc->packets_have_default_beginning_cs, - "Packet's stream class indicates that its packets have " - "no default beginning clock snapshot: %![packet-]+a, %![sc-]+S", - packet, sc); - BT_ASSERT(packet->default_beginning_cs); - bt_clock_snapshot_set_value_inline(packet->default_beginning_cs, - value_cycles); - BT_LIB_LOGV("Set packet's default beginning clock snapshot: " - "%![packet-]+a, value=%" PRIu64, packet, value_cycles); -} - -enum bt_clock_snapshot_state bt_packet_borrow_default_beginning_clock_snapshot( - const struct bt_packet *packet, - const struct bt_clock_snapshot **clock_snapshot) -{ - BT_ASSERT_PRE_NON_NULL(packet, "Packet"); - BT_ASSERT_PRE_NON_NULL(clock_snapshot, "Clock snapshot (output)"); - *clock_snapshot = packet->default_beginning_cs; - return BT_CLOCK_SNAPSHOT_STATE_KNOWN; -} - -void bt_packet_set_default_end_clock_snapshot(struct bt_packet *packet, - uint64_t value_cycles) -{ - struct bt_stream_class *sc; - - BT_ASSERT_PRE_NON_NULL(packet, "Packet"); - BT_ASSERT_PRE_PACKET_HOT(packet); - sc = packet->stream->class; - BT_ASSERT(sc); - BT_ASSERT_PRE(sc->default_clock_class, - "Packet's stream class has no default clock class: " - "%![packet-]+a, %![sc-]+S", packet, sc); - BT_ASSERT_PRE(sc->packets_have_default_end_cs, - "Packet's stream class indicates that its packets have " - "no default end clock snapshot: %![packet-]+a, %![sc-]+S", - packet, sc); - BT_ASSERT(packet->default_end_cs); - bt_clock_snapshot_set_value_inline(packet->default_end_cs, value_cycles); - BT_LIB_LOGV("Set packet's default end clock snapshot: " - "%![packet-]+a, value=%" PRIu64, packet, value_cycles); -} - -enum bt_clock_snapshot_state bt_packet_borrow_default_end_clock_snapshot( - const struct bt_packet *packet, - const struct bt_clock_snapshot **clock_snapshot) -{ - BT_ASSERT_PRE_NON_NULL(packet, "Packet"); - BT_ASSERT_PRE_NON_NULL(clock_snapshot, "Clock snapshot (output)"); - *clock_snapshot = packet->default_end_cs; - return BT_CLOCK_SNAPSHOT_STATE_KNOWN; -} - -enum bt_property_availability bt_packet_get_discarded_event_counter_snapshot( - const struct bt_packet *packet, uint64_t *value) -{ - BT_ASSERT_PRE_NON_NULL(packet, "Packet"); - BT_ASSERT_PRE_NON_NULL(value, "Value (output)"); - *value = packet->discarded_event_counter_snapshot.value; - return packet->discarded_event_counter_snapshot.base.avail; -} - -void bt_packet_set_discarded_event_counter_snapshot(struct bt_packet *packet, - uint64_t value) -{ - BT_ASSERT_PRE_NON_NULL(packet, "Packet"); - BT_ASSERT_PRE_PACKET_HOT(packet); - BT_ASSERT_PRE(packet->stream->class->packets_have_discarded_event_counter_snapshot, - "Packet's stream's discarded event counter is not enabled: " - "%![packet-]+a", packet); - bt_property_uint_set(&packet->discarded_event_counter_snapshot, value); -} - -enum bt_property_availability bt_packet_get_packet_counter_snapshot( - const struct bt_packet *packet, uint64_t *value) -{ - BT_ASSERT_PRE_NON_NULL(packet, "Packet"); - BT_ASSERT_PRE_NON_NULL(value, "Value (output)"); - *value = packet->packet_counter_snapshot.value; - return packet->packet_counter_snapshot.base.avail; -} - -void bt_packet_set_packet_counter_snapshot(struct bt_packet *packet, - uint64_t value) -{ - BT_ASSERT_PRE_NON_NULL(packet, "Packet"); - BT_ASSERT_PRE_PACKET_HOT(packet); - BT_ASSERT_PRE(packet->stream->class->packets_have_packet_counter_snapshot, - "Packet's stream's packet counter is not enabled: " - "%![packet-]+a", packet); - bt_property_uint_set(&packet->packet_counter_snapshot, value); + return BT_PACKET_STATUS_OK; } void bt_packet_get_ref(const struct bt_packet *packet)