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
 }

 rmw_take{
 address rmw_subscription_handle
 address message
 uint64_t source_timestamp
 bool taken
 }

 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
 }

 dds_write{
 address message
 }

 dds_bind_addr_to_stamp{
 address addr
 uint64_t source_stamp
 }

 rclcpp_ring_buffer_enqueue{
 address buffer
 uint64_t index
 uint64_t size
 bool overwritten
 }

 rclcpp_ring_buffer_dequeue{
 address buffer
 uint64_t index
 uint64_t size
 }

 rcl_lifecycle_transition{
 address state_machine
 string start_label
 string goal_label
 }

    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

    dds_bind_addr_to_stamp ||--|| rmw_take: source_timestamp
    rmw_take ||--|| callback_start: tid
    dispatch_intra_process_subscription_callback ||--|| callback_start: callback
    dispatch_subscription_callback ||--|| callback_start: callback
    rclcpp_intra_publish ||--|| rclcpp_ring_buffer_enqueue: tid
    rclcpp_ring_buffer_enqueue ||--|| rclcpp_ring_buffer_dequeue: buffer_and_index
    rclcpp_ring_buffer_dequeue ||--|| callback_start: tid
    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(Not available after iron) 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

Note

Not available after iron.


ros2:rclcpp_intra_publish#

[Extended tracepoints]

Sampled items

  • void * publisher_handle
  • void * message

Note

In humble, they are Extended trace points, but from iron onwards they are Built-in trace points.


ros2:dispatch_subscription_callback#

[Extended tracepoints]

Sampled items

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

Note

This tracepoint is no longer used from v0.4.10 onwards.


ros2:rmw_take#

[Built-in tracepoints]

Sampled items

  • void * rmw_subscription_handle
  • void * message
  • int64_t * source_timestamp
  • bool * taken

Note

In CARET, this tracepoint is used to correctly link the callback_start to the rclcpp_publish that triggered the callback. Until version 0.4.9, ros2:dispatch_subscription_callback was used to link rclcpp_publish and callback_start events.


ros2:dispatch_intra_process_subscription_callback#

[Extended tracepoints]

Sampled items

  • void * message
  • void * callback
  • uint64_t message_timestamp

ros2:rclcpp_ring_buffer_enqueue#

[Built-in tracepoints]

Sampled items

  • void * buffer
  • uint64_t index
  • uint64_t size
  • bool overwritten

Note

Only for iron or later and intra communication.


ros2:rclcpp_ring_buffer_dequeue#

[Built-in tracepoints]

Sampled items

  • void * buffer
  • uint64_t index
  • uint64_t size

Note

Only for iron or later and intra communication.


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

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

Note

In fastdds, the publish() of GenericPublisher does not output this tracepoint.


ros2_caret:dds_bind_addr_to_addr#

[Hooked tracepoints]

Sampled items

  • void * addr_from
  • void * addr_to

ros2_caret:rcl_lifecycle_transition#

[Built-in tracepoints]

Sampled items

  • void * state_machine
  • char * start_label
  • char * goal_label