diff --git a/tracetools_analysis/tracetools_analysis/data_model/ros.py b/tracetools_analysis/tracetools_analysis/data_model/ros.py index e1064db..45e6fdf 100644 --- a/tracetools_analysis/tracetools_analysis/data_model/ros.py +++ b/tracetools_analysis/tracetools_analysis/data_model/ros.py @@ -56,6 +56,10 @@ class RosDataModel(DataModel): 'topic_name', 'depth']) self.subscriptions.set_index(['subscription_handle'], inplace=True, drop=True) + self.subscriptions_objects = pd.DataFrame(columns=['subscription', + 'timestamp', + 'subscription_handle']) + self.subscriptions_objects.set_index(['subscription'], inplace=True, drop=True) self.services = pd.DataFrame(columns=['service_handle', 'timestamp', 'node_handle', @@ -74,10 +78,10 @@ class RosDataModel(DataModel): 'tid']) self.timers.set_index(['timer_handle'], inplace=True, drop=True) - self.callback_objects = pd.DataFrame(columns=['handle', + self.callback_objects = pd.DataFrame(columns=['reference', 'timestamp', 'callback_object']) - self.callback_objects.set_index(['handle'], inplace=True, drop=True) + self.callback_objects.set_index(['reference'], inplace=True, drop=True) self.callback_symbols = pd.DataFrame(columns=['callback_object', 'timestamp', 'symbol']) @@ -104,11 +108,16 @@ class RosDataModel(DataModel): ) -> None: self.publishers.loc[handle] = [timestamp, node_handle, rmw_handle, topic_name, depth] - def add_subscription( + def add_rcl_subscription( self, handle, timestamp, node_handle, rmw_handle, topic_name, depth ) -> None: self.subscriptions.loc[handle] = [timestamp, node_handle, rmw_handle, topic_name, depth] + def add_rclcpp_subscription( + self, subscription_pointer, timestamp, subscription_handle + ) -> None: + self.subscriptions_objects[subscription_pointer] = [timestamp, subscription_handle] + def add_service( self, handle, timestamp, node_handle, rmw_handle, service_name ) -> None: @@ -125,9 +134,9 @@ class RosDataModel(DataModel): self.timers.loc[handle] = [timestamp, period, tid] def add_callback_object( - self, handle, timestamp, callback_object + self, reference, timestamp, callback_object ) -> None: - self.callback_objects.loc[handle] = [timestamp, callback_object] + self.callback_objects.loc[reference] = [timestamp, callback_object] def add_callback_symbol( self, callback_object, timestamp, symbol @@ -156,6 +165,8 @@ class RosDataModel(DataModel): print() print(f'Subscriptions:\n{self.subscriptions.to_string()}') print() + print(f'Subscription objects:\n{self.subscriptions_objects.to_string()}') + print() print(f'Services:\n{self.services.to_string()}') print() print(f'Clients:\n{self.clients.to_string()}') diff --git a/tracetools_analysis/tracetools_analysis/processor/ros2.py b/tracetools_analysis/tracetools_analysis/processor/ros2.py index 914086b..7b06888 100644 --- a/tracetools_analysis/tracetools_analysis/processor/ros2.py +++ b/tracetools_analysis/tracetools_analysis/processor/ros2.py @@ -43,7 +43,9 @@ class Ros2Handler(EventHandler): 'ros2:rcl_publisher_init': self._handle_rcl_publisher_init, 'ros2:rcl_subscription_init': - self._handle_subscription_init, + self._handle_rcl_subscription_init, + 'ros2:rclcpp_subscription_init': + self._handle_rclcpp_subscription_init, 'ros2:rclcpp_subscription_callback_added': self._handle_rclcpp_subscription_callback_added, 'ros2:rcl_service_init': @@ -108,7 +110,7 @@ class Ros2Handler(EventHandler): depth = get_field(event, 'queue_depth') self.data.add_publisher(handle, timestamp, node_handle, rmw_handle, topic_name, depth) - def _handle_subscription_init( + def _handle_rcl_subscription_init( self, event: Dict, metadata: EventMetadata ) -> None: handle = get_field(event, 'subscription_handle') @@ -117,15 +119,23 @@ class Ros2Handler(EventHandler): rmw_handle = get_field(event, 'rmw_subscription_handle') topic_name = get_field(event, 'topic_name') depth = get_field(event, 'queue_depth') - self.data.add_subscription(handle, timestamp, node_handle, rmw_handle, topic_name, depth) + self.data.add_rcl_subscription(handle, timestamp, node_handle, rmw_handle, topic_name, depth) + + def _handle_rclcpp_subscription_init( + self, event: Dict, metadata: EventMetadata, + ) -> None: + subscription_pointer = get_field(event, 'subscription') + timestamp = metadata.timestamp + handle = get_field(event, 'subscription_handle') + self.data.add_rclcpp_subscription(subscription_pointer, timestamp, handle) def _handle_rclcpp_subscription_callback_added( self, event: Dict, metadata: EventMetadata ) -> None: - handle = get_field(event, 'subscription_handle') + subscription_pointer = get_field(event, 'subscription') timestamp = metadata.timestamp callback_object = get_field(event, 'callback') - self.data.add_callback_object(handle, timestamp, callback_object) + self.data.add_callback_object(subscription_pointer, timestamp, callback_object) def _handle_rcl_service_init( self, event: Dict, metadata: EventMetadata