Skip to content

Commit 11a0ea5

Browse files
Add tracing instrumentation using tracetools
Signed-off-by: Christophe Bedard <[email protected]>
1 parent dd82e84 commit 11a0ea5

11 files changed

+129
-13
lines changed

Diff for: rmw_zenoh_cpp/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ find_package(rcutils REQUIRED)
2121
find_package(rosidl_typesupport_fastrtps_c REQUIRED)
2222
find_package(rosidl_typesupport_fastrtps_cpp REQUIRED)
2323
find_package(rmw REQUIRED)
24+
find_package(tracetools REQUIRED)
2425
find_package(zenoh_c_vendor REQUIRED)
2526

2627
add_library(rmw_zenoh_cpp SHARED
@@ -68,6 +69,7 @@ target_link_libraries(rmw_zenoh_cpp
6869
rosidl_typesupport_fastrtps_c::rosidl_typesupport_fastrtps_c
6970
rosidl_typesupport_fastrtps_cpp::rosidl_typesupport_fastrtps_cpp
7071
rmw::rmw
72+
tracetools::tracetools
7173
zenohc::lib
7274
)
7375

Diff for: rmw_zenoh_cpp/package.xml

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<depend>rosidl_typesupport_fastrtps_c</depend>
2626
<depend>rosidl_typesupport_fastrtps_cpp</depend>
2727
<depend>rmw</depend>
28+
<depend>tracetools</depend>
2829

2930
<test_depend>ament_lint_auto</test_depend>
3031
<test_depend>ament_lint_common</test_depend>

Diff for: rmw_zenoh_cpp/src/detail/rmw_client_data.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
#include "rmw/get_topic_endpoint_info.h"
4141
#include "rmw/impl/cpp/macros.hpp"
4242

43+
#include "tracetools/tracetools.h"
44+
4345
namespace
4446
{
4547
///=============================================================================
@@ -451,6 +453,12 @@ rmw_ret_t ClientData::send_request(
451453
size_t data_length = ser.get_serialized_data_length();
452454
*sequence_id = sequence_number_++;
453455

456+
TRACETOOLS_TRACEPOINT(
457+
rmw_send_request,
458+
static_cast<const void *>(rmw_client_),
459+
static_cast<const void *>(ros_request),
460+
*sequence_id);
461+
454462
// Send request
455463
z_get_options_t opts;
456464
z_get_options_default(&opts);

Diff for: rmw_zenoh_cpp/src/detail/rmw_node_data.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ bool NodeData::create_pub_data(
144144

145145
auto pub_data = PublisherData::make(
146146
std::move(session),
147+
publisher,
147148
node_,
148149
entity_->node_info(),
149150
id_,
@@ -279,6 +280,7 @@ bool NodeData::create_service_data(
279280
auto service_data = ServiceData::make(
280281
std::move(session),
281282
node_,
283+
service,
282284
entity_->node_info(),
283285
id_,
284286
std::move(id),

Diff for: rmw_zenoh_cpp/src/detail/rmw_publisher_data.cpp

+15-3
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
#include "rmw/get_topic_endpoint_info.h"
3636
#include "rmw/impl/cpp/macros.hpp"
3737

38+
#include "tracetools/tracetools.h"
39+
3840
namespace rmw_zenoh_cpp
3941
{
4042
// TODO(yuyuan): SHM, make this configurable
@@ -43,6 +45,7 @@ namespace rmw_zenoh_cpp
4345
///=============================================================================
4446
std::shared_ptr<PublisherData> PublisherData::make(
4547
std::shared_ptr<ZenohSession> session,
48+
const rmw_publisher_t * const rmw_publisher,
4649
const rmw_node_t * const node,
4750
liveliness::NodeInfo node_info,
4851
std::size_t node_id,
@@ -192,6 +195,7 @@ std::shared_ptr<PublisherData> PublisherData::make(
192195

193196
return std::shared_ptr<PublisherData>(
194197
new PublisherData{
198+
rmw_publisher,
195199
node,
196200
std::move(entity),
197201
std::move(session),
@@ -205,6 +209,7 @@ std::shared_ptr<PublisherData> PublisherData::make(
205209

206210
///=============================================================================
207211
PublisherData::PublisherData(
212+
const rmw_publisher_t * const rmw_publisher,
208213
const rmw_node_t * rmw_node,
209214
std::shared_ptr<liveliness::Entity> entity,
210215
std::shared_ptr<ZenohSession> sess,
@@ -213,7 +218,8 @@ PublisherData::PublisherData(
213218
z_owned_liveliness_token_t token,
214219
const void * type_support_impl,
215220
std::unique_ptr<MessageTypeSupport> type_support)
216-
: rmw_node_(rmw_node),
221+
: rmw_publisher_(rmw_publisher),
222+
rmw_node_(rmw_node),
217223
entity_(std::move(entity)),
218224
sess_(std::move(sess)),
219225
pub_(std::move(pub)),
@@ -311,9 +317,12 @@ rmw_ret_t PublisherData::publish(
311317
z_owned_bytes_t attachment;
312318
uint8_t local_gid[RMW_GID_STORAGE_SIZE];
313319
entity_->copy_gid(local_gid);
314-
create_map_and_set_sequence_num(&attachment, sequence_number_++, local_gid);
320+
int64_t source_timestamp = 0;
321+
create_map_and_set_sequence_num(&attachment, sequence_number_++, local_gid, &source_timestamp);
315322
options.attachment = z_move(attachment);
316323

324+
TRACETOOLS_TRACEPOINT(
325+
rmw_publish, static_cast<const void *>(rmw_publisher_), ros_message, source_timestamp);
317326
z_owned_bytes_t payload;
318327
if (shmbuf.has_value()) {
319328
z_bytes_from_shm_mut(&payload, z_move(shmbuf.value()));
@@ -360,11 +369,14 @@ rmw_ret_t PublisherData::publish_serialized_message(
360369
uint8_t local_gid[RMW_GID_STORAGE_SIZE];
361370
entity_->copy_gid(local_gid);
362371
z_owned_bytes_t attachment;
363-
create_map_and_set_sequence_num(&attachment, sequence_number_++, local_gid);
372+
int64_t source_timestamp = 0;
373+
create_map_and_set_sequence_num(&attachment, sequence_number_++, local_gid, &source_timestamp);
364374
options.attachment = z_move(attachment);
365375
z_owned_bytes_t payload;
366376
z_bytes_copy_from_buf(&payload, serialized_message->buffer, data_length);
367377

378+
TRACETOOLS_TRACEPOINT(
379+
rmw_publish, static_cast<const void *>(rmw_publisher_), serialized_message, source_timestamp);
368380
z_result_t res = z_publisher_put(z_loan(pub_), z_move(payload), &options);
369381
if (res != Z_OK) {
370382
if (res == Z_ESESSION_CLOSED) {

Diff for: rmw_zenoh_cpp/src/detail/rmw_publisher_data.hpp

+4
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class PublisherData final
4444
// Make a shared_ptr of PublisherData.
4545
static std::shared_ptr<PublisherData> make(
4646
std::shared_ptr<ZenohSession> session,
47+
const rmw_publisher_t * const rmw_publisher,
4748
const rmw_node_t * const node,
4849
liveliness::NodeInfo node_info,
4950
std::size_t node_id,
@@ -89,6 +90,7 @@ class PublisherData final
8990
private:
9091
// Constructor.
9192
PublisherData(
93+
const rmw_publisher_t * const rmw_publisher,
9294
const rmw_node_t * rmw_node,
9395
std::shared_ptr<liveliness::Entity> entity,
9496
std::shared_ptr<ZenohSession> sess,
@@ -100,6 +102,8 @@ class PublisherData final
100102

101103
// Internal mutex.
102104
mutable std::mutex mutex_;
105+
// The rmw publisher
106+
const rmw_publisher_t * rmw_publisher_;
103107
// The parent node.
104108
const rmw_node_t * rmw_node_;
105109
// The Entity generated for the publisher.

Diff for: rmw_zenoh_cpp/src/detail/rmw_service_data.cpp

+16-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
#include "rmw/get_topic_endpoint_info.h"
3737
#include "rmw/impl/cpp/macros.hpp"
3838

39+
#include "tracetools/tracetools.h"
40+
3941
namespace rmw_zenoh_cpp
4042
{
4143
///==============================================================================
@@ -67,6 +69,7 @@ void service_data_handler(z_loaned_query_t * query, void * data)
6769
std::shared_ptr<ServiceData> ServiceData::make(
6870
std::shared_ptr<ZenohSession> session,
6971
const rmw_node_t * const node,
72+
const rmw_service_t * rmw_service,
7073
liveliness::NodeInfo node_info,
7174
std::size_t node_id,
7275
std::size_t service_id,
@@ -149,6 +152,7 @@ std::shared_ptr<ServiceData> ServiceData::make(
149152
auto service_data = std::shared_ptr<ServiceData>(
150153
new ServiceData{
151154
node,
155+
rmw_service,
152156
std::move(entity),
153157
session,
154158
request_members,
@@ -228,13 +232,15 @@ std::shared_ptr<ServiceData> ServiceData::make(
228232
///=============================================================================
229233
ServiceData::ServiceData(
230234
const rmw_node_t * rmw_node,
235+
const rmw_service_t * rmw_service,
231236
std::shared_ptr<liveliness::Entity> entity,
232237
std::shared_ptr<ZenohSession> sess,
233238
const void * request_type_support_impl,
234239
const void * response_type_support_impl,
235240
std::unique_ptr<RequestTypeSupport> request_type_support,
236241
std::unique_ptr<ResponseTypeSupport> response_type_support)
237242
: rmw_node_(rmw_node),
243+
rmw_service_(rmw_service),
238244
entity_(std::move(entity)),
239245
sess_(std::move(sess)),
240246
request_type_support_impl_(request_type_support_impl),
@@ -455,11 +461,20 @@ rmw_ret_t ServiceData::send_response(
455461
z_query_reply_options_default(&options);
456462

457463
z_owned_bytes_t attachment;
464+
int64_t source_timestamp = 0;
458465
rmw_zenoh_cpp::create_map_and_set_sequence_num(
459466
&attachment, request_id->sequence_number,
460-
request_id->writer_guid);
467+
request_id->writer_guid, &source_timestamp);
461468
options.attachment = z_move(attachment);
462469

470+
TRACETOOLS_TRACEPOINT(
471+
rmw_send_response,
472+
static_cast<const void *>(rmw_service_),
473+
static_cast<const void *>(ros_response),
474+
request_id->writer_guid,
475+
request_id->sequence_number,
476+
source_timestamp);
477+
463478
z_owned_bytes_t payload;
464479
z_bytes_copy_from_buf(
465480
&payload, reinterpret_cast<const uint8_t *>(response_bytes), data_length);

Diff for: rmw_zenoh_cpp/src/detail/rmw_service_data.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class ServiceData final
4949
static std::shared_ptr<ServiceData> make(
5050
std::shared_ptr<ZenohSession> session,
5151
const rmw_node_t * const node,
52+
const rmw_service_t * rmw_service,
5253
liveliness::NodeInfo node_info,
5354
std::size_t node_id,
5455
std::size_t service_id,
@@ -98,6 +99,7 @@ class ServiceData final
9899
// Constructor.
99100
ServiceData(
100101
const rmw_node_t * rmw_node,
102+
const rmw_service_t * rmw_service,
101103
std::shared_ptr<liveliness::Entity> entity,
102104
std::shared_ptr<ZenohSession> sess,
103105
const void * request_type_support_impl,
@@ -109,6 +111,7 @@ class ServiceData final
109111
mutable std::mutex mutex_;
110112
// The parent node.
111113
const rmw_node_t * rmw_node_;
114+
const rmw_service_t * rmw_service_;
112115
// The Entity generated for the service.
113116
std::shared_ptr<liveliness::Entity> entity_;
114117
// An owned keyexpression.

Diff for: rmw_zenoh_cpp/src/detail/zenoh_utils.cpp

+9-3
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,19 @@ ZenohSession::~ZenohSession()
4040

4141
///=============================================================================
4242
void create_map_and_set_sequence_num(
43-
z_owned_bytes_t * out_bytes, int64_t sequence_number, uint8_t gid[RMW_GID_STORAGE_SIZE])
43+
z_owned_bytes_t * out_bytes,
44+
int64_t sequence_number,
45+
uint8_t gid[RMW_GID_STORAGE_SIZE],
46+
int64_t * source_timestamp)
4447
{
4548
auto now = std::chrono::system_clock::now().time_since_epoch();
4649
auto now_ns = std::chrono::duration_cast<std::chrono::nanoseconds>(now);
47-
int64_t source_timestamp = now_ns.count();
50+
int64_t timestamp = now_ns.count();
51+
if (nullptr != source_timestamp) {
52+
*source_timestamp = timestamp;
53+
}
4854

49-
AttachmentData data(sequence_number, source_timestamp, gid);
55+
AttachmentData data(sequence_number, timestamp, gid);
5056
data.serialize_to_zbytes(out_bytes);
5157
}
5258

Diff for: rmw_zenoh_cpp/src/detail/zenoh_utils.hpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ class ZenohSession final
4444
void
4545
create_map_and_set_sequence_num(
4646
z_owned_bytes_t * out_bytes, int64_t sequence_number,
47-
uint8_t gid[RMW_GID_STORAGE_SIZE]);
47+
uint8_t gid[RMW_GID_STORAGE_SIZE],
48+
int64_t * source_timestamp = nullptr);
4849

4950
///=============================================================================
5051
// A class to store the replies to service requests.

0 commit comments

Comments
 (0)