diff --git a/src/caret_analyze/infra/lttng/lttng.py b/src/caret_analyze/infra/lttng/lttng.py index 8acec0a44..bbd753a48 100644 --- a/src/caret_analyze/infra/lttng/lttng.py +++ b/src/caret_analyze/infra/lttng/lttng.py @@ -226,8 +226,6 @@ def __len__(self) -> int: @staticmethod def _to_event(msg: Any) -> dict[str, Any]: - if msg.event.name == 'ros2_caret:dds_write': - print(msg.event.name) event: dict[str, Any] = {} event[LttngEventFilter.NAME] = msg.event.name event[LttngEventFilter.TIMESTAMP] = msg.default_clock_snapshot.ns_from_origin @@ -342,12 +340,12 @@ class Lttng(InfraBase): 'ros2:rcl_lifecycle_state_machine_init', 'ros2_caret:caret_init', 'ros2_caret:rmw_implementation', - 'ros2_caret:executor_entity_collector_to_executor', 'ros2_caret:construct_executor', 'ros2_caret:construct_static_executor', - 'ros2_caret:callback_group_to_executor_entity_collector', 'ros2_caret:add_callback_group', 'ros2_caret:add_callback_group_static_executor', + 'ros2_caret:executor_entity_collector_to_executor', + 'ros2_caret:callback_group_to_executor_entity_collector', 'ros2_caret:callback_group_add_timer', 'ros2_caret:callback_group_add_subscription', 'ros2_caret:callback_group_add_service', diff --git a/src/caret_analyze/infra/lttng/lttng_info.py b/src/caret_analyze/infra/lttng/lttng_info.py index 5440fe86f..afa84d79d 100644 --- a/src/caret_analyze/infra/lttng/lttng_info.py +++ b/src/caret_analyze/infra/lttng/lttng_info.py @@ -19,8 +19,6 @@ from functools import cached_property, lru_cache from logging import getLogger, WARN -import os - import pandas as pd from .ros2_tracing.data_model import Ros2DataModel @@ -1265,8 +1263,11 @@ def _build_cbg( ) -> TracePointData: columns = ['callback_group_id', 'callback_group_addr', 'group_type_name', 'executor_addr'] - ros_version = os.environ['ROS_DISTRO'] - if ros_version[0] >= 'jazzy'[0]: + if len(data.caret_init.df) != 0: + distribution = data.caret_init.df['distribution'] + else: + distribution = 'NOTFOUND' + if distribution[0] >= 'jazzy'[0]: callback_groups = data.callback_group_to_executor_entity_collector.clone() callback_groups.reset_index() diff --git a/src/caret_analyze/infra/lttng/ros2_tracing/data_model.py b/src/caret_analyze/infra/lttng/ros2_tracing/data_model.py index 85acfa66c..4e3801403 100644 --- a/src/caret_analyze/infra/lttng/ros2_tracing/data_model.py +++ b/src/caret_analyze/infra/lttng/ros2_tracing/data_model.py @@ -124,7 +124,6 @@ def __init__(self) -> None: columns=[ ColumnValue('tid'), ColumnValue('dds_write_timestamp'), - ColumnValue('rmw_publisher_handle'), ColumnValue('message'), ] ) @@ -536,13 +535,11 @@ def add_dds_write_instance( self, tid: int, timestamp: int, - rmw_publisher_handle: int, message: int, ) -> None: record = { 'tid': tid, 'dds_write_timestamp': timestamp, - 'rmw_publisher_handle': rmw_publisher_handle, 'message': message, } self.dds_write_instances.append(record) diff --git a/src/caret_analyze/infra/lttng/ros2_tracing/processor.py b/src/caret_analyze/infra/lttng/ros2_tracing/processor.py index 5e1c925b4..fd3758b8c 100644 --- a/src/caret_analyze/infra/lttng/ros2_tracing/processor.py +++ b/src/caret_analyze/infra/lttng/ros2_tracing/processor.py @@ -19,8 +19,6 @@ from collections import defaultdict -import os - from typing import Any, TYPE_CHECKING import bt2 @@ -886,13 +884,9 @@ def _handle_dds_write( tid = get_field(event, '_vtid') # memo: "timestamp" is not read because alternative data is used # memo: "timestamp" and "_timestamp" are different + # memo: "rmw_publisher_handle" is not used so will not be loaded - ros_version = os.environ['ROS_DISTRO'] - if ros_version[0] >= 'jazzy'[0]: - rmw_publisher_handle = get_field(event, 'rmw_publisher_handle') - self.data.add_dds_write_instance(tid, timestamp, rmw_publisher_handle, message) - else: - self.data.add_dds_write_instance(tid, timestamp, 0, message) + self.data.add_dds_write_instance(tid, timestamp, message) def _handle_dds_bind_addr_to_stamp( self, @@ -954,7 +948,7 @@ def _handle_executor_entity_collector_to_executor( executor_addr = get_field(event, 'executor_addr') executor_entities_collector_addr = get_field(event, 'executor_entities_collector_addr') - executor_addr = self._remapper.executor_addr_remapper.register_and_get_object_id( + executor_addr = self._remapper.executor_addr_remapper.get_nearest_object_id( executor_addr, event) executor_entities_collector_addr = \ self._remapper.executor_entities_collector_addr_remapper.register_and_get_object_id( @@ -970,14 +964,8 @@ def _handle_construct_executor( executor_addr = get_field(event, 'executor_addr') executor_type_name = get_field(event, 'executor_type_name') - ros_version = os.environ['ROS_DISTRO'] - - if ros_version[0] >= 'jazzy'[0]: - executor_addr = \ - self._remapper.executor_addr_remapper.get_nearest_object_id(executor_addr, event) - else: - executor_addr = self._remapper.executor_addr_remapper.register_and_get_object_id( - executor_addr, event) + executor_addr = self._remapper.executor_addr_remapper.register_and_get_object_id( + executor_addr, event) self.data.add_executor(executor_addr, timestamp, executor_type_name) @@ -990,14 +978,8 @@ def _handle_construct_static_executor( collector_addr = get_field(event, 'entities_collector_addr') executor_type_name = get_field(event, 'executor_type_name') - ros_version = os.environ['ROS_DISTRO'] - - if ros_version[0] >= 'jazzy'[0]: - executor_addr = \ - self._remapper.executor_addr_remapper.get_nearest_object_id(executor_addr, event) - else: - executor_addr = self._remapper.executor_addr_remapper.register_and_get_object_id( - executor_addr, event) + executor_addr = self._remapper.executor_addr_remapper.register_and_get_object_id( + executor_addr, event) collector_addr = \ self._remapper.entities_collector_addr_remapper.register_and_get_object_id( diff --git a/src/test/infra/lttng/ros2_tracing/test_ros2_tracing.py b/src/test/infra/lttng/ros2_tracing/test_ros2_tracing.py index 4d66f9108..6f51911b8 100644 --- a/src/test/infra/lttng/ros2_tracing/test_ros2_tracing.py +++ b/src/test/infra/lttng/ros2_tracing/test_ros2_tracing.py @@ -39,7 +39,7 @@ def test_add_tracepoints(self): data.add_rclcpp_intra_publish_instance(0, 0, 0, 0, 0) data.add_rclcpp_publish_instance(0, 0, 0, 0, 0) data.add_rcl_publish_instance(0, 0, 0, 0) - data.add_dds_write_instance(0, 0, 0, 0) + data.add_dds_write_instance(0, 0, 0) data.add_dds_bind_addr_to_addr(0, 0, 0) data.add_message_construct_instance(0, 0, 0) data.add_dispatch_subscription_callback_instance(0, 0, 0, 0, 0) diff --git a/src/test/infra/lttng/test_event_counter.py b/src/test/infra/lttng/test_event_counter.py index 909bf387a..1d68b5dc6 100644 --- a/src/test/infra/lttng/test_event_counter.py +++ b/src/test/infra/lttng/test_event_counter.py @@ -61,7 +61,7 @@ def test_build_count_df_increment_count(self): data.add_rclcpp_ring_buffer_dequeue_instance(0, 0, 0, 0, 0) data.add_rclcpp_publish_instance(0, 0, 0, 0, 0) data.add_rcl_publish_instance(0, 0, 0, 0) - data.add_dds_write_instance(0, 0, 0, 0) + data.add_dds_write_instance(0, 0, 0) data.add_dds_bind_addr_to_addr(0, 0, 0) data.add_dds_bind_addr_to_stamp(0, 0, 0, 0) data.add_on_data_available_instance(0, 0) @@ -113,7 +113,7 @@ def test_validation_without_dds_tracepoint( ): data = Ros2DataModel() data.add_dispatch_subscription_callback_instance(0, 0, 0, 0, 0) # pass rclcpp-check - data.add_dds_write_instance(0, 0, 0, 0) # pass LD_PRELOAD check + data.add_dds_write_instance(0, 0, 0) # pass LD_PRELOAD check data.finalize() logger = getLogger('caret_analyze.infra.lttng.event_counter') @@ -136,7 +136,7 @@ def test_validation_without_forked_rclcpp( has_rmw_take, ): data = Ros2DataModel() - data.add_dds_write_instance(0, 0, 0, 0) # pass LD_PRELOAD check + data.add_dds_write_instance(0, 0, 0) # pass LD_PRELOAD check data.add_dds_bind_addr_to_stamp(0, 0, 0, 0) # pass dds layer check if has_rmw_take: data.add_rmw_take_instance(0, 0, 0, 0, 0) # pass rmw_take check @@ -176,7 +176,7 @@ def test_check_original_rclcpp_publish( ): data = Ros2DataModel() # pass rclcpp-check - data.add_dds_write_instance(0, 0, 0, 0) # pass LD_PRELOAD check + data.add_dds_write_instance(0, 0, 0) # pass LD_PRELOAD check data.add_dds_bind_addr_to_stamp(0, 0, 0, 0) # pass dds layer check data.add_rmw_take_instance(0, 0, 0, 0, 0) # pass rmw_take check if use_caret_rclcpp: @@ -205,7 +205,7 @@ def test_distributions( distribution = 'distribution' data.add_caret_init(0, 0, distribution) - data.add_dds_write_instance(0, 0, 0, 0) # pass LD_PRELOAD check + data.add_dds_write_instance(0, 0, 0) # pass LD_PRELOAD check data.add_dds_bind_addr_to_stamp(0, 0, 0, 0) # pass dds layer check data.finalize() @@ -223,7 +223,7 @@ def test_validation_with_distribution( ): data = Ros2DataModel() data.add_caret_init(0, 0, distribution) - data.add_dds_write_instance(0, 0, 0, 0) # pass LD_PRELOAD check + data.add_dds_write_instance(0, 0, 0) # pass LD_PRELOAD check data.add_dds_bind_addr_to_stamp(0, 0, 0, 0) # pass dds layer check data.finalize() @@ -243,7 +243,7 @@ def test_validation_valid_case( ): data = Ros2DataModel() data.add_dispatch_subscription_callback_instance(0, 0, 0, 0, 0) # pass rclcpp-check - data.add_dds_write_instance(0, 0, 0, 0) # pass LD_PRELOAD check + data.add_dds_write_instance(0, 0, 0) # pass LD_PRELOAD check data.add_dds_bind_addr_to_stamp(0, 0, 0, 0) # pass dds layer check data.finalize() diff --git a/src/test/infra/lttng/test_latency_definitions.py b/src/test/infra/lttng/test_latency_definitions.py index 740e89c37..de426a303 100644 --- a/src/test/infra/lttng/test_latency_definitions.py +++ b/src/test/infra/lttng/test_latency_definitions.py @@ -531,7 +531,7 @@ def test_single_publisher_without_tilde( data.add_rclcpp_publish_instance( tid, 1, 0, message_addr, message_timestamp) data.add_rcl_publish_instance(tid, 2, pub_handle, message_addr) - data.add_dds_write_instance(tid, 3, 0, message_addr) + data.add_dds_write_instance(tid, 3, message_addr) data.add_dds_bind_addr_to_stamp( tid, 4, message_addr, source_timestamp) data.finalize() @@ -686,7 +686,7 @@ def test_single_publisher_with_tilde( data.add_rclcpp_publish_instance( tid, 2, 0, message_addr, message_timestamp) data.add_rcl_publish_instance(tid, 3, pub_handle, message_addr) - data.add_dds_write_instance(tid, 4, 0, message_addr) + data.add_dds_write_instance(tid, 4, message_addr) data.add_dds_bind_addr_to_stamp( tid, 5, message_addr, source_timestamp) data.finalize() @@ -750,7 +750,7 @@ def test_generic_publisher( message_addr = 9 data.add_rclcpp_publish_instance(tid, 2, pub_handle, message_addr, message_timestamp) data.add_rcl_publish_instance(tid, 3, pub_handle, message_addr) - data.add_dds_write_instance(tid, 4, 0, message_addr) + data.add_dds_write_instance(tid, 4, message_addr) data.add_dds_bind_addr_to_stamp(tid, 6, message_addr, source_timestamp) # generic_publisher @@ -1287,7 +1287,7 @@ def test_tilde( data.add_rclcpp_publish_instance( tid, 4, pub_handle, message_addr, message_timestamp) data.add_rcl_publish_instance(tid, 5, pub_handle, message_addr) - data.add_dds_write_instance(tid, 6, 0, message_addr) + data.add_dds_write_instance(tid, 6, message_addr) data.add_dds_bind_addr_to_stamp(tid, 7, message_addr, source_timestamp) data.finalize() @@ -1420,7 +1420,7 @@ def test_inter_proc( data.add_rclcpp_publish_instance( tid, 1, pub_handle, send_message, message_stamp) data.add_rcl_publish_instance(tid, 2, pub_handle, send_message) - data.add_dds_write_instance(tid, 3, 0, send_message) + data.add_dds_write_instance(tid, 3, send_message) data.add_dds_bind_addr_to_stamp( tid, 4, send_message, source_stamp) if has_dispatch: diff --git a/src/test/infra/lttng/test_lttng.py b/src/test/infra/lttng/test_lttng.py index 783bb29f5..9797f7c40 100644 --- a/src/test/infra/lttng/test_lttng.py +++ b/src/test/infra/lttng/test_lttng.py @@ -16,8 +16,6 @@ from datetime import datetime import functools -import os - from caret_analyze.infra.lttng import Lttng from caret_analyze.infra.lttng.event_counter import EventCounter from caret_analyze.infra.lttng.lttng import EventCollection, IterableEvents, MultiHostIdRemapper @@ -317,14 +315,17 @@ def test_singleton_disabled(self, mocker): assert lttng_.events == events_ assert lttng.events != lttng_.events - def test_compare_init_event(self): + @pytest.mark.parametrize( + 'distribution', + ['jazzy', 'iron'], + ) + def test_compare_init_event(self, distribution): init_events = [] event_collection = {} - ros_version = os.environ['ROS_DISTRO'] TIME_ORDER = 0 SORT_ORDER_ADD_IRON = 4 - if ros_version[0] >= 'jazzy'[0]: + if distribution[0] >= 'jazzy'[0]: SORT_ORDER_EXE_AND_CB = 10 SORT_ORDER_INIT = 20 SMALL_ORDER = 50 @@ -365,7 +366,7 @@ def test_compare_init_event(self): '_name': 'ros2_caret:rclcpp_construct_ring_buffer', '_timestamp': 600, } # executor and callback group - if ros_version[0] >= 'jazzy'[0]: + if distribution[0] >= 'jazzy'[0]: event_collection[SORT_ORDER_EXE_AND_CB+0] = { '_name': 'ros2_caret:callback_group_add_client', '_timestamp': 600, } event_collection[SORT_ORDER_EXE_AND_CB+1] = { @@ -374,19 +375,20 @@ def test_compare_init_event(self): '_name': 'ros2_caret:callback_group_add_subscription', '_timestamp': 600, } event_collection[SORT_ORDER_EXE_AND_CB+3] = { '_name': 'ros2_caret:callback_group_add_timer', '_timestamp': 600, } + event_collection[SORT_ORDER_EXE_AND_CB+4] = { - '_name': 'ros2_caret:add_callback_group_static_executor', '_timestamp': 600, } - event_collection[SORT_ORDER_EXE_AND_CB+5] = { - '_name': 'ros2_caret:add_callback_group', '_timestamp': 600, } - event_collection[SORT_ORDER_EXE_AND_CB+6] = { '_name': 'ros2_caret:callback_group_to_executor_entity_collector', '_timestamp': 600, } + event_collection[SORT_ORDER_EXE_AND_CB+5] = { + '_name': 'ros2_caret:executor_entity_collector_to_executor', '_timestamp': 600, } + event_collection[SORT_ORDER_EXE_AND_CB+6] = { + '_name': 'ros2_caret:add_callback_group_static_executor', '_timestamp': 600, } event_collection[SORT_ORDER_EXE_AND_CB+7] = { - '_name': 'ros2_caret:construct_static_executor', '_timestamp': 600, } + '_name': 'ros2_caret:add_callback_group', '_timestamp': 600, } event_collection[SORT_ORDER_EXE_AND_CB+8] = { - '_name': 'ros2_caret:construct_executor', '_timestamp': 600, } + '_name': 'ros2_caret:construct_static_executor', '_timestamp': 600, } event_collection[SORT_ORDER_EXE_AND_CB+9] = { - '_name': 'ros2_caret:executor_entity_collector_to_executor', '_timestamp': 600, } + '_name': 'ros2_caret:construct_executor', '_timestamp': 600, } else: event_collection[SORT_ORDER_EXE_AND_CB+0] = { '_name': 'ros2_caret:callback_group_add_client', '_timestamp': 600, } @@ -555,25 +557,25 @@ def test_compare_init_event(self): assert init_events[RESULT_ORDER_INIT+33]['_timestamp'] == 600 and \ init_events[RESULT_ORDER_INIT+33]['_name'] == 'ros2_caret:rmw_implementation' - if ros_version[0] >= 'jazzy'[0]: + if distribution[0] >= 'jazzy'[0]: assert init_events[RESULT_ORDER_EXE_AND_CB+0]['_timestamp'] == 600 and \ init_events[RESULT_ORDER_EXE_AND_CB+0]['_name'] == \ - 'ros2_caret:executor_entity_collector_to_executor' + 'ros2_caret:construct_executor' assert init_events[RESULT_ORDER_EXE_AND_CB+1]['_timestamp'] == 600 and \ init_events[RESULT_ORDER_EXE_AND_CB+1]['_name'] == \ - 'ros2_caret:construct_executor' + 'ros2_caret:construct_static_executor' assert init_events[RESULT_ORDER_EXE_AND_CB+2]['_timestamp'] == 600 and \ init_events[RESULT_ORDER_EXE_AND_CB+2]['_name'] == \ - 'ros2_caret:construct_static_executor' + 'ros2_caret:add_callback_group' assert init_events[RESULT_ORDER_EXE_AND_CB+3]['_timestamp'] == 600 and \ init_events[RESULT_ORDER_EXE_AND_CB+3]['_name'] == \ - 'ros2_caret:callback_group_to_executor_entity_collector' + 'ros2_caret:add_callback_group_static_executor' assert init_events[RESULT_ORDER_EXE_AND_CB+4]['_timestamp'] == 600 and \ init_events[RESULT_ORDER_EXE_AND_CB+4]['_name'] == \ - 'ros2_caret:add_callback_group' + 'ros2_caret:executor_entity_collector_to_executor' assert init_events[RESULT_ORDER_EXE_AND_CB+5]['_timestamp'] == 600 and \ init_events[RESULT_ORDER_EXE_AND_CB+5]['_name'] == \ - 'ros2_caret:add_callback_group_static_executor' + 'ros2_caret:callback_group_to_executor_entity_collector' assert init_events[RESULT_ORDER_EXE_AND_CB+6]['_timestamp'] == 600 and \ init_events[RESULT_ORDER_EXE_AND_CB+6]['_name'] == \ 'ros2_caret:callback_group_add_timer' @@ -1295,7 +1297,7 @@ def test_duplicated_events_caret_init(self, mocker): { '_name': 'ros2_caret:caret_init', 'clock_offset': 10, - 'distribution': 20, + 'distribution': 'dummy', '_timestamp': 100100901, '_vtid': VTID1, '_vpid': VPID1 @@ -1319,16 +1321,27 @@ def test_duplicated_events_caret_init(self, mocker): # ['rmw_impl'] assert lttng.data.rmw_impl.df.iloc[0]['rmw_impl'] == 10 - def test_duplicated_events_entities_collector(self, mocker): + @pytest.mark.parametrize( + 'distribution', + ['jazzy', 'iron'], + ) + def test_duplicated_events_entities_collector(self, mocker, distribution): HDL_EXECUTOR = 1001101 EXECUTOR_CALLBACK = 1001261 HDL_EXECUTOR_ENTITY = 1000701 VTID1 = 500001 VPID1 = 600001 - ros_version = os.environ['ROS_DISTRO'] - if ros_version[0] >= 'jazzy'[0]: + if distribution[0] >= 'jazzy'[0]: events = [ + { + '_name': 'ros2_caret:caret_init', + 'clock_offset': 10, + 'distribution': distribution, + '_timestamp': 100100901, + '_vtid': VTID1, + '_vpid': VPID1 + }, { '_name': 'ros2_caret:callback_group_to_executor_entity_collector', 'executor_entities_collector_addr': HDL_EXECUTOR_ENTITY, @@ -1390,19 +1403,30 @@ def test_duplicated_events_entities_collector(self, mocker): lttng.data.callback_group_to_executor_entity_collector.\ df.iloc[1]['callback_group_addr'] == 1 - def test_duplicated_events_executors(self, mocker): + @pytest.mark.parametrize( + 'distribution', + ['jazzy', 'iron'], + ) + def test_duplicated_events_executors(self, mocker, distribution): HDL_EXECUTOR = 1001101 HDL_EXECUTOR_STATIC = 1001201 HDL_ENTITIES = 1001211 VTID1 = 500001 VPID1 = 600001 - ros_version = os.environ['ROS_DISTRO'] - if ros_version[0] >= 'jazzy'[0]: + if distribution[0] >= 'jazzy'[0]: EXECUTOR_CALLBACK = 1001261 HDL_EXECUTOR_ENTITY = 1000701 events = [ + { + '_name': 'ros2_caret:caret_init', + 'clock_offset': 10, + 'distribution': distribution, + '_timestamp': 100100901, + '_vtid': VTID1, + '_vpid': VPID1 + }, { '_name': 'ros2_caret:callback_group_to_executor_entity_collector', 'executor_entities_collector_addr': HDL_EXECUTOR_ENTITY, @@ -1437,11 +1461,75 @@ def test_duplicated_events_executors(self, mocker): '_vtid': VTID1, '_vpid': VPID1 }, + { + '_name': 'ros2_caret:construct_executor', + 'executor_addr': HDL_EXECUTOR, + 'executor_type_name': 'my_executor_name', + '_timestamp': 100101101, + '_vtid': VTID1, + '_vpid': VPID1 + }, + { + '_name': 'ros2_caret:construct_executor', + 'executor_addr': HDL_EXECUTOR, + 'executor_type_name': 'my_executor_name', + '_timestamp': 100101103, + '_vtid': VTID1, + '_vpid': VPID1 + }, + { + '_name': 'ros2_caret:construct_static_executor', + 'executor_addr': HDL_EXECUTOR_STATIC, + 'entities_collector_addr': HDL_ENTITIES, + 'executor_type_name': 'my_executor_name', + '_timestamp': 100101102, + '_vtid': VTID1, + '_vpid': VPID1 + }, + { + '_name': 'ros2_caret:construct_static_executor', + 'executor_addr': HDL_EXECUTOR_STATIC, + 'entities_collector_addr': HDL_ENTITIES, + 'executor_type_name': 'my_executor_name', + '_timestamp': 100101203, + '_vtid': VTID1, + '_vpid': VPID1 + }, + { + '_name': 'ros2_caret:construct_static_executor', + 'executor_addr': HDL_EXECUTOR_STATIC, + 'entities_collector_addr': HDL_ENTITIES, + 'executor_type_name': 'my_executor_name', + '_timestamp': 100101205, + '_vtid': VTID1, + '_vpid': VPID1 + }, ] lttng = Lttng(events, event_filters=[], validate=False) # executors + # ['timestamp', 'executor_type_name'] + assert lttng.data.executors.df.index[0] == HDL_EXECUTOR and \ + lttng.data.executors.df.iloc[0]['timestamp'] == 100101101 + + assert lttng.data.executors.df.index[1] == 1 and \ + lttng.data.executors.df.iloc[1]['timestamp'] == 100101103 + + # executors_static + # ['timestamp', 'entities_collector_addr', 'executor_type_name'] + assert lttng.data.executors_static.df.index[0] == HDL_EXECUTOR_STATIC and \ + lttng.data.executors_static.df.iloc[0]['timestamp'] == 100101102 and \ + lttng.data.executors_static.df.iloc[0]['entities_collector_addr'] == HDL_ENTITIES + + assert lttng.data.executors_static.df.index[1] == 2 and \ + lttng.data.executors_static.df.iloc[1]['timestamp'] == 100101203 and \ + lttng.data.executors_static.df.iloc[1]['entities_collector_addr'] == 1 + + assert lttng.data.executors_static.df.index[2] == 3 and \ + lttng.data.executors_static.df.iloc[2]['timestamp'] == 100101205 and \ + lttng.data.executors_static.df.iloc[2]['entities_collector_addr'] == 2 + # ['timestamp', 'executor_entities_collector_addr'] assert lttng.data.executor_entity_collector_to_executor.\ df.index[0] == HDL_EXECUTOR and \ @@ -1458,6 +1546,14 @@ def test_duplicated_events_executors(self, mocker): else: events = [ # Initialization trace points + { + '_name': 'ros2_caret:caret_init', + 'clock_offset': 10, + 'distribution': distribution, + '_timestamp': 100100901, + '_vtid': VTID1, + '_vpid': VPID1 + }, { '_name': 'ros2_caret:construct_executor', 'executor_addr': HDL_EXECUTOR, @@ -1527,7 +1623,11 @@ def test_duplicated_events_executors(self, mocker): lttng.data.executors_static.df.iloc[2]['timestamp'] == 100101205 and \ lttng.data.executors_static.df.iloc[2]['entities_collector_addr'] == 2 - def test_duplicated_events_callback_groups(self, mocker): + @pytest.mark.parametrize( + 'distribution', + ['jazzy', 'iron'], + ) + def test_duplicated_events_callback_groups(self, mocker, distribution): HDL_NODE = 1000201 HDL_RMW = 1000211 HDL_TIMER = 1000701 @@ -1546,11 +1646,18 @@ def test_duplicated_events_callback_groups(self, mocker): VTID1 = 500001 VPID1 = 600001 - ros_version = os.environ['ROS_DISTRO'] - if ros_version[0] >= 'jazzy'[0]: + if distribution[0] >= 'jazzy'[0]: HDL_EXECUTOR_ENTITY = 1000701 events = [ # Initialization trace points + { + '_name': 'ros2_caret:caret_init', + 'clock_offset': 10, + 'distribution': distribution, + '_timestamp': 100100901, + '_vtid': VTID1, + '_vpid': VPID1 + }, { '_name': 'ros2:rcl_node_init', 'node_handle': HDL_NODE, @@ -1866,6 +1973,14 @@ def test_duplicated_events_callback_groups(self, mocker): else: events = [ # Initialization trace points + { + '_name': 'ros2_caret:caret_init', + 'clock_offset': 10, + 'distribution': distribution, + '_timestamp': 100100901, + '_vtid': VTID1, + '_vpid': VPID1 + }, { '_name': 'ros2:rcl_node_init', 'node_handle': HDL_NODE, @@ -2138,7 +2253,7 @@ def test_duplicated_events_callback_groups(self, mocker): lttng = Lttng(events, event_filters=[], validate=False) - if ros_version[0] >= 'jazzy'[0]: + if distribution[0] >= 'jazzy'[0]: assert lttng.data.callback_group_to_executor_entity_collector.\ df.index[0] == HDL_EXECUTOR_ENTITY and \ lttng.data.callback_group_to_executor_entity_collector.\ @@ -2380,7 +2495,11 @@ def test_duplicated_events_buffer(self, mocker): lttng.data.ipb_to_subscriptions.df.iloc[1]['timestamp'] == 100101902 and \ lttng.data.ipb_to_subscriptions.df.iloc[1]['subscription'] == 1 - def test_duplicated_events_runtime(self, mocker): + @pytest.mark.parametrize( + 'distribution', + ['jazzy', 'iron'], + ) + def test_duplicated_events_runtime(self, mocker, distribution): HDL_NODE = 1000201 HDL_RMW = 1000211 HDL_PUBLISHER = 1000301 @@ -2398,6 +2517,14 @@ def test_duplicated_events_runtime(self, mocker): events = [ # Runtime trace events + { + '_name': 'ros2_caret:caret_init', + 'clock_offset': 10, + 'distribution': distribution, + '_timestamp': 100100901, + '_vtid': VTID1, + '_vpid': VPID1 + }, { '_name': 'ros2:rcl_node_init', 'node_handle': HDL_NODE, @@ -2979,23 +3106,12 @@ def test_duplicated_events_runtime(self, mocker): lttng.data.rclcpp_publish_instances.\ data[2].data['rclcpp_inter_publish_timestamp'] == 100102804 - ros_version = os.environ['ROS_DISTRO'] - if ros_version[0] >= 'jazzy'[0]: - # dds_write_instances - # ['tid', 'dds_write_timestamp', 'rmw_publisher_handle', 'message'] - assert lttng.data.dds_write_instances.\ - data[0].data['rmw_publisher_handle'] == 200 and \ - lttng.data.dds_write_instances.\ - data[0].data['message'] == 100 and \ - lttng.data.dds_write_instances.\ - data[0].data['dds_write_timestamp'] == 100102901 - else: - # dds_write_instances - # ['tid', 'dds_write_timestamp', 'message'] - assert lttng.data.dds_write_instances.\ - data[0].data['message'] == 100 and \ - lttng.data.dds_write_instances.\ - data[0].data['dds_write_timestamp'] == 100102901 + # dds_write_instances + # ['tid', 'dds_write_timestamp', 'message'] + assert lttng.data.dds_write_instances.\ + data[0].data['message'] == 100 and \ + lttng.data.dds_write_instances.\ + data[0].data['dds_write_timestamp'] == 100102901 # dds_bind_addr_to_stamp # ['tid', 'dds_bind_addr_to_stamp_timestamp', 'addr', 'source_timestamp'] diff --git a/src/test/infra/lttng/test_lttng_info.py b/src/test/infra/lttng/test_lttng_info.py index 79e23cdfe..2f0a63284 100644 --- a/src/test/infra/lttng/test_lttng_info.py +++ b/src/test/infra/lttng/test_lttng_info.py @@ -12,8 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -import os - from caret_analyze.infra.lttng.lttng_info import (DataFrameFormatted, LttngInfo) from caret_analyze.infra.lttng.ros2_tracing.data_model import Ros2DataModel @@ -1242,15 +1240,19 @@ def test_build_nodes_df(self): ).convert_dtypes() assert nodes.df.equals(expect) - def test_build_callback_group_to_executor_entity_collector_df(self): - ros_version = os.environ['ROS_DISTRO'] - if ros_version[0] >= 'jazzy'[0]: + @pytest.mark.parametrize( + 'distribution', + ['jazzy', 'iron'], + ) + def test_build_callback_group_to_executor_entity_collector_df(self, distribution): + if distribution[0] >= 'jazzy'[0]: executor_entities_collector_addr = 2 callback_group_addr = 3 group_type_name = 'reentrant' executor_addr = 4 data = Ros2DataModel() + data.add_caret_init(0, 0, 'jazzy') data.add_callback_group_to_executor_entity_collector( executor_entities_collector_addr, callback_group_addr, group_type_name, 0) data.add_executor_entity_collector_to_executor( @@ -1269,14 +1271,18 @@ def test_build_callback_group_to_executor_entity_collector_df(self): ).convert_dtypes() assert cbg.df.equals(expect) - def test_build_callback_groups_df(self): - ros_version = os.environ['ROS_DISTRO'] - if ros_version[0] < 'jazzy'[0]: + @pytest.mark.parametrize( + 'distribution', + ['jazzy', 'iron'], + ) + def test_build_callback_groups_df(self, distribution): + if distribution[0] < 'jazzy'[0]: exec_addr = 2 callback_group_addr = 3 group_type = 'reentrant' data = Ros2DataModel() + data.add_caret_init(0, 0, distribution) data.add_callback_group(exec_addr, 0, callback_group_addr, group_type) data.finalize() @@ -1292,15 +1298,19 @@ def test_build_callback_groups_df(self): ).convert_dtypes() assert cbg.df.equals(expect) - def test_build_callback_groups_static_df(self): - ros_version = os.environ['ROS_DISTRO'] - if ros_version[0] < 'jazzy'[0]: + @pytest.mark.parametrize( + 'distribution', + ['jazzy', 'iron'], + ) + def test_build_callback_groups_static_df(self, distribution): + if distribution[0] < 'jazzy'[0]: group_type = 'reentrant' collector_addr = 2 cbg_addr = 3 exec_addr = 4 data = Ros2DataModel() + data.add_caret_init(0, 0, distribution) data.add_callback_group_static_executor(collector_addr, 0, cbg_addr, group_type) data.add_executor_static(exec_addr, collector_addr, 0, 'exec_type') data.finalize()