diff --git a/tracetools/include/tracetools/tracetools.h b/tracetools/include/tracetools/tracetools.h index bc7060a..b96a8cd 100644 --- a/tracetools/include/tracetools/tracetools.h +++ b/tracetools/include/tracetools/tracetools.h @@ -38,6 +38,16 @@ void ros_trace_rcl_publisher_init(const char * node_name, const char * node_name */ void ros_trace_rcl_subscription_init(const char * node_name, const char * topic_name); +/** + * tp: rclcpp_callback_start + */ +void ros_trace_rclcpp_callback_start(const void * callback, const bool is_intra_process); + +/** + * tp: rclcpp_callback_end + */ +void ros_trace_rclcpp_callback_end(const void * callback); + #ifdef __cplusplus } #endif diff --git a/tracetools/lttng/tp_call.tp b/tracetools/lttng/tp_call.tp index c02e6d9..1f62616 100644 --- a/tracetools/lttng/tp_call.tp +++ b/tracetools/lttng/tp_call.tp @@ -49,3 +49,27 @@ TRACEPOINT_EVENT( ctf_string(topic_name, topic_name_arg) ) ) + +TRACEPOINT_EVENT( + ros2, + rclcpp_callback_start, + TP_ARGS( + const void*, callback_arg, + int, is_intra_process_arg + ), + TP_FIELDS( + ctf_integer_hex(const void*, callback, callback_arg) + ctf_integer(int, is_intra_process, is_intra_process_arg) + ) +) + +TRACEPOINT_EVENT( + ros2, + rclcpp_callback_end, + TP_ARGS( + const void*, callback_arg + ), + TP_FIELDS( + ctf_integer_hex(const void*, callback, callback_arg) + ) +) diff --git a/tracetools/scripts/setup-lttng.sh b/tracetools/scripts/setup-lttng.sh index 24a6e17..b146a0e 100755 --- a/tracetools/scripts/setup-lttng.sh +++ b/tracetools/scripts/setup-lttng.sh @@ -5,7 +5,9 @@ for event in \ ros2:rcl_init \ ros2:rcl_node_init \ ros2:rcl_publisher_init \ - ros2:rcl_subscription_init + ros2:rcl_subscription_init \ + ros2:rclcpp_callback_start \ + ros2:rclcpp_callback_end do lttng enable-event -c ros2 -u $event done diff --git a/tracetools/src/tracetools.c b/tracetools/src/tracetools.c index a48b9a9..a335318 100644 --- a/tracetools/src/tracetools.c +++ b/tracetools/src/tracetools.c @@ -41,3 +41,17 @@ void ros_trace_rcl_subscription_init(const char * node_name, const char * topic_ tracepoint(ros2, rcl_subscription_init, node_name, topic_name); #endif } + +void ros_trace_rclcpp_callback_start(const void * callback, const bool is_intra_process) +{ +#ifdef WITH_LTTNG + tracepoint(ros2, rclcpp_callback_start, callback, (is_intra_process ? 1 : 0)); +#endif +} + +void ros_trace_rclcpp_callback_end(const void * callback) +{ +#ifdef WITH_LTTNG + tracepoint(ros2, rclcpp_callback_end, callback); +#endif +} \ No newline at end of file