From f9ef14e058270ca0cadc35357ca6c32c60fc2c9a Mon Sep 17 00:00:00 2001 From: Christophe Bedard Date: Wed, 31 Mar 2021 14:50:17 -0400 Subject: [PATCH] Set callback_instances' timestamp & duration cols to datetime/timedelta Signed-off-by: Christophe Bedard --- tracetools_analysis/analysis/callback_duration.ipynb | 3 ++- .../tracetools_analysis/data_model/ros2.py | 5 +++-- .../tracetools_analysis/scripts/cb_durations.py | 11 ++++++++--- tracetools_analysis/tracetools_analysis/utils/ros2.py | 9 ++++----- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/tracetools_analysis/analysis/callback_duration.ipynb b/tracetools_analysis/analysis/callback_duration.ipynb index 3e6f044..4954a97 100644 --- a/tracetools_analysis/analysis/callback_duration.ipynb +++ b/tracetools_analysis/analysis/callback_duration.ipynb @@ -127,7 +127,8 @@ " duration.xaxis[0].formatter = DatetimeTickFormatter(seconds=['%Ss'])\n", "\n", " # Histogram\n", - " dur_hist, edges = np.histogram(duration_df['duration'])\n", + " # (convert to milliseconds)\n", + " dur_hist, edges = np.histogram(duration_df['duration'] * 1000 / np.timedelta64(1, 's'))\n", " duration_hist = pd.DataFrame({\n", " 'duration': dur_hist, \n", " 'left': edges[:-1], \n", diff --git a/tracetools_analysis/tracetools_analysis/data_model/ros2.py b/tracetools_analysis/tracetools_analysis/data_model/ros2.py index 3d10b6c..8fe8462 100644 --- a/tracetools_analysis/tracetools_analysis/data_model/ros2.py +++ b/tracetools_analysis/tracetools_analysis/data_model/ros2.py @@ -15,6 +15,7 @@ """Module for ROS 2 data model.""" +import numpy as np import pandas as pd from . import DataModel @@ -167,8 +168,8 @@ class Ros2DataModel(DataModel): ) -> None: self._callback_instances.append({ 'callback_object': callback_object, - 'timestamp': timestamp, - 'duration': duration, + 'timestamp': np.datetime64(timestamp, 'ns'), + 'duration': np.timedelta64(duration, 'ns'), 'intra_process': intra_process, }) diff --git a/tracetools_analysis/tracetools_analysis/scripts/cb_durations.py b/tracetools_analysis/tracetools_analysis/scripts/cb_durations.py index d2fb98a..2e4119e 100644 --- a/tracetools_analysis/tracetools_analysis/scripts/cb_durations.py +++ b/tracetools_analysis/tracetools_analysis/scripts/cb_durations.py @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import numpy as np import pandas as pd from tracetools_analysis.loading import load_file @@ -48,7 +49,8 @@ def main(): stat_data = [] for ptr, name in du.get_callback_symbols().items(): - durations = du.get_callback_durations(ptr)['duration'] + # Convert to milliseconds to display it + durations = du.get_callback_durations(ptr)['duration'] * 1000 / np.timedelta64(1, 's') stat_data.append(( durations.count(), durations.sum(), @@ -57,5 +59,8 @@ def main(): format_fn(name), )) - stat_df = pd.DataFrame(columns=['Count', 'Sum', 'Mean', 'Std', 'Name'], data=stat_data) - print(stat_df.sort_values(by='Sum', ascending=False).to_string()) + stat_df = pd.DataFrame( + columns=['Count', 'Sum (ms)', 'Mean (ms)', 'Std', 'Name'], + data=stat_data, + ) + print(stat_df.sort_values(by='Sum (ms)', ascending=False).to_string()) diff --git a/tracetools_analysis/tracetools_analysis/utils/ros2.py b/tracetools_analysis/tracetools_analysis/utils/ros2.py index 1b2a902..ad868e8 100644 --- a/tracetools_analysis/tracetools_analysis/utils/ros2.py +++ b/tracetools_analysis/tracetools_analysis/utils/ros2.py @@ -1,5 +1,6 @@ # Copyright 2019 Robert Bosch GmbH # Copyright 2019 Apex.AI, Inc. +# Copyright 2021 Christophe Bedard # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -134,15 +135,13 @@ class Ros2DataModelUtil(DataModelUtil): Get durations of callback instances for a given callback object. :param callback_obj: the callback object value - :return: a dataframe containing the start timestamp (datetime) - and duration (ms) of all callback instances for that object + :return: a dataframe containing the start timestamp (np.timestamp64) + and duration (np.timedelta64) of all callback instances for that object """ - data = self.data.callback_instances.loc[ + return self.data.callback_instances.loc[ self.data.callback_instances.loc[:, 'callback_object'] == callback_obj, ['timestamp', 'duration'] ] - # Time conversion - return self.convert_time_columns(data, ['duration'], ['timestamp']) def get_node_tid_from_name( self,