Skip to content

Runtime trace points

Relationships of each runtime trace points#

erDiagram

 callback_start{
 address callback
 bool is_intra_process
 }

 callback_end{
 address callback
 }

 message_construct{
 address original_message
 address constructed_message
 }

 dds_bind_addr_to_addr{
 address addr_from
 address addr_to
 }

 rclcpp_intra_publish{
 address publisher_handle
 address message
 uint64_t message_timestamp
 }

 dispatch_subscription_callback{
 address message
 address callback
 uint64_t source_timestamp
 uint64_t message_timestamp
 }

 dispatch_intra_process_subscription_callback{
 address message
 address callback
 uint64_t message_timestamp
 }

 rcl_publish{
 address publisher_handle
 address message
 }

 rclcpp_publish{
 address publisher_handle
 address message
 uint64_t message_timestamp
 }

 dds_write{
 address message
 }

 dds_bind_addr_to_stamp{
 address addr
 uint64_t source_stamp
 }

    rclcpp_intra_publish ||--|| dispatch_intra_process_subscription_callback: message_addr
    rclcpp_publish ||--|| rcl_publish: message_addr
    rcl_publish ||--|| dds_write: message_addr
    dds_write ||--|| dds_bind_addr_to_stamp: message_addr

    dds_bind_addr_to_stamp ||--|| dispatch_subscription_callback: source_timestamp


    dispatch_intra_process_subscription_callback ||--|| callback_start: callback
    dispatch_subscription_callback ||--|| callback_start: callback
    callback_start ||--|| callback_end: callback

Using addresses, thread id (tid) and source timestamp, CARET is able to identify a pair of message publish and corresponding subscription. However, it's difficult to associate a certain message publish to corresponding callback execution because mapping between callback and publish cannot be obtained automatically.

message_construct and dds_bind_addr_to_addr are trace points to adapt to copying and converting instances for binding.

Trace point definition#

ros2:callback_start#

[Built-in tracepoints]

Sampled items

  • void * callback
  • bool is_intra_process

ros2:callback_end#

[Built-in tracepoints]

Sampled items

  • void * callback

ros2:message_construct#

[Extended tracepoints]

Sampled items

  • void * original_message
  • void * constructed_message

ros2:rclcpp_intra_publish#

[Extended tracepoints]

Sampled items

  • void * publisher_handle
  • void * message
  • uint64_t message_timestamp

ros2:dispatch_subscription_callback#

[Extended tracepoints]

Sampled items

  • void * message
  • void * callback
  • uint64_t source_timestamp
  • uint64_t message_timestamp

ros2:dispatch_intra_process_subscription_callback#

[Extended tracepoints]

Sampled items

  • void * message
  • void * callback
  • uint64_t message_timestamp

ros2:rcl_publish#

[Built-in tracepoints]

Sampled items

  • void * publisher_handle
  • void * message

ros2:rclcpp_publish#

[Built-in tracepoints]

Sampled items

  • void * publisher_handle
  • void * message
  • uint64_t message_timestamp

ros2_caret:dds_write#

[Hooked tracepoints]

Sampled items

  • void * message

ros2_caret:dds_bind_addr_to_stamp#

[Hooked tracepoints]

Sampled items

  • void * addr
  • uint64_t source_stamp

ros2_caret:dds_bind_addr_to_addr#

[Hooked tracepoints]

Sampled items

  • void * addr_from
  • void * addr_to