From d8c352c08248c1e1d3c0dedf5b02eca7fd636927 Mon Sep 17 00:00:00 2001 From: Christophe Bedard Date: Tue, 18 Jun 2024 19:25:41 -0400 Subject: [PATCH] Handle trace without callback objects (#27) Signed-off-by: Christophe Bedard --- .../test/tracetools_analysis/test_utils.py | 8 ++++++++ tracetools_analysis/tracetools_analysis/utils/ros2.py | 3 +++ 2 files changed, 11 insertions(+) diff --git a/tracetools_analysis/test/tracetools_analysis/test_utils.py b/tracetools_analysis/test/tracetools_analysis/test_utils.py index 16d0886..cf69ae5 100644 --- a/tracetools_analysis/test/tracetools_analysis/test_utils.py +++ b/tracetools_analysis/test/tracetools_analysis/test_utils.py @@ -16,6 +16,8 @@ import unittest from tracetools_analysis import time_diff_to_str +from tracetools_analysis.data_model.ros2 import Ros2DataModel +from tracetools_analysis.utils.ros2 import Ros2DataModelUtil class TestUtils(unittest.TestCase): @@ -31,3 +33,9 @@ def test_time_diff_to_str(self) -> None: self.assertEqual('1 m 10 s', time_diff_to_str(69.6969)) self.assertEqual('6 m 10 s', time_diff_to_str(369.6969)) self.assertEqual('2 m 0 s', time_diff_to_str(120.499999999)) + + def test_ros2_no_callbacks(self) -> None: + data_model = Ros2DataModel() + data_model.finalize() + util = Ros2DataModelUtil(data_model) + self.assertEqual({}, util.get_callback_symbols()) diff --git a/tracetools_analysis/tracetools_analysis/utils/ros2.py b/tracetools_analysis/tracetools_analysis/utils/ros2.py index 845b28c..3f845e0 100644 --- a/tracetools_analysis/tracetools_analysis/utils/ros2.py +++ b/tracetools_analysis/tracetools_analysis/utils/ros2.py @@ -117,6 +117,9 @@ def get_callback_symbols(self) -> Mapping[int, str]: callback_instances = self.data.callback_instances callback_symbols = self.data.callback_symbols + if 'callback_object' not in callback_instances.columns: + return {} + # Get a list of callback objects callback_objects = set(callback_instances['callback_object']) # Get their symbol