Cache serialization info when CDRWriter is constructed (#80)

1. Make CDRWriter remember its top level struct value type
2. Populate the trivially serializable cache when CDRWriter is created instead of waiting until the first time a message is sent.
3. Speed up arrays/sequences of trivially serializable structs

Signed-off-by: Dan Rose <dan@digilabs.io>
This commit is contained in:
Dan Rose 2019-12-13 11:05:58 -05:00 committed by GitHub
parent c25f22e565
commit c0af9d898b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 217 additions and 114 deletions

View file

@ -862,14 +862,15 @@ extern "C" rmw_ret_t rmw_serialize(
{
rmw_ret_t ret;
try {
auto ts = rmw_cyclonedds_cpp::make_message_value_type(type_support);
auto writer = rmw_cyclonedds_cpp::make_cdr_writer(
rmw_cyclonedds_cpp::make_message_value_type(type_support));
auto size = rmw_cyclonedds_cpp::get_serialized_size(ros_message, ts.get());
auto size = writer->get_serialized_size(ros_message);
if ((ret = rmw_serialized_message_resize(serialized_message, size) != RMW_RET_OK)) {
RMW_SET_ERROR_MSG("rmw_serialize: failed to allocate space for message");
return ret;
}
rmw_cyclonedds_cpp::serialize(serialized_message->buffer, ros_message, ts.get());
writer->serialize(serialized_message->buffer, ros_message);
serialized_message->buffer_length = size;
return RMW_RET_OK;
} catch (std::exception & e) {