X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Ftrace-ir%2Fpacket.c;h=cab9f89cef36b639f48dc766b3671bce2c012ffb;hb=58085ca4d234fafe66bf875c32364598e180eafa;hp=3c01165fbd08e0ace523116f350b4bf68798be68;hpb=28e6ca8b6e08d1cdd1af81ae819aa39baa206eaf;p=babeltrace.git diff --git a/lib/trace-ir/packet.c b/lib/trace-ir/packet.c index 3c01165f..cab9f89c 100644 --- a/lib/trace-ir/packet.c +++ b/lib/trace-ir/packet.c @@ -1,5 +1,5 @@ /* - * Copyright 2016 Philippe Proulx + * Copyright 2016-2018 Philippe Proulx * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -24,8 +24,8 @@ #include #include -#include -#include +#include +#include #include #include #include @@ -34,10 +34,9 @@ #include #include #include -#include +#include #include #include -#include #include #include @@ -50,22 +49,10 @@ struct bt_stream *bt_packet_borrow_stream(struct bt_packet *packet) return packet->stream; } -struct bt_private_stream *bt_private_packet_borrow_stream( - struct bt_private_packet *packet) +const struct bt_stream *bt_packet_borrow_stream_const( + const struct bt_packet *packet) { - return (void *) 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; -} - -struct bt_private_field *bt_private_packet_borrow_header_field( - struct bt_private_packet *packet) -{ - return (void *) bt_packet_borrow_header_field((void *) packet); + return bt_packet_borrow_stream((void *) packet); } struct bt_field *bt_packet_borrow_context_field(struct bt_packet *packet) @@ -74,14 +61,14 @@ struct bt_field *bt_packet_borrow_context_field(struct bt_packet *packet) return packet->context_field ? packet->context_field->field : NULL; } -struct bt_private_field *bt_private_packet_borrow_context_field( - struct bt_private_packet *packet) +const struct bt_field *bt_packet_borrow_context_field_const( + const struct bt_packet *packet) { - return (void *) bt_packet_borrow_context_field((void *) packet); + return bt_packet_borrow_context_field((void *) packet); } BT_HIDDEN -void _bt_packet_set_is_frozen(struct bt_packet *packet, bool is_frozen) +void _bt_packet_set_is_frozen(const struct bt_packet *packet, bool is_frozen) { if (!packet) { return; @@ -90,19 +77,13 @@ void _bt_packet_set_is_frozen(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, is_frozen); } - packet->frozen = is_frozen; + ((struct bt_packet *) packet)->frozen = is_frozen; } static inline @@ -121,39 +102,22 @@ 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_cv) { - bt_clock_value_reset(packet->default_beginning_cv); + if (packet->default_beginning_cs) { + bt_clock_snapshot_reset(packet->default_beginning_cs); } - if (packet->default_end_cv) { - bt_clock_value_reset(packet->default_end_cv); + 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 *trace) -{ - BT_ASSERT(header_field); - BT_LIB_LOGD("Recycling packet header field: " - "addr=%p, %![trace-]+t, %![field-]+f", header_field, - trace, header_field->field); - bt_object_pool_recycle_object(&trace->packet_header_field_pool, - header_field); -} - static void recycle_context_field(struct bt_field_wrapper *context_field, struct bt_stream_class *stream_class) @@ -209,17 +173,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_inline( - packet->stream->class)); - } else { - bt_field_wrapper_destroy(packet->header_field); - } - } - if (packet->context_field) { if (packet->stream) { BT_LOGD_STR("Recycling packet's context field."); @@ -228,20 +181,24 @@ void bt_packet_destroy(struct bt_packet *packet) } else { bt_field_wrapper_destroy(packet->context_field); } + + packet->context_field = NULL; } - if (packet->default_beginning_cv) { - BT_LOGD_STR("Recycling beginning clock value."); - bt_clock_value_recycle(packet->default_beginning_cv); + 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_cv) { - BT_LOGD_STR("Recycling end clock value."); - bt_clock_value_recycle(packet->default_end_cv); + 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(packet->stream); + BT_OBJECT_PUT_REF_AND_RESET(packet->stream); g_free(packet); } @@ -249,7 +206,7 @@ BT_HIDDEN struct bt_packet *bt_packet_new(struct bt_stream *stream) { struct bt_packet *packet = NULL; - struct bt_trace *trace = NULL; + struct bt_trace_class *trace_class = NULL; BT_ASSERT(stream); BT_LIB_LOGD("Creating packet object: %![stream-]+s", stream); @@ -261,20 +218,10 @@ struct bt_packet *bt_packet_new(struct bt_stream *stream) bt_object_init_shared(&packet->base, (bt_object_release_func) bt_packet_recycle); - packet->stream = bt_object_get_ref(stream); - trace = bt_stream_class_borrow_trace_inline(stream->class); - BT_ASSERT(trace); - - if (trace->packet_header_fc) { - BT_LOGD_STR("Creating initial packet header field."); - packet->header_field = bt_field_wrapper_create( - &trace->packet_header_field_pool, - trace->packet_header_fc); - if (!packet->header_field) { - BT_LOGE_STR("Cannot create packet header field wrapper."); - goto error; - } - } + packet->stream = stream; + bt_object_get_no_null_check(stream); + trace_class = bt_stream_class_borrow_trace_class_inline(stream->class); + BT_ASSERT(trace_class); if (stream->class->packet_context_fc) { BT_LOGD_STR("Creating initial packet context field."); @@ -288,20 +235,20 @@ struct bt_packet *bt_packet_new(struct bt_stream *stream) } if (stream->class->default_clock_class) { - if (stream->class->packets_have_default_beginning_cv) { - packet->default_beginning_cv = bt_clock_value_create( + 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_cv) { - /* bt_clock_value_create() logs errors */ + if (!packet->default_beginning_cs) { + /* bt_clock_snapshot_create() logs errors */ goto error; } } - if (stream->class->packets_have_default_end_cv) { - packet->default_end_cv = bt_clock_value_create( + 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_cv) { - /* bt_clock_value_create() logs errors */ + if (!packet->default_end_cs) { + /* bt_clock_snapshot_create() logs errors */ goto error; } } @@ -318,11 +265,10 @@ end: return packet; } -struct bt_private_packet *bt_private_packet_create( - struct bt_private_stream *priv_stream) +struct bt_packet *bt_packet_create(const struct bt_stream *c_stream) { - struct bt_stream *stream = (void *) priv_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); @@ -342,41 +288,9 @@ end: return (void *) packet; } -int bt_private_packet_move_header_field( - struct bt_private_packet *priv_packet, - struct bt_private_packet_header_field *header_field) -{ - struct bt_packet *packet = (void *) priv_packet; - struct bt_trace *trace; - 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); - trace = bt_stream_class_borrow_trace_inline(packet->stream->class); - BT_ASSERT_PRE(trace->packet_header_fc, - "Trace has no packet header field classe: %!+t", - trace); - BT_ASSERT_PRE(field_wrapper->field->class == - trace->packet_header_fc, - "Unexpected packet header field's class: " - "%![fc-]+F, %![expected-fc-]+F", field_wrapper->field->class, - trace->packet_header_fc); - - /* Recycle current header field: always exists */ - BT_ASSERT(packet->header_field); - recycle_header_field(packet->header_field, trace); - - /* Move new field */ - packet->header_field = field_wrapper; - return 0; -} - -int bt_private_packet_move_context_field( - struct bt_private_packet *priv_packet, - struct bt_private_packet_context_field *context_field) +enum bt_packet_status bt_packet_move_context_field(struct bt_packet *packet, + struct bt_packet_context_field *context_field) { - struct bt_packet *packet = (void *) priv_packet; struct bt_stream_class *stream_class; struct bt_field_wrapper *field_wrapper = (void *) context_field; @@ -385,11 +299,11 @@ int bt_private_packet_move_context_field( BT_ASSERT_PRE_HOT(packet, "Packet", ": %!+a", packet); stream_class = packet->stream->class; BT_ASSERT_PRE(stream_class->packet_context_fc, - "Stream class has no packet context field classe: %!+S", + "Stream class has no packet context field class: %!+S", 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); @@ -399,14 +313,12 @@ int bt_private_packet_move_context_field( /* Move new field */ packet->context_field = field_wrapper; - return 0; + return BT_PACKET_STATUS_OK; } -int bt_private_packet_set_default_beginning_clock_value( - struct bt_private_packet *priv_packet, +void bt_packet_set_default_beginning_clock_snapshot(struct bt_packet *packet, uint64_t value_cycles) { - struct bt_packet *packet = (void *) priv_packet; struct bt_stream_class *sc; BT_ASSERT_PRE_NON_NULL(packet, "Packet"); @@ -416,31 +328,30 @@ int bt_private_packet_set_default_beginning_clock_value( 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_cv, + BT_ASSERT_PRE(sc->packets_have_default_beginning_cs, "Packet's stream class indicates that its packets have " - "no default beginning clock value: %![packet-]+a, %![sc-]+S", + "no default beginning clock snapshot: %![packet-]+a, %![sc-]+S", packet, sc); - BT_ASSERT(packet->default_beginning_cv); - bt_clock_value_set_value_inline(packet->default_beginning_cv, value_cycles); - BT_LIB_LOGV("Set packet's default beginning clock value: " + BT_ASSERT(packet->default_beginning_cs); + bt_clock_snapshot_set_raw_value(packet->default_beginning_cs, + value_cycles); + BT_LIB_LOGV("Set packet's default beginning clock snapshot: " "%![packet-]+a, value=%" PRIu64, packet, value_cycles); - return 0; } -enum bt_clock_value_status bt_packet_borrow_default_beginning_clock_value( - struct bt_packet *packet, struct bt_clock_value **clock_value) +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_value, "Clock value (output)"); - *clock_value = packet->default_beginning_cv; - return BT_CLOCK_VALUE_STATUS_KNOWN; + BT_ASSERT_PRE_NON_NULL(clock_snapshot, "Clock snapshot (output)"); + *clock_snapshot = packet->default_beginning_cs; + return BT_CLOCK_SNAPSHOT_STATE_KNOWN; } -int bt_private_packet_set_default_end_clock_value( - struct bt_private_packet *priv_packet, +void bt_packet_set_default_end_clock_snapshot(struct bt_packet *packet, uint64_t value_cycles) { - struct bt_packet *packet = (void *) priv_packet; struct bt_stream_class *sc; BT_ASSERT_PRE_NON_NULL(packet, "Packet"); @@ -450,28 +361,28 @@ int bt_private_packet_set_default_end_clock_value( 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_cv, + BT_ASSERT_PRE(sc->packets_have_default_end_cs, "Packet's stream class indicates that its packets have " - "no default end clock value: %![packet-]+a, %![sc-]+S", + "no default end clock snapshot: %![packet-]+a, %![sc-]+S", packet, sc); - BT_ASSERT(packet->default_end_cv); - bt_clock_value_set_value_inline(packet->default_end_cv, value_cycles); - BT_LIB_LOGV("Set packet's default end clock value: " + BT_ASSERT(packet->default_end_cs); + bt_clock_snapshot_set_raw_value(packet->default_end_cs, value_cycles); + BT_LIB_LOGV("Set packet's default end clock snapshot: " "%![packet-]+a, value=%" PRIu64, packet, value_cycles); - return 0; } -enum bt_clock_value_status bt_packet_borrow_default_end_clock_value( - struct bt_packet *packet, struct bt_clock_value **clock_value) +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_value, "Clock value (output)"); - *clock_value = packet->default_end_cv; - return BT_CLOCK_VALUE_STATUS_KNOWN; + 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( - struct bt_packet *packet, uint64_t *value) + const struct bt_packet *packet, uint64_t *value) { BT_ASSERT_PRE_NON_NULL(packet, "Packet"); BT_ASSERT_PRE_NON_NULL(value, "Value (output)"); @@ -479,22 +390,19 @@ enum bt_property_availability bt_packet_get_discarded_event_counter_snapshot( return packet->discarded_event_counter_snapshot.base.avail; } -int bt_private_packet_set_discarded_event_counter_snapshot( - struct bt_private_packet *priv_packet, uint64_t value) +void bt_packet_set_discarded_event_counter_snapshot(struct bt_packet *packet, + uint64_t value) { - struct bt_packet *packet = (void *) priv_packet; - 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); - return 0; } enum bt_property_availability bt_packet_get_packet_counter_snapshot( - struct bt_packet *packet, uint64_t *value) + const struct bt_packet *packet, uint64_t *value) { BT_ASSERT_PRE_NON_NULL(packet, "Packet"); BT_ASSERT_PRE_NON_NULL(value, "Value (output)"); @@ -502,22 +410,23 @@ enum bt_property_availability bt_packet_get_packet_counter_snapshot( return packet->packet_counter_snapshot.base.avail; } -int bt_private_packet_set_packet_counter_snapshot( - struct bt_private_packet *priv_packet, uint64_t value) +void bt_packet_set_packet_counter_snapshot(struct bt_packet *packet, + uint64_t value) { - struct bt_packet *packet = (void *) priv_packet; - 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 0; } -struct bt_packet *bt_packet_borrow_from_private( - struct bt_private_packet *priv_packet) +void bt_packet_get_ref(const struct bt_packet *packet) +{ + bt_object_get_ref(packet); +} + +void bt_packet_put_ref(const struct bt_packet *packet) { - return (void *) priv_packet; + bt_object_put_ref(packet); }