* SOFTWARE.
*/
-#define BT_COMP_LOG_SELF_COMP (trimmer_comp->self_comp)
#define BT_LOG_OUTPUT_LEVEL (trimmer_comp->log_level)
#define BT_LOG_TAG "PLUGIN/FLT.UTILS.TRIMMER"
-#include "plugins/comp-logging.h"
+#include "logging/comp-logging.h"
#include "compat/utc.h"
#include "compat/time.h"
#include <babeltrace2/babeltrace.h>
#include "common/common.h"
#include "common/assert.h"
+#include <stdbool.h>
#include <stdint.h>
#include <inttypes.h>
#include <glib.h>
#include "compat/glib.h"
+#include "plugins/common/param-validation/param-validation.h"
#include "trimmer.h"
bool is_gmt;
bt_logging_level log_level;
bt_self_component *self_comp;
+ bt_self_component_filter *self_comp_filter;
};
enum trimmer_iterator_state {
enum trimmer_iterator_state state;
/* Owned by this */
- bt_self_component_port_input_message_iterator *upstream_iter;
+ bt_message_iterator *upstream_iter;
struct trimmer_bound begin, end;
/*
goto end;
}
- BT_COMP_LOGE("Invalid date/time format: param=\"%s\"", str);
+ BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
+ "Invalid date/time format: param=\"%s\"", str);
ret = -1;
end:
+ g_match_info_free(match_info);
+
return ret;
}
char tmp_arg[64];
if (bt_value_is_signed_integer(param)) {
- int64_t value = bt_value_signed_integer_get(param);
+ int64_t value = bt_value_integer_signed_get(param);
/*
* Just convert it to a temporary string to handle
*/
sprintf(tmp_arg, "%" PRId64, value);
arg = tmp_arg;
- } else if (bt_value_is_string(param)) {
- arg = bt_value_string_get(param);
} else {
- BT_COMP_LOGE("`%s` parameter must be an integer or a string value.",
- param_name);
- ret = -1;
- goto end;
+ BT_ASSERT(bt_value_is_string(param));
+ arg = bt_value_string_get(param);
}
ret = set_bound_from_str(trimmer_comp, arg, bound, is_gmt);
-end:
return ret;
}
if (!begin->is_infinite && !end->is_infinite &&
begin->ns_from_origin > end->ns_from_origin) {
- BT_COMP_LOGE("Trimming time range's beginning time is greater than end time: "
+ BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
+ "Trimming time range's beginning time is greater than end time: "
"begin-ns-from-origin=%" PRId64 ", "
"end-ns-from-origin=%" PRId64,
begin->ns_from_origin,
}
if (!begin->is_infinite && begin->ns_from_origin == INT64_MIN) {
- BT_COMP_LOGE("Invalid trimming time range's beginning time: "
+ BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
+ "Invalid trimming time range's beginning time: "
"ns-from-origin=%" PRId64,
begin->ns_from_origin);
ret = -1;
}
if (!end->is_infinite && end->ns_from_origin == INT64_MIN) {
- BT_COMP_LOGE("Invalid trimming time range's end time: "
+ BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
+ "Invalid trimming time range's end time: "
"ns-from-origin=%" PRId64,
end->ns_from_origin);
ret = -1;
}
static
-int init_trimmer_comp_from_params(struct trimmer_comp *trimmer_comp,
+enum bt_param_validation_status validate_bound_type(
+ const bt_value *value,
+ struct bt_param_validation_context *context)
+{
+ enum bt_param_validation_status status = BT_PARAM_VALIDATION_STATUS_OK;
+
+ if (!bt_value_is_signed_integer(value) &&
+ !bt_value_is_string(value)) {
+ status = bt_param_validation_error(context,
+ "unexpected type: expected-types=[%s, %s], actual-type=%s",
+ bt_common_value_type_string(BT_VALUE_TYPE_SIGNED_INTEGER),
+ bt_common_value_type_string(BT_VALUE_TYPE_STRING),
+ bt_common_value_type_string(bt_value_get_type(value)));
+ }
+
+ return status;
+}
+
+static
+struct bt_param_validation_map_value_entry_descr trimmer_params[] = {
+ { "gmt", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } },
+ { "begin", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .validation_func = validate_bound_type } },
+ { "end", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .validation_func = validate_bound_type } },
+ BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_END
+};
+
+static
+bt_component_class_initialize_method_status init_trimmer_comp_from_params(
+ struct trimmer_comp *trimmer_comp,
const bt_value *params)
{
const bt_value *value;
- int ret = 0;
+ bt_component_class_initialize_method_status status;
+ enum bt_param_validation_status validation_status;
+ gchar *validate_error = NULL;
+
+ validation_status = bt_param_validation_validate(params,
+ trimmer_params, &validate_error);
+ if (validation_status == BT_PARAM_VALIDATION_STATUS_MEMORY_ERROR) {
+ status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR;
+ goto end;
+ } else if (validation_status == BT_PARAM_VALIDATION_STATUS_VALIDATION_ERROR) {
+ status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR;
+ BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, "%s",
+ validate_error);
+ goto end;
+ }
BT_ASSERT(params);
value = bt_value_map_borrow_entry_value_const(params, "gmt");
if (set_bound_from_param(trimmer_comp, "begin", value,
&trimmer_comp->begin, trimmer_comp->is_gmt)) {
/* set_bound_from_param() logs errors */
- ret = -1;
+ status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR;
goto end;
}
} else {
if (set_bound_from_param(trimmer_comp, "end", value,
&trimmer_comp->end, trimmer_comp->is_gmt)) {
/* set_bound_from_param() logs errors */
- ret = -1;
+ status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR;
goto end;
}
} else {
trimmer_comp->end.is_set = true;
}
-end:
if (trimmer_comp->begin.is_set && trimmer_comp->end.is_set) {
/* validate_trimmer_bounds() logs errors */
- ret = validate_trimmer_bounds(trimmer_comp,
- &trimmer_comp->begin, &trimmer_comp->end);
+ if (validate_trimmer_bounds(trimmer_comp,
+ &trimmer_comp->begin, &trimmer_comp->end)) {
+ status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR;
+ goto end;
+ }
}
- return ret;
+ status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK;
+
+end:
+ g_free(validate_error);
+
+ return status;
}
-bt_component_class_init_method_status trimmer_init(
+bt_component_class_initialize_method_status trimmer_init(
bt_self_component_filter *self_comp_flt,
+ bt_self_component_filter_configuration *config,
const bt_value *params, void *init_data)
{
- int ret;
- bt_component_class_init_method_status status =
- BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK;
+ bt_component_class_initialize_method_status status;
bt_self_component_add_port_status add_port_status;
struct trimmer_comp *trimmer_comp = create_trimmer_comp();
bt_self_component *self_comp =
bt_self_component_filter_as_self_component(self_comp_flt);
+
if (!trimmer_comp) {
- status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_MEMORY_ERROR;
+ status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR;
goto error;
}
trimmer_comp->log_level = bt_component_get_logging_level(
bt_self_component_as_component(self_comp));
trimmer_comp->self_comp = self_comp;
+ trimmer_comp->self_comp_filter = self_comp_flt;
+
add_port_status = bt_self_component_filter_add_input_port(
self_comp_flt, in_port_name, NULL, NULL);
- switch (add_port_status) {
- case BT_SELF_COMPONENT_ADD_PORT_STATUS_ERROR:
- status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR;
+ if (add_port_status != BT_SELF_COMPONENT_ADD_PORT_STATUS_OK) {
+ status = (int) add_port_status;
goto error;
- case BT_SELF_COMPONENT_ADD_PORT_STATUS_MEMORY_ERROR:
- status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_MEMORY_ERROR;
- goto error;
- default:
- break;
}
add_port_status = bt_self_component_filter_add_output_port(
self_comp_flt, "out", NULL, NULL);
- switch (add_port_status) {
- case BT_SELF_COMPONENT_ADD_PORT_STATUS_ERROR:
- status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR;
+ if (add_port_status != BT_SELF_COMPONENT_ADD_PORT_STATUS_OK) {
+ status = (int) add_port_status;
goto error;
- case BT_SELF_COMPONENT_ADD_PORT_STATUS_MEMORY_ERROR:
- status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_MEMORY_ERROR;
- goto error;
- default:
- break;
}
- ret = init_trimmer_comp_from_params(trimmer_comp, params);
- if (ret) {
- status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR;
+ status = init_trimmer_comp_from_params(trimmer_comp, params);
+ if (status != BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) {
goto error;
}
bt_self_component_set_data(self_comp, trimmer_comp);
+
+ status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK;
goto end;
error:
- if (status == BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK) {
- status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR;
- }
-
if (trimmer_comp) {
destroy_trimmer_comp(trimmer_comp);
}
static
void destroy_trimmer_iterator(struct trimmer_iterator *trimmer_it)
{
- BT_ASSERT(trimmer_it);
- bt_self_component_port_input_message_iterator_put_ref(
+ if (!trimmer_it) {
+ goto end;
+ }
+
+ bt_message_iterator_put_ref(
trimmer_it->upstream_iter);
if (trimmer_it->output_messages) {
}
g_free(trimmer_it);
+end:
+ return;
}
static
}
BT_HIDDEN
-bt_component_class_message_iterator_init_method_status trimmer_msg_iter_init(
+bt_message_iterator_class_initialize_method_status trimmer_msg_iter_init(
bt_self_message_iterator *self_msg_iter,
- bt_self_component_filter *self_comp,
+ bt_self_message_iterator_configuration *config,
+ bt_self_component *self_comp,
bt_self_component_port_output *port)
{
- bt_component_class_message_iterator_init_method_status status =
- BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_OK;
+ bt_message_iterator_class_initialize_method_status status;
+ bt_message_iterator_create_from_message_iterator_status
+ msg_iter_status;
struct trimmer_iterator *trimmer_it;
trimmer_it = g_new0(struct trimmer_iterator, 1);
if (!trimmer_it) {
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR;
- goto end;
+ status = BT_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR;
+ goto error;
}
- trimmer_it->trimmer_comp = bt_self_component_get_data(
- bt_self_component_filter_as_self_component(self_comp));
+ trimmer_it->trimmer_comp = bt_self_component_get_data(self_comp);
BT_ASSERT(trimmer_it->trimmer_comp);
if (trimmer_it->trimmer_comp->begin.is_set &&
trimmer_it->begin = trimmer_it->trimmer_comp->begin;
trimmer_it->end = trimmer_it->trimmer_comp->end;
- trimmer_it->upstream_iter =
- bt_self_component_port_input_message_iterator_create(
+ msg_iter_status =
+ bt_message_iterator_create_from_message_iterator(
+ self_msg_iter,
bt_self_component_filter_borrow_input_port_by_name(
- self_comp, in_port_name));
- if (!trimmer_it->upstream_iter) {
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_ERROR;
- goto end;
+ trimmer_it->trimmer_comp->self_comp_filter, in_port_name),
+ &trimmer_it->upstream_iter);
+ if (msg_iter_status != BT_MESSAGE_ITERATOR_CREATE_FROM_MESSAGE_ITERATOR_STATUS_OK) {
+ status = (int) msg_iter_status;
+ goto error;
}
trimmer_it->output_messages = g_queue_new();
if (!trimmer_it->output_messages) {
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR;
- goto end;
+ status = BT_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR;
+ goto error;
}
trimmer_it->stream_states = g_hash_table_new_full(g_direct_hash,
g_direct_equal, NULL,
(GDestroyNotify) destroy_trimmer_iterator_stream_state);
if (!trimmer_it->stream_states) {
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR;
- goto end;
+ status = BT_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR;
+ goto error;
}
+ /*
+ * The trimmer requires upstream messages to have times, so it can
+ * always seek forward.
+ */
+ bt_self_message_iterator_configuration_set_can_seek_forward(
+ config, BT_TRUE);
+
trimmer_it->self_msg_iter = self_msg_iter;
bt_self_message_iterator_set_data(self_msg_iter, trimmer_it);
-end:
- if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_OK && trimmer_it) {
- destroy_trimmer_iterator(trimmer_it);
- }
+ status = BT_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_STATUS_OK;
+ goto end;
+error:
+ destroy_trimmer_iterator(trimmer_it);
+
+end:
return status;
}
const bt_clock_snapshot *clock_snapshot = NULL;
int ret = 0;
- BT_ASSERT(msg);
- BT_ASSERT(ns_from_origin);
- BT_ASSERT(has_clock_snapshot);
+ BT_ASSERT_DBG(msg);
+ BT_ASSERT_DBG(ns_from_origin);
+ BT_ASSERT_DBG(has_clock_snapshot);
switch (bt_message_get_type(msg)) {
case BT_MESSAGE_TYPE_EVENT:
}
if (!res) {
- BT_COMP_LOGE_ERRNO("Cannot convert timestamp to date and time",
- "ts=%" PRId64, (int64_t) time_seconds);
+ BT_COMP_LOGE_APPEND_CAUSE_ERRNO(trimmer_comp->self_comp,
+ "Cannot convert timestamp to date and time",
+ ": ts=%" PRId64, (int64_t) time_seconds);
ret = -1;
goto end;
}
}
static
-bt_component_class_message_iterator_next_method_status
+bt_message_iterator_class_next_method_status
state_set_trimmer_iterator_bounds(
struct trimmer_iterator *trimmer_it)
{
while (true) {
upstream_iter_status =
- bt_self_component_port_input_message_iterator_next(
+ bt_message_iterator_next(
trimmer_it->upstream_iter, &msgs, &count);
if (upstream_iter_status != BT_MESSAGE_ITERATOR_NEXT_STATUS_OK) {
goto end;
for (i = 0; i < count; i++) {
const bt_message *msg = msgs[i];
bool has_ns_from_origin;
- int ret;
-
ret = get_msg_ns_from_origin(msg, &ns_from_origin,
&has_ns_from_origin);
if (ret) {
continue;
}
- BT_ASSERT(ns_from_origin != INT64_MIN &&
+ BT_ASSERT_DBG(ns_from_origin != INT64_MIN &&
ns_from_origin != INT64_MAX);
put_messages(msgs, count);
goto found;
}
static
-bt_component_class_message_iterator_next_method_status state_seek_initially(
+bt_message_iterator_class_next_method_status state_seek_initially(
struct trimmer_iterator *trimmer_it)
{
struct trimmer_comp *trimmer_comp = trimmer_it->trimmer_comp;
- bt_component_class_message_iterator_next_method_status status =
- BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK;
+ bt_message_iterator_class_next_method_status status;
BT_ASSERT(trimmer_it->begin.is_set);
if (trimmer_it->begin.is_infinite) {
- if (!bt_self_component_port_input_message_iterator_can_seek_beginning(
- trimmer_it->upstream_iter)) {
- BT_COMP_LOGE_STR("Cannot make upstream message iterator initially seek its beginning.");
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR;
+ bt_bool can_seek;
+
+ status = (int) bt_message_iterator_can_seek_beginning(
+ trimmer_it->upstream_iter, &can_seek);
+ if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) {
+ if (status < 0) {
+ BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
+ "Cannot make upstream message iterator initially seek its beginning.");
+ }
+
goto end;
}
- status = (int) bt_self_component_port_input_message_iterator_seek_beginning(
+ if (!can_seek) {
+ BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
+ "Cannot make upstream message iterator initially seek its beginning.");
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
+ goto end;
+ }
+
+ status = (int) bt_message_iterator_seek_beginning(
trimmer_it->upstream_iter);
} else {
- if (!bt_self_component_port_input_message_iterator_can_seek_ns_from_origin(
- trimmer_it->upstream_iter,
- trimmer_it->begin.ns_from_origin)) {
- BT_COMP_LOGE("Cannot make upstream message iterator initially seek: "
- "seek-ns-from-origin=%" PRId64,
+ bt_bool can_seek;
+
+ status = (int) bt_message_iterator_can_seek_ns_from_origin(
+ trimmer_it->upstream_iter, trimmer_it->begin.ns_from_origin,
+ &can_seek);
+
+ if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) {
+ if (status < 0) {
+ BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
+ "Cannot make upstream message iterator initially seek: seek-ns-from-origin=%" PRId64,
+ trimmer_it->begin.ns_from_origin);
+ }
+
+ goto end;
+ }
+
+ if (!can_seek) {
+ BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
+ "Cannot make upstream message iterator initially seek: seek-ns-from-origin=%" PRId64,
trimmer_it->begin.ns_from_origin);
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
goto end;
}
- status = (int) bt_self_component_port_input_message_iterator_seek_ns_from_origin(
+ status = (int) bt_message_iterator_seek_ns_from_origin(
trimmer_it->upstream_iter, trimmer_it->begin.ns_from_origin);
}
- if (status == BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) {
+ if (status == BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) {
trimmer_it->state = TRIMMER_ITERATOR_STATE_TRIM;
}
}
static inline
-bt_component_class_message_iterator_next_method_status
+bt_message_iterator_class_next_method_status
end_stream(struct trimmer_iterator *trimmer_it,
struct trimmer_iterator_stream_state *sstate)
{
- bt_component_class_message_iterator_next_method_status status =
- BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK;
+ bt_message_iterator_class_next_method_status status =
+ BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK;
/* Initialize to silence maybe-uninitialized warning. */
uint64_t raw_value = 0;
bt_message *msg = NULL;
ret = clock_raw_value_from_ns_from_origin(clock_class,
trimmer_it->end.ns_from_origin, &raw_value);
if (ret) {
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
goto end;
}
}
trimmer_it->self_msg_iter, sstate->cur_packet,
raw_value);
if (!msg) {
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_MEMORY_ERROR;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_MEMORY_ERROR;
goto end;
}
msg = bt_message_stream_end_create(trimmer_it->self_msg_iter,
sstate->stream);
if (!msg) {
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_MEMORY_ERROR;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_MEMORY_ERROR;
goto end;
}
}
static inline
-bt_component_class_message_iterator_next_method_status end_iterator_streams(
+bt_message_iterator_class_next_method_status end_iterator_streams(
struct trimmer_iterator *trimmer_it)
{
- bt_component_class_message_iterator_next_method_status status =
- BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK;
+ bt_message_iterator_class_next_method_status status =
+ BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK;
GHashTableIter iter;
gpointer key, sstate;
}
static
-bt_component_class_message_iterator_next_method_status
+bt_message_iterator_class_next_method_status
create_stream_state_entry(
struct trimmer_iterator *trimmer_it,
const struct bt_stream *stream,
struct trimmer_iterator_stream_state **stream_state)
{
struct trimmer_comp *trimmer_comp = trimmer_it->trimmer_comp;
- bt_component_class_message_iterator_next_method_status status;
+ bt_message_iterator_class_next_method_status status;
struct trimmer_iterator_stream_state *sstate;
const bt_stream_class *sc;
*/
sc = bt_stream_borrow_class_const(stream);
if (!bt_stream_class_borrow_default_clock_class_const(sc)) {
- BT_COMP_LOGE("Unsupported stream: stream class does "
+ BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
+ "Unsupported stream: stream class does "
"not have a default clock class: "
"stream-addr=%p, "
"stream-id=%" PRIu64 ", "
"stream-name=\"%s\"",
stream, bt_stream_get_id(stream),
bt_stream_get_name(stream));
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
goto end;
}
*/
if (!bt_stream_class_packets_have_beginning_default_clock_snapshot(
sc)) {
- BT_COMP_LOGE("Unsupported stream: packets have "
- "no beginning clock snapshot: "
+ BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
+ "Unsupported stream: packets have no beginning clock snapshot: "
"stream-addr=%p, "
"stream-id=%" PRIu64 ", "
"stream-name=\"%s\"",
stream, bt_stream_get_id(stream),
bt_stream_get_name(stream));
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
goto end;
}
if (!bt_stream_class_packets_have_end_default_clock_snapshot(
sc)) {
- BT_COMP_LOGE("Unsupported stream: packets have "
- "no end clock snapshot: "
+ BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
+ "Unsupported stream: packets have no end clock snapshot: "
"stream-addr=%p, "
"stream-id=%" PRIu64 ", "
"stream-name=\"%s\"",
stream, bt_stream_get_id(stream),
bt_stream_get_name(stream));
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
goto end;
}
if (bt_stream_class_supports_discarded_events(sc) &&
!bt_stream_class_discarded_events_have_default_clock_snapshots(sc)) {
- BT_COMP_LOGE("Unsupported stream: discarded events "
- "have no clock snapshots: "
+ BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
+ "Unsupported stream: discarded events have no clock snapshots: "
"stream-addr=%p, "
"stream-id=%" PRIu64 ", "
"stream-name=\"%s\"",
stream, bt_stream_get_id(stream),
bt_stream_get_name(stream));
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
goto end;
}
if (bt_stream_class_supports_discarded_packets(sc) &&
!bt_stream_class_discarded_packets_have_default_clock_snapshots(sc)) {
- BT_COMP_LOGE("Unsupported stream: discarded packets "
+ BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
+ "Unsupported stream: discarded packets "
"have no clock snapshots: "
"stream-addr=%p, "
"stream-id=%" PRIu64 ", "
"stream-name=\"%s\"",
stream, bt_stream_get_id(stream),
bt_stream_get_name(stream));
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
goto end;
}
sstate = g_new0(struct trimmer_iterator_stream_state, 1);
if (!sstate) {
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_MEMORY_ERROR;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_MEMORY_ERROR;
goto end;
}
*stream_state = sstate;
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK;
end:
return status;
{
struct trimmer_iterator_stream_state *sstate;
- BT_ASSERT(stream);
+ BT_ASSERT_DBG(stream);
sstate = g_hash_table_lookup(trimmer_it->stream_states, stream);
- BT_ASSERT(sstate);
+ BT_ASSERT_DBG(sstate);
return sstate;
}
* `reached_end`.
*/
static
-bt_component_class_message_iterator_next_method_status
+bt_message_iterator_class_next_method_status
handle_message_with_stream(
struct trimmer_iterator *trimmer_it, const bt_message *msg,
const struct bt_stream *stream, const int64_t *ns_from_origin,
bool *reached_end)
{
- bt_component_class_message_iterator_next_method_status status =
- BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK;
+ bt_message_iterator_class_next_method_status status =
+ BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK;
bt_message_type msg_type = bt_message_get_type(msg);
int ret;
struct trimmer_iterator_stream_state *sstate = NULL;
* class has a clock class. And we know it has, otherwise we
* couldn't be using the trimmer component.
*/
- BT_ASSERT(ns_from_origin);
+ BT_ASSERT_DBG(ns_from_origin);
if (G_UNLIKELY(!trimmer_it->end.is_infinite &&
*ns_from_origin > trimmer_it->end.ns_from_origin)) {
if (bt_clock_snapshot_get_ns_from_origin(end_cs,
&end_ns_from_origin)) {
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
goto end;
}
ret = clock_raw_value_from_ns_from_origin(clock_class,
trimmer_it->end.ns_from_origin, &end_raw_value);
if (ret) {
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
goto end;
}
}
if (!new_msg) {
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_MEMORY_ERROR;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_MEMORY_ERROR;
goto end;
}
/* Learn about this stream. */
status = create_stream_state_entry(trimmer_it, stream, &sstate);
- if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) {
+ if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) {
goto end;
}
* `reached_end`.
*/
static inline
-bt_component_class_message_iterator_next_method_status handle_message(
+bt_message_iterator_class_next_method_status handle_message(
struct trimmer_iterator *trimmer_it, const bt_message *msg,
bool *reached_end)
{
- bt_component_class_message_iterator_next_method_status status;
+ bt_message_iterator_class_next_method_status status;
const bt_stream *stream = NULL;
int64_t ns_from_origin = INT64_MIN;
- bool has_ns_from_origin;
+ bool has_ns_from_origin = false;
int ret;
/* Find message's associated stream */
/* Retrieve the message's time */
ret = get_msg_ns_from_origin(msg, &ns_from_origin, &has_ns_from_origin);
if (G_UNLIKELY(ret)) {
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
goto end;
}
*reached_end = true;
} else {
push_message(trimmer_it, msg);
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK;
msg = NULL;
}
}
(*count)++;
}
- BT_ASSERT(*count > 0);
+ BT_ASSERT_DBG(*count > 0);
}
static inline
-bt_component_class_message_iterator_next_method_status state_ending(
+bt_message_iterator_class_next_method_status state_ending(
struct trimmer_iterator *trimmer_it,
bt_message_array_const msgs, uint64_t capacity,
uint64_t *count)
{
- bt_component_class_message_iterator_next_method_status status =
- BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK;
+ bt_message_iterator_class_next_method_status status =
+ BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK;
if (g_queue_is_empty(trimmer_it->output_messages)) {
trimmer_it->state = TRIMMER_ITERATOR_STATE_ENDED;
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_END;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_END;
goto end;
}
}
static inline
-bt_component_class_message_iterator_next_method_status
+bt_message_iterator_class_next_method_status
state_trim(struct trimmer_iterator *trimmer_it,
bt_message_array_const msgs, uint64_t capacity,
uint64_t *count)
{
- bt_component_class_message_iterator_next_method_status status =
- BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK;
+ bt_message_iterator_class_next_method_status status =
+ BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK;
bt_message_array_const my_msgs;
uint64_t my_count;
uint64_t i;
bool reached_end = false;
while (g_queue_is_empty(trimmer_it->output_messages)) {
- status = (int) bt_self_component_port_input_message_iterator_next(
+ status = (int) bt_message_iterator_next(
trimmer_it->upstream_iter, &my_msgs, &my_count);
- if (G_UNLIKELY(status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK)) {
- if (status == BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_END) {
+ if (G_UNLIKELY(status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK)) {
+ if (status == BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_END) {
status = end_iterator_streams(trimmer_it);
- if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) {
+ if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) {
goto end;
}
goto end;
}
- BT_ASSERT(my_count > 0);
+ BT_ASSERT_DBG(my_count > 0);
for (i = 0; i < my_count; i++) {
status = handle_message(trimmer_it, my_msgs[i],
my_msgs[i] = NULL;
if (G_UNLIKELY(status !=
- BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK)) {
+ BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK)) {
put_messages(my_msgs, my_count);
goto end;
}
* There's at least one message in the output message queue:
* move the messages to the output message array.
*/
- BT_ASSERT(!g_queue_is_empty(trimmer_it->output_messages));
+ BT_ASSERT_DBG(!g_queue_is_empty(trimmer_it->output_messages));
fill_message_array_from_output_messages(trimmer_it, msgs,
capacity, count);
}
BT_HIDDEN
-bt_component_class_message_iterator_next_method_status trimmer_msg_iter_next(
+bt_message_iterator_class_next_method_status trimmer_msg_iter_next(
bt_self_message_iterator *self_msg_iter,
bt_message_array_const msgs, uint64_t capacity,
uint64_t *count)
{
struct trimmer_iterator *trimmer_it =
bt_self_message_iterator_get_data(self_msg_iter);
- bt_component_class_message_iterator_next_method_status status =
- BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK;
+ bt_message_iterator_class_next_method_status status =
+ BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK;
- BT_ASSERT(trimmer_it);
+ BT_ASSERT_DBG(trimmer_it);
if (G_LIKELY(trimmer_it->state == TRIMMER_ITERATOR_STATE_TRIM)) {
status = state_trim(trimmer_it, msgs, capacity, count);
- if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) {
+ if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) {
goto end;
}
} else {
switch (trimmer_it->state) {
case TRIMMER_ITERATOR_STATE_SET_BOUNDS_NS_FROM_ORIGIN:
status = state_set_trimmer_iterator_bounds(trimmer_it);
- if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) {
+ if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) {
goto end;
}
status = state_seek_initially(trimmer_it);
- if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) {
+ if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) {
goto end;
}
status = state_trim(trimmer_it, msgs, capacity, count);
- if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) {
+ if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) {
goto end;
}
break;
case TRIMMER_ITERATOR_STATE_SEEK_INITIALLY:
status = state_seek_initially(trimmer_it);
- if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) {
+ if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) {
goto end;
}
status = state_trim(trimmer_it, msgs, capacity, count);
- if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) {
+ if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) {
goto end;
}
case TRIMMER_ITERATOR_STATE_ENDING:
status = state_ending(trimmer_it, msgs, capacity,
count);
- if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) {
+ if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) {
goto end;
}
break;
case TRIMMER_ITERATOR_STATE_ENDED:
- status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_END;
+ status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_END;
break;
default:
- abort();
+ bt_common_abort();
}
}