Skip to content

Initialization trace points

Some tracepoints share same addresses (e.g. node_handle and callback address). By binding these addresses, CARET constructs structures of each trace point relationship.

Relationships for each initialization trace points#

Relationships of each trace point related to a single node are shown as follows.

erDiagram
 rcl_init{
 address context_handle
 }

 caret_init{
 int64_t clock_offset
 }

 rcl_node_init{
 address node_handle
 address rmw_handle
 string node_name
 string node_namespace
 }

 rcl_publisher_init{
 address publisher_handle
 address node_handle
 address rmw_publisher_handle
 string topic_name
 size_t queue_depth
 }

 rcl_subscription_init{
 address subscription_handle
 address node_handle
 address rmw_subscription_handle
 string topic_name
 size_t queue_depth
 }

 rclcpp_subscription_init{
 address subscription_handle
 address subscription
 }

 rclcpp_subscription_callback_added{
 address subscription
 address callback
 }

 rcl_service_init{
 address service_handle
 address node_handle
 address rmw_service_handle
 string service_name
 }

 rclcpp_service_callback_added{
 address service_hadle
 address callback
 }

 rcl_timer_init{
 address timer_handle
 int64_t period
 }

 rclcpp_timer_callback_added{
 address timer_handle
 address callback
 }

 rclcpp_timer_link_node{
 address timer_handle
 address node_handle
 }

 rclcpp_callback_register{
 address callback
 string function_symbol
 }

 rmw_implementation{
 string rmw_impl
 }

    rcl_node_init ||--o{ rcl_publisher_init : node_handle
    rcl_node_init ||--o{ rcl_subscription_init : node_handle
    rcl_node_init ||--o{ rclcpp_timer_link_node : node_handle
    rcl_node_init ||--o{ rcl_service_init : node_handle

    rcl_publisher_init ||--|| PUBLISHER_HANDLE : node_handle
    rcl_subscription_init ||--|| SUBSCRIPTION_HANDLE : node_handle
    rcl_timer_init ||--|| TIMER_HANDLE : node_handle
    rcl_service_init ||--|| SERVICE_HANDLE : node_handle

    rcl_subscription_init ||--|| rclcpp_subscription_init : subscription_handle
    rclcpp_subscription_init ||--|| rclcpp_subscription_callback_added : subscription

    rcl_service_init ||--|| rclcpp_service_callback_added : service_handle
    rclcpp_service_callback_added ||--|| rclcpp_callback_register : callback

    rclcpp_timer_callback_added ||--|| rclcpp_callback_register : callback
    rclcpp_subscription_callback_added ||--|| rclcpp_callback_register : callback

    rclcpp_timer_callback_added ||--|| rcl_timer_init : timer_handle
    rclcpp_timer_link_node ||--|| rcl_timer_init: timer_handle

Tracepoints for representing structure of executor and callback group#

A handler such as timer_handle or subscription_handle is assigned to a callback group. A callback group belongs to an executor.

Relationships of each trace point related to executors are shown as follows.

erDiagram
 construct_executor{
 address executor_addr
 string executor_type_name
 }

 construct_static_executor{
 address executor_addr
 address entities_collector_addr
 string executor_type_name
 }

 add_callback_group{
 address executor_addr
 address callback_group_addr
 string group_type_name
 }

 add_callback_group_static_executor{
 address entities_collector_addr
 address callback_group_addr
 string group_type_name
 }

 callback_group_add_timer{
 address callback_group_addr
 address timer_handle
 }

 callback_group_add_subscription{
 address callback_group_addr
 address subscription_handle
 }

 callback_group_add_service{
 address callback_group_addr
 address service_handle
 }

 callback_group_add_client{
 address callback_group_addr
 address client_handle
 }


 construct_executor ||--o{ add_callback_group : executor_addr
 construct_static_executor ||--o{ add_callback_group_static_executor : entities_collector_addr

    add_callback_group_static_executor ||--o{ callback_group_add_timer : callback_group_addr
    add_callback_group_static_executor ||--o{ callback_group_add_subscription : callback_group_addr
    add_callback_group_static_executor ||--o{ callback_group_add_service : callback_group_addr
    add_callback_group_static_executor ||--o{ callback_group_add_client : callback_group_addr
    add_callback_group ||--o{ callback_group_add_timer : callback_group_addr
    add_callback_group ||--o{ callback_group_add_subscription : callback_group_addr
    add_callback_group ||--o{ callback_group_add_service : callback_group_addr
    add_callback_group ||--o{ callback_group_add_client : callback_group_addr

    callback_group_add_timer ||--|| TIMER_HANDLE : callback_group_addr
    callback_group_add_subscription ||--|| SUBSCRIPTION_HANDLE : callback_group_addr
    callback_group_add_service ||--|| SERVICE_HANDLE : callback_group_addr
    callback_group_add_client ||--|| CLIENT_HANDLE : callback_group_addr

tf 関連#

erDiagram
    send_transform {
        address tf_broadcaster
        address publisher_handle
    }
    tf_bind_tf_buffer_core {
        address tf_buffer_core
        address callback
    }
    init_tf_buffer_lookup_transform {
        address tf_buffer_core
        string target_frame_id
        string source_frame_id
    }
    construct_tf_buffer {
        address tf_buffer
        address tf_buffer_core
        address clock
    }
    init_bind_tf_broadcaster_send_transform {
        address tf_broadcaster
        string header_frame_id
        string child_frame_id
    }
    init_bind_tf_broadcaster_send_transform ||--|| send_transform: tf_broadcaster
    construct_tf_buffer ||--|| tf_bind_tf_buffer_core: tf_buffer_core
    tf_buffer_core ||--|| init_tf_buffer_lookup_transform: tf_buffer_core

Trace point definition#

The following shows the definition of trace points. A handler such as timer_handle or subscription_handle is assigned to a callback group. A callback group belongs to an executor.

Trace points with (caret_trace added) are hooked and added init_timestamp by caret_trace. See Runtime recording for detail.

ros2:rcl_init#

[Built-in tracepoints]

Sampled items

  • void * context_handle
  • int64_t init_timestamp (caret_trace added)

ros2:rcl_node_init#

[Built-in tracepoints]

Sampled items

  • void * node_handle
  • void * rmw_handle
  • char * node_name
  • char * node_namespace
  • int64_t init_timestamp (caret_trace added)

ros2:rcl_publisher_init#

[Built-in tracepoints]

Sampled items

  • void * publisher_handle
  • void * node_handle
  • void * rmw_publisher_handle
  • char * topic_name
  • size_t queue_depth
  • int64_t init_timestamp (caret_trace added)

ros2:rcl_subscription_init#

[Built-in tracepoints]

Sampled items

  • void * subscription_handle
  • void * node_handle
  • void * rmw_subscription_handle
  • char * topic_name
  • size_t queue_depth
  • int64_t init_timestamp (caret_trace added)

ros2:rclcpp_subscription_init#

[Built-in tracepoints]

Sampled items

  • void * subscription_handle
  • void * subscription
  • int64_t init_timestamp (caret_trace added)

ros2:rclcpp_subscription_callback_added#

[Built-in tracepoints]

Sampled items

  • void * subscription
  • void * callback
  • int64_t init_timestamp (caret_trace added)

ros2:rcl_service_init#

[Built-in tracepoints]

Sampled items

  • void * service_handle
  • void * node_handle
  • void * rmw_service_handle
  • char * service_name

ros2:rclcpp_service_callback_added#

[Built-in tracepoints]

Sampled items

  • void * service_handle
  • void * callback

ros2:rcl_timer_init#

[Built-in tracepoints]

Sampled items

  • void * timer_handle
  • int64_t period
  • int64_t init_timestamp (caret_trace added)

ros2:rclcpp_timer_callback_added#

[Built-in tracepoints]

Sampled items

  • void * timer_handle
  • void * callback
  • int64_t init_timestamp (caret_trace added)

[Built-in tracepoints]

Sampled items

  • void * timer_handle
  • void * node_handle
  • int64_t init_timestamp (caret_trace added)

ros2:rclcpp_callback_register#

[Built-in tracepoints]

Sampled items

  • void * callback
  • char * function_symbol
  • int64_t init_timestamp (caret_trace added)

ros2_caret:caret_init#

[Hooked tracepoints]

Sampled items

  • int64_t * clock_offset

ros2_caret:rmw_implementation#

[Hooked tracepoints]

Sampled items

  • char * rmw_impl
  • int64_t init_timestamp

ros2_caret:construct_executor#

[Hooked tracepoints]

Sampled items

  • void * executor_addr
  • char * executor_type_name
  • int64_t init_timestamp

ros2_caret:construct_static_executor#

[Hooked tracepoints]

Sampled items

  • void * executor_addr
  • void * entities_collector_addr
  • char * executor_type_name
  • int64_t init_timestamp

ros2_caret:add_callback_group#

[Hooked tracepoints]

Sampled items

  • void * executor_addr
  • void * callback_group_addr
  • char * group_type_name
  • int64_t init_timestamp

ros2_caret:add_callback_group_static_executor#

[Hooked tracepoints]

Sampled items

  • void * entities_collector_addr
  • void * callback_group_addr
  • char * group_type_name
  • int64_t init_timestamp

ros2_caret:callback_group_add_timer#

[Hooked tracepoints]

Sampled items

  • void * callback_group_addr
  • void * timer_handle
  • int64_t init_timestamp

ros2_caret:callback_group_add_subscription#

[Hooked tracepoints]

Sampled items

  • void * callback_group_addr
  • void * subscription_handle
  • int64_t init_timestamp

ros2_caret:callback_group_add_service#

[Hooked tracepoints]

Sampled items

  • void * callback_group_addr
  • void * service_handle
  • int64_t init_timestamp

ros2_caret:callback_group_add_client#

[Hooked tracepoints]

Sampled items

  • void * callback_group_addr
  • void * client_handle
  • int64_t init_timestamp

ros2_caret:send_transform#

[Hooked tracepoints]

Sampled items

  • void * tf_broadcaster
  • void * publisher_handle

tf_bind_tf_buffer_core#

[Hooked tracepoints]

Sampled items

  • void * tf_buffer_core
  • void * callback

init_tf_buffer_set_transform#

  • void * tf_buffer_core
  • char * frame_id
  • char * child_frame_id

init_tf_buffer_lookup_transform#

  • void * tf_buffer_core
  • char * target_frame_id
  • char * source_frame_id

construct_tf_buffer#

[Hooked tracepoints]

Sampled items

  • void * tf_buffer
  • void * tf_buffer_core
  • void * clock

ros2_caret:init_bind_tf_broadcaster_send_transform#

[Hooked tracepoints]

Sampled items

  • void * tf_broadcaster
  • char * header_frame_id
  • char * child_frame_id