From 12c2c7bad5c23c1d1c760fd761c999007e39049b Mon Sep 17 00:00:00 2001 From: Christophe Bedard Date: Thu, 13 Jun 2019 15:26:21 +0200 Subject: [PATCH] Add handling for services, clients, and timers --- tracetools_analysis/analysis/data_model.py | 19 +++++++--- tracetools_analysis/analysis/processor.py | 41 ++++++++++++---------- 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/tracetools_analysis/analysis/data_model.py b/tracetools_analysis/analysis/data_model.py index f6bbe77..c6ed69d 100644 --- a/tracetools_analysis/analysis/data_model.py +++ b/tracetools_analysis/analysis/data_model.py @@ -22,10 +22,12 @@ class DataModel(): self._publishers.set_index(['publisher_handle'], inplace=True, drop=True) self._subscriptions = pd.DataFrame(columns=['subscription_handle', 'timestamp', 'node_handle', 'rmw_handle', 'topic_name', 'depth']) self._subscriptions.set_index(['subscription_handle'], inplace=True, drop=True) - - self._services = pd.DataFrame(columns=[]) - self._clients = pd.DataFrame(columns=[]) - self._timers = pd.DataFrame(columns=[]) + self._services = pd.DataFrame(columns=['service_handle', 'timestamp', 'node_handle', 'rmw_handle', 'service_name']) + self._services.set_index(['service_handle'], inplace=True, drop=True) + self._clients = pd.DataFrame(columns=['client_handle', 'timestamp', 'node_handle', 'rmw_handle', 'service_name']) + self._clients.set_index(['client_handle'], inplace=True, drop=True) + self._timers = pd.DataFrame(columns=['timer_handle', 'timestamp', 'period']) + self._timers.set_index(['timer_handle'], inplace=True, drop=True) self._callback_objects = pd.DataFrame(columns=['handle', 'timestamp', 'callback_object']) self._callback_objects.set_index(['handle'], inplace=True, drop=True) @@ -47,6 +49,15 @@ class DataModel(): def add_subscription(self, subscription_handle, timestamp, node_handle, rmw_handle, topic_name, depth): self._subscriptions.loc[subscription_handle] = [timestamp, node_handle, rmw_handle, topic_name, depth] + def add_service(self, service_handle, timestamp, node_handle, rmw_handle, service_name): + self._services.loc[service_handle] = [timestamp, node_handle, rmw_handle, service_name] + + def add_client(self, client_handle, timestamp, node_handle, rmw_handle, service_name): + self._clients.loc[client_handle] = [timestamp, node_handle, rmw_handle, service_name] + + def add_timer(self, timer_handle, timestamp, period): + self._timers.loc[timer_handle] = [timestamp, period] + def add_callback_object(self, handle, timestamp, callback_object): self._callback_objects.loc[handle] = [timestamp, callback_object] diff --git a/tracetools_analysis/analysis/processor.py b/tracetools_analysis/analysis/processor.py index 0afb2de..fc285da 100644 --- a/tracetools_analysis/analysis/processor.py +++ b/tracetools_analysis/analysis/processor.py @@ -111,40 +111,45 @@ class RosProcessor(EventHandler): self.__handle_callback_end(event, metadata) def _handle_rcl_service_init(self, event, metadata): - # TODO - pass + service_handle = get_field(event, 'service_handle') + node_handle = get_field(event, 'node_handle') + rmw_handle = get_field(event, 'rmw_service_handle') + service_name = get_field(event, 'service_name') + self._data.add_service(service_handle, metadata.timestamp, node_handle, rmw_handle, service_name) def _handle_rclcpp_service_callback_added(self, event, metadata): - # TODO - pass + service_handle = get_field(event, 'service_handle') + callback_object = get_field(event, 'callback') + self._data.add_callback_object(service_handle, metadata.timestamp, callback_object) def _handle_rclcpp_service_callback_start(self, event, metadata): - # TODO - pass + self.__handle_callback_start(event, metadata) def _handle_rclcpp_service_callback_end(self, event, metadata): - # TODO - pass + self.__handle_callback_end(event, metadata) def _handle_rcl_client_init(self, event, metadata): - # TODO - pass + client_handle = get_field(event, 'client_handle') + node_handle = get_field(event, 'node_handle') + rmw_handle = get_field(event, 'rmw_client_handle') + service_name = get_field(event, 'service_name') + self._data.add_client(client_handle, metadata.timestamp, node_handle, rmw_handle, service_name) def _handle_rcl_timer_init(self, event, metadata): - # TODO - pass + timer_handle = get_field(event, 'timer_handle') + period = get_field(event, 'period') + self._data.add_timer(timer_handle, metadata.timestamp, period) def _handle_rclcpp_timer_callback_added(self, event, metadata): - # TODO - pass + timer_handle = get_field(event, 'timer_handle') + callback_object = get_field(event, 'callback') + self._data.add_callback_object(timer_handle, metadata.timestamp, callback_object) def _handle_rclcpp_timer_callback_start(self, event, metadata): - # TODO - pass + self.__handle_callback_start(event, metadata) def _handle_rclcpp_timer_callback_end(self, event, metadata): - # TODO - pass + self.__handle_callback_end(event, metadata) def _handle_rclcpp_callback_register(self, event, metadata): callback_object = get_field(event, 'callback')