diff --git a/rclcpp/include/rclcpp/experimental/subscription_intra_process.hpp b/rclcpp/include/rclcpp/experimental/subscription_intra_process.hpp index a948311..8a24c0c 100644 --- a/rclcpp/include/rclcpp/experimental/subscription_intra_process.hpp +++ b/rclcpp/include/rclcpp/experimental/subscription_intra_process.hpp @@ -30,6 +30,7 @@ #include "rclcpp/experimental/subscription_intra_process_base.hpp" #include "rclcpp/type_support_decl.hpp" #include "rclcpp/waitable.hpp" +#include "tracetools/tracetools.h" namespace rclcpp { @@ -88,6 +89,15 @@ public: if (RCL_RET_OK != ret) { throw std::runtime_error("SubscriptionIntraProcess init error initializing guard condition"); } + + TRACEPOINT( + rclcpp_subscription_callback_added, + (const void *)this, + (const void *)&any_callback_); + // The callback object gets copied, so if registration is done too early/before this point + // (e.g. in `AnySubscriptionCallback::set()`), its address won't match any address used later + // in subsequent tracepoints. + any_callback_.register_callback_for_tracing(); } bool diff --git a/rclcpp/include/rclcpp/subscription.hpp b/rclcpp/include/rclcpp/subscription.hpp index 81310d7..e568652 100644 --- a/rclcpp/include/rclcpp/subscription.hpp +++ b/rclcpp/include/rclcpp/subscription.hpp @@ -152,6 +152,10 @@ public: qos.get_rmw_qos_profile(), resolve_intra_process_buffer_type(options.intra_process_buffer_type, callback) ); + TRACEPOINT( + rclcpp_subscription_init, + (const void *)get_subscription_handle().get(), + (const void *)subscription_intra_process.get()); // Add it to the intra process manager. using rclcpp::experimental::IntraProcessManager; @@ -161,8 +165,12 @@ public: } TRACEPOINT( - rclcpp_subscription_callback_added, + rclcpp_subscription_init, (const void *)get_subscription_handle().get(), + (const void *)this); + TRACEPOINT( + rclcpp_subscription_callback_added, + (const void *)this, (const void *)&any_callback_); // The callback object gets copied, so if registration is done too early/before this point // (e.g. in `AnySubscriptionCallback::set()`), its address won't match any address used later