Skip to content

Initialization trace points

"Initialization tracepoints” are tracepoints that occur mainly when ROS configuration objects such as Node, Executor, and Callback are created. 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
 string distribution
 }

 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
 }

 rclcpp_buffer_to_ipb{
 address buffer
 address ipb
 }

 rclcpp_ipb_to_subscription{
 address ipb
 address subscription
 }

 rclcpp_construct_ring_buffer{
 address buffer
 uint64_t capacity
 }

 rmw_implementation{
 string rmw_impl
 }

 rcl_client_init{
 address client_handle
 address node_handle
 address rmw_client_handle
 string service_name
 }

 rcl_lifecycle_state_machine_init{
 address node_handle
 address state_machine
 }

    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

    rclcpp_subscription_init ||--|| rclcpp_ipb_to_subscription : subscription
    rclcpp_ipb_to_subscription ||--|| rclcpp_buffer_to_ipb : ipb
    rclcpp_buffer_to_ipb ||--|| rclcpp_construct_ring_buffer : buffer

    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

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:rclcpp_ipb_to_subscription#

[Built-in tracepoints]

Sampled items

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

Note

Only for iron or later and intra communication.


ros2:rclcpp_buffer_to_ipb#

[Built-in tracepoints]

Sampled items

  • void * buffer
  • void * ipb
  • int64_t init_timestamp (caret_trace added)

Note

Only for iron or later and intra communication.


ros2:rclcpp_construct_ring_buffer#

[Built-in tracepoints]

Sampled items

  • void * buffer
  • uint64_t capacity
  • int64_t init_timestamp (caret_trace added)

Note

Only for iron or later and intra communication.


ros2_caret:caret_init#

[Hooked tracepoints]

Sampled items

  • int64_t clock_offset
  • char * distribution

ros2_caret:rmw_implementation#

[Hooked tracepoints]

Sampled items

  • char * rmw_impl
  • int64_t init_timestamp

ros2:rcl_client_init#

[Built-in tracepoints]

Sampled items

  • void * client_handle
  • void * node_handle
  • void * rmw_client_handle
  • char * service_name

ros2:rcl_lifecycle_state_machine_init#

[Built-in tracepoints]

Sampled items

  • void * node_handle
  • void * state_machine

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