From 3f13dd34d024741995c18defddfa70c05ac79a5d Mon Sep 17 00:00:00 2001 From: Christophe Bedard Date: Tue, 28 May 2019 14:16:38 +0200 Subject: [PATCH] Add prospective callback register tracepoint --- tracetools/include/tracetools/tracetools.h | 8 ++++++++ tracetools/lttng/tp_call.tp | 13 +++++++++++++ tracetools/src/tracetools.c | 20 ++++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/tracetools/include/tracetools/tracetools.h b/tracetools/include/tracetools/tracetools.h index 849c6ae..769fc04 100644 --- a/tracetools/include/tracetools/tracetools.h +++ b/tracetools/include/tracetools/tracetools.h @@ -152,6 +152,14 @@ void TRACEPOINT( rclcpp_timer_callback_end, const void * callback); +/** + * tp: rclcpp_callback_register + */ +void TRACEPOINT( + rclcpp_callback_register, + const void * handle, + const void * callback); + #ifdef __cplusplus } #endif diff --git a/tracetools/lttng/tp_call.tp b/tracetools/lttng/tp_call.tp index 232b2c7..9750000 100644 --- a/tracetools/lttng/tp_call.tp +++ b/tracetools/lttng/tp_call.tp @@ -219,3 +219,16 @@ TRACEPOINT_EVENT( ctf_integer_hex(const void *, callback, callback_arg) ) ) + +TRACEPOINT_EVENT( + ros2, + rclcpp_callback_register, + TP_ARGS( + const void *, handle_arg, + const char *, callback_arg + ), + TP_FIELDS( + ctf_integer_hex(const void *, handle, handle_arg) + ctf_string(callback, callback_arg) + ) +) diff --git a/tracetools/src/tracetools.c b/tracetools/src/tracetools.c index ee606bb..7044c55 100644 --- a/tracetools/src/tracetools.c +++ b/tracetools/src/tracetools.c @@ -1,3 +1,4 @@ +#include #include "tracetools/tracetools.h" #if defined(WITH_LTTNG) && !defined(_WIN32) @@ -9,6 +10,17 @@ #endif +const char * get_symbol(const void * function_ptr) { +#if defined(WITH_LTTNG) && !defined(_WIN32) + char** symbols = backtrace_symbols(&function_ptr, 1); + const char * result = symbols[0]; + free(symbols); + return result; +#else + return ""; +#endif +} + bool ros_trace_compile_status() { #if defined(WITH_LTTNG) && !defined(_WIN32) @@ -151,3 +163,11 @@ void TRACEPOINT( { CONDITIONAL_TP(ros2, rclcpp_timer_callback_end, callback); } + +void TRACEPOINT( + rclcpp_callback_register, + const void * handle, + const void * callback) +{ + CONDITIONAL_TP(ros2, rclcpp_callback_register, handle, get_symbol(callback)); +}