X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Flib%2Fgraph%2Fmessage%2Fdiscarded-items.c;h=313348c9956aa2221f4bc7e64b41465dc2307482;hb=1e123ed605bf4936226d675e6725691bff249f7f;hp=0b19abc367de1704417921bfc20437d49f5896b7;hpb=17f3083a0b4d318d3303c8a5bfa63db6a874ec73;p=babeltrace.git diff --git a/src/lib/graph/message/discarded-items.c b/src/lib/graph/message/discarded-items.c index 0b19abc3..313348c9 100644 --- a/src/lib/graph/message/discarded-items.c +++ b/src/lib/graph/message/discarded-items.c @@ -1,23 +1,7 @@ /* - * Copyright 2019 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 - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: + * SPDX-License-Identifier: MIT * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. + * Copyright 2019 Philippe Proulx */ #define BT_LOG_TAG "LIB/MSG-DISCARDED-ITEMS" @@ -25,7 +9,7 @@ #include -#include "lib/assert-pre.h" +#include "lib/assert-cond.h" #include "lib/object.h" #include "compat/compiler.h" #include @@ -34,13 +18,29 @@ #include "lib/trace-ir/stream.h" #include "lib/property.h" #include "lib/graph/message/message.h" -#include -#include -#include -#include #include "discarded-items.h" +#define BT_ASSERT_PRE_MSG_IS_DISC_EVENTS(_msg) \ + BT_ASSERT_PRE_MSG_HAS_TYPE("message", (_msg), \ + "discarded-events", BT_MESSAGE_TYPE_DISCARDED_EVENTS); + +#define BT_ASSERT_PRE_DEV_MSG_IS_DISC_EVENTS(_msg) \ + BT_ASSERT_PRE_DEV_MSG_HAS_TYPE("message", (_msg), \ + "discarded-events", BT_MESSAGE_TYPE_DISCARDED_EVENTS); + +#define BT_ASSERT_PRE_MSG_IS_DISC_PACKETS(_msg) \ + BT_ASSERT_PRE_MSG_HAS_TYPE("message", (_msg), \ + "discarded-packets", BT_MESSAGE_TYPE_DISCARDED_PACKETS); + +#define BT_ASSERT_PRE_DEV_MSG_IS_DISC_PACKETS(_msg) \ + BT_ASSERT_PRE_DEV_MSG_HAS_TYPE("message", (_msg), \ + "discarded-packets", BT_MESSAGE_TYPE_DISCARDED_PACKETS); + +#define BT_ASSERT_PRE_DEV_COUNT_OUTPUT_NON_NULL(_count) \ + BT_ASSERT_PRE_DEV_NON_NULL("count-output", count, \ + "Count (output)"); + static void destroy_discarded_items_message(struct bt_object *obj) { @@ -68,15 +68,17 @@ struct bt_message *create_discarded_items_message( struct bt_self_message_iterator *self_msg_iter, enum bt_message_type type, struct bt_stream *stream, bool with_cs, - uint64_t beginning_raw_value, uint64_t end_raw_value) + uint64_t beginning_raw_value, uint64_t end_raw_value, + const char *api_func, + const char *sc_supports_disc_precond_id) { struct bt_message_discarded_items *message; struct bt_stream_class *stream_class; bool has_support; bool need_cs; - BT_ASSERT_PRE_NON_NULL(self_msg_iter, "Message iterator"); - BT_ASSERT_PRE_NON_NULL(stream, "Stream"); + BT_ASSERT_PRE_MSG_ITER_NON_NULL_FROM_FUNC(api_func, self_msg_iter); + BT_ASSERT_PRE_STREAM_NON_NULL_FROM_FUNC(api_func, stream); stream_class = bt_stream_borrow_class(stream); BT_ASSERT(stream_class); @@ -88,30 +90,33 @@ struct bt_message *create_discarded_items_message( need_cs = stream_class->discarded_packets_have_default_clock_snapshots; } - BT_ASSERT_PRE(has_support, + BT_ASSERT_PRE_FROM_FUNC(api_func, sc_supports_disc_precond_id, + has_support, "Stream class does not support discarded events or packets: " "type=%s, %![stream-]+s, %![sc-]+S", - bt_message_type_string(type), stream, stream_class); - BT_ASSERT_PRE(need_cs ? with_cs : true, + bt_common_message_type_string(type), stream, stream_class); + BT_ASSERT_PRE_FROM_FUNC(api_func, "with-default-clock-snapshots", + need_cs ? with_cs : true, "Unexpected stream class configuration when creating " "a discarded events or discarded packets message: " "default clock snapshots are needed, but none was provided: " "type=%s, %![stream-]+s, %![sc-]+S, with-cs=%d, " "cs-begin-val=%" PRIu64 ", cs-end-val=%" PRIu64, - bt_message_type_string(type), stream, stream_class, + bt_common_message_type_string(type), stream, stream_class, with_cs, beginning_raw_value, end_raw_value); - BT_ASSERT_PRE(!need_cs ? !with_cs : true, + BT_ASSERT_PRE_FROM_FUNC(api_func, "without-default-clock-snapshots", + !need_cs ? !with_cs : true, "Unexpected stream class configuration when creating " "a discarded events or discarded packets message: " "no default clock snapshots are needed, but two were provided: " "type=%s, %![stream-]+s, %![sc-]+S, with-cs=%d, " "cs-begin-val=%" PRIu64 ", cs-end-val=%" PRIu64, - bt_message_type_string(type), stream, stream_class, + bt_common_message_type_string(type), stream, stream_class, with_cs, beginning_raw_value, end_raw_value); BT_LIB_LOGD("Creating discarded items message object: " "type=%s, %![stream-]+s, %![sc-]+S, with-cs=%d, " "cs-begin-val=%" PRIu64 ", cs-end-val=%" PRIu64, - bt_message_type_string(type), stream, stream_class, + bt_common_message_type_string(type), stream, stream_class, with_cs, beginning_raw_value, end_raw_value); message = g_new0(struct bt_message_discarded_items, 1); if (!message) { @@ -175,7 +180,6 @@ void set_discarded_items_message_count(struct bt_message *message, struct bt_message_discarded_items *disc_items_msg = (void *) message; BT_ASSERT(message); - BT_ASSERT_PRE_DEV_HOT(message, "Message", ": %!+n", message); bt_property_uint_set(&disc_items_msg->count, count); } @@ -185,8 +189,8 @@ enum bt_property_availability get_discarded_items_message_count( { struct bt_message_discarded_items *disc_items_msg = (void *) message; - BT_ASSERT_PRE_DEV_NON_NULL(count, "Count (output)"); BT_ASSERT_DBG(message); + BT_ASSERT_DBG(count); *count = disc_items_msg->count.value; return disc_items_msg->count.base.avail; } @@ -194,33 +198,32 @@ enum bt_property_availability get_discarded_items_message_count( static inline const struct bt_clock_snapshot * borrow_discarded_items_message_beginning_default_clock_snapshot_const( - const struct bt_message *message) + const struct bt_message *message, const char *api_func) { struct bt_message_discarded_items *disc_items_msg = (void *) message; BT_ASSERT_DBG(message); - BT_ASSERT_PRE_DEV(disc_items_msg->stream->class->default_clock_class, - "Message's stream's class has no default clock class: " - "%![msg-]+n, %![sc-]+S", - message, disc_items_msg->stream->class); + BT_ASSERT_PRE_DEV_MSG_SC_DEF_CLK_CLS_FROM_FUNC(api_func, message, + disc_items_msg->stream->class); return disc_items_msg->default_begin_cs; } static inline const struct bt_clock_snapshot * borrow_discarded_items_message_end_default_clock_snapshot_const( - const struct bt_message *message) + const struct bt_message *message, const char *api_func) { struct bt_message_discarded_items *disc_items_msg = (void *) message; BT_ASSERT_DBG(message); - BT_ASSERT_PRE_DEV(disc_items_msg->stream->class->default_clock_class, - "Message's stream's class has no default clock class: " - "%![msg-]+n, %![sc-]+S", - message, disc_items_msg->stream->class); + BT_ASSERT_PRE_DEV_MSG_SC_DEF_CLK_CLS_FROM_FUNC(api_func, message, + disc_items_msg->stream->class); return disc_items_msg->default_end_cs; } +#define SC_SUPPORTS_DISC_PRECOND_ID(_item_type) \ + "stream-class-supports-discarded-" _item_type + struct bt_message *bt_message_discarded_events_create( struct bt_self_message_iterator *message_iterator, const struct bt_stream *stream) @@ -229,7 +232,8 @@ struct bt_message *bt_message_discarded_events_create( return create_discarded_items_message(message_iterator, BT_MESSAGE_TYPE_DISCARDED_EVENTS, (void *) stream, - false, 0, 0); + false, 0, 0, __func__, + SC_SUPPORTS_DISC_PRECOND_ID("events")); } struct bt_message *bt_message_discarded_events_create_with_default_clock_snapshots( @@ -238,25 +242,30 @@ struct bt_message *bt_message_discarded_events_create_with_default_clock_snapsho uint64_t end_raw_value) { BT_ASSERT_PRE_DEV_NO_ERROR(); + BT_ASSERT_PRE_MSG_CS_BEGIN_LE_END(message_iterator, + beginning_raw_value, end_raw_value); return create_discarded_items_message(message_iterator, BT_MESSAGE_TYPE_DISCARDED_EVENTS, (void *) stream, - true, beginning_raw_value, end_raw_value); + true, beginning_raw_value, end_raw_value, __func__, + SC_SUPPORTS_DISC_PRECOND_ID("events")); } struct bt_stream *bt_message_discarded_events_borrow_stream( struct bt_message *message) { - BT_ASSERT_PRE_DEV_NON_NULL(message, "Message"); - BT_ASSERT_PRE_DEV_MSG_IS_TYPE(message, BT_MESSAGE_TYPE_DISCARDED_EVENTS); + BT_ASSERT_PRE_DEV_MSG_NON_NULL(message); + BT_ASSERT_PRE_DEV_MSG_IS_DISC_EVENTS(message); return borrow_discarded_items_message_stream(message); } void bt_message_discarded_events_set_count(struct bt_message *message, uint64_t count) { - BT_ASSERT_PRE_NON_NULL(message, "Message"); - BT_ASSERT_PRE_MSG_IS_TYPE(message, BT_MESSAGE_TYPE_DISCARDED_EVENTS); + BT_ASSERT_PRE_MSG_NON_NULL(message); + BT_ASSERT_PRE_MSG_IS_DISC_EVENTS(message); + BT_ASSERT_PRE_DEV_MSG_HOT(message); + BT_ASSERT_PRE("count-gt-0", count > 0, "Discarded event count is 0."); set_discarded_items_message_count(message, count); } @@ -264,20 +273,20 @@ const struct bt_clock_snapshot * bt_message_discarded_events_borrow_beginning_default_clock_snapshot_const( const struct bt_message *msg) { - BT_ASSERT_PRE_DEV_NON_NULL(msg, "Message"); - BT_ASSERT_PRE_DEV_MSG_IS_TYPE(msg, BT_MESSAGE_TYPE_DISCARDED_EVENTS); + BT_ASSERT_PRE_DEV_MSG_NON_NULL(msg); + BT_ASSERT_PRE_DEV_MSG_IS_DISC_EVENTS(msg); return borrow_discarded_items_message_beginning_default_clock_snapshot_const( - msg); + msg, __func__); } const struct bt_clock_snapshot * bt_message_discarded_events_borrow_end_default_clock_snapshot_const( const struct bt_message *msg) { - BT_ASSERT_PRE_DEV_NON_NULL(msg, "Message"); - BT_ASSERT_PRE_DEV_MSG_IS_TYPE(msg, BT_MESSAGE_TYPE_DISCARDED_EVENTS); + BT_ASSERT_PRE_DEV_MSG_NON_NULL(msg); + BT_ASSERT_PRE_DEV_MSG_IS_DISC_EVENTS(msg); return borrow_discarded_items_message_end_default_clock_snapshot_const( - msg); + msg, __func__); } const struct bt_stream * @@ -290,9 +299,9 @@ bt_message_discarded_events_borrow_stream_const(const struct bt_message *message enum bt_property_availability bt_message_discarded_events_get_count( const struct bt_message *message, uint64_t *count) { - BT_ASSERT_PRE_DEV_NON_NULL(message, "Message"); - BT_ASSERT_PRE_DEV_MSG_IS_TYPE(message, - BT_MESSAGE_TYPE_DISCARDED_EVENTS); + BT_ASSERT_PRE_DEV_MSG_NON_NULL(message); + BT_ASSERT_PRE_DEV_MSG_IS_DISC_EVENTS(message); + BT_ASSERT_PRE_DEV_COUNT_OUTPUT_NON_NULL(count); return get_discarded_items_message_count(message, count); } @@ -304,7 +313,7 @@ struct bt_message *bt_message_discarded_packets_create( return create_discarded_items_message(message_iterator, BT_MESSAGE_TYPE_DISCARDED_PACKETS, (void *) stream, - false, 0, 0); + false, 0, 0, __func__, SC_SUPPORTS_DISC_PRECOND_ID("packets")); } struct bt_message *bt_message_discarded_packets_create_with_default_clock_snapshots( @@ -313,26 +322,30 @@ struct bt_message *bt_message_discarded_packets_create_with_default_clock_snapsh uint64_t end_raw_value) { BT_ASSERT_PRE_DEV_NO_ERROR(); + BT_ASSERT_PRE_MSG_CS_BEGIN_LE_END(message_iterator, + beginning_raw_value, end_raw_value); return create_discarded_items_message(message_iterator, BT_MESSAGE_TYPE_DISCARDED_PACKETS, (void *) stream, - true, beginning_raw_value, end_raw_value); + true, beginning_raw_value, end_raw_value, __func__, + SC_SUPPORTS_DISC_PRECOND_ID("packets")); } struct bt_stream *bt_message_discarded_packets_borrow_stream( struct bt_message *message) { - BT_ASSERT_PRE_DEV_NON_NULL(message, "Message"); - BT_ASSERT_PRE_DEV_MSG_IS_TYPE(message, - BT_MESSAGE_TYPE_DISCARDED_PACKETS); + BT_ASSERT_PRE_DEV_MSG_NON_NULL(message); + BT_ASSERT_PRE_DEV_MSG_IS_DISC_PACKETS(message); return borrow_discarded_items_message_stream(message); } void bt_message_discarded_packets_set_count(struct bt_message *message, uint64_t count) { - BT_ASSERT_PRE_NON_NULL(message, "Message"); - BT_ASSERT_PRE_MSG_IS_TYPE(message, BT_MESSAGE_TYPE_DISCARDED_PACKETS); + BT_ASSERT_PRE_MSG_NON_NULL(message); + BT_ASSERT_PRE_MSG_IS_DISC_PACKETS(message); + BT_ASSERT_PRE_DEV_MSG_HOT(message); + BT_ASSERT_PRE("count-gt-0", count > 0, "Discarded packet count is 0."); set_discarded_items_message_count(message, count); } @@ -340,20 +353,20 @@ const struct bt_clock_snapshot * bt_message_discarded_packets_borrow_beginning_default_clock_snapshot_const( const struct bt_message *msg) { - BT_ASSERT_PRE_DEV_NON_NULL(msg, "Message"); - BT_ASSERT_PRE_DEV_MSG_IS_TYPE(msg, BT_MESSAGE_TYPE_DISCARDED_PACKETS); + BT_ASSERT_PRE_DEV_MSG_NON_NULL(msg); + BT_ASSERT_PRE_DEV_MSG_IS_DISC_PACKETS(msg); return borrow_discarded_items_message_beginning_default_clock_snapshot_const( - msg); + msg, __func__); } const struct bt_clock_snapshot * bt_message_discarded_packets_borrow_end_default_clock_snapshot_const( const struct bt_message *msg) { - BT_ASSERT_PRE_DEV_NON_NULL(msg, "Message"); - BT_ASSERT_PRE_DEV_MSG_IS_TYPE(msg, BT_MESSAGE_TYPE_DISCARDED_PACKETS); + BT_ASSERT_PRE_DEV_MSG_NON_NULL(msg); + BT_ASSERT_PRE_DEV_MSG_IS_DISC_PACKETS(msg); return borrow_discarded_items_message_end_default_clock_snapshot_const( - msg); + msg, __func__); } const struct bt_stream * @@ -366,9 +379,9 @@ bt_message_discarded_packets_borrow_stream_const(const struct bt_message *messag enum bt_property_availability bt_message_discarded_packets_get_count( const struct bt_message *message, uint64_t *count) { - BT_ASSERT_PRE_DEV_NON_NULL(message, "Message"); - BT_ASSERT_PRE_DEV_MSG_IS_TYPE(message, - BT_MESSAGE_TYPE_DISCARDED_PACKETS); + BT_ASSERT_PRE_DEV_MSG_NON_NULL(message); + BT_ASSERT_PRE_DEV_MSG_IS_DISC_PACKETS(message); + BT_ASSERT_PRE_DEV_COUNT_OUTPUT_NON_NULL(count); return get_discarded_items_message_count(message, count); } @@ -387,8 +400,8 @@ const struct bt_clock_class * bt_message_discarded_events_borrow_stream_class_default_clock_class_const( const struct bt_message *msg) { - BT_ASSERT_PRE_DEV_NON_NULL(msg, "Message"); - BT_ASSERT_PRE_DEV_MSG_IS_TYPE(msg, BT_MESSAGE_TYPE_DISCARDED_EVENTS); + BT_ASSERT_PRE_DEV_MSG_NON_NULL(msg); + BT_ASSERT_PRE_DEV_MSG_IS_DISC_EVENTS(msg); return borrow_discarded_items_message_stream_class_default_clock_class( msg); } @@ -397,8 +410,8 @@ const struct bt_clock_class * bt_message_discarded_packets_borrow_stream_class_default_clock_class_const( const struct bt_message *msg) { - BT_ASSERT_PRE_DEV_NON_NULL(msg, "Message"); - BT_ASSERT_PRE_DEV_MSG_IS_TYPE(msg, BT_MESSAGE_TYPE_DISCARDED_PACKETS); + BT_ASSERT_PRE_DEV_MSG_NON_NULL(msg); + BT_ASSERT_PRE_DEV_MSG_IS_DISC_PACKETS(msg); return borrow_discarded_items_message_stream_class_default_clock_class( msg); }