From 3743e108084943d2d041257ba9e5606d3190354e Mon Sep 17 00:00:00 2001 From: Brendan Emery Date: Thu, 12 Mar 2026 18:48:27 +0100 Subject: [PATCH 1/3] lola: Add Service/Event/EventData Control Local structs This commit splits up ServiceDataControl, EventDataControl and EventControl into a data class (ServiceDataControl, EventDataControl and EventControl) which contains the data that is placed in shared memory and behaviour "view" classes (ServiceDataControlLocalView, EventDataControlLocalView and EventControlLocalView) which contain behaviour for interacting with the data via process local raw pointers which avoid performance overhead of interacting with data directly in shared memory (due to performance overhead of dealing with OffsetPtrs). --- score/mw/com/impl/bindings/lola/BUILD | 163 +++- .../impl/bindings/lola/event_data_control.cpp | 442 ---------- .../impl/bindings/lola/event_data_control.h | 218 +---- .../lola/event_data_control_composite.cpp | 80 +- .../lola/event_data_control_composite.h | 31 +- .../event_data_control_composite_test.cpp | 132 ++- .../bindings/lola/event_data_control_test.cpp | 760 +----------------- .../event_data_control_test_resources.cpp | 14 +- .../bindings/lola/generic_skeleton_event.cpp | 2 +- .../bindings/lola/generic_skeleton_event.h | 2 + .../lola/methods/method_resource_map.h | 2 +- score/mw/com/impl/bindings/lola/proxy.cpp | 24 +- score/mw/com/impl/bindings/lola/proxy.h | 10 +- .../impl/bindings/lola/proxy_event_common.cpp | 4 +- .../impl/bindings/lola/proxy_event_common.h | 7 +- .../lola/proxy_event_control_local_view.cpp | 24 + .../lola/proxy_event_control_local_view.h | 42 + .../proxy_event_data_control_local_view.cpp | 268 ++++++ .../proxy_event_data_control_local_view.h | 180 +++++ ...oxy_event_data_control_local_view_test.cpp | 548 +++++++++++++ .../impl/bindings/lola/proxy_event_test.cpp | 2 +- .../proxy_service_data_control_local_view.cpp | 13 + .../proxy_service_data_control_local_view.h | 83 ++ ...y_service_data_control_local_view_test.cpp | 147 ++++ .../mw/com/impl/bindings/lola/proxy_test.cpp | 16 +- .../impl/bindings/lola/sample_allocatee_ptr.h | 5 + .../lola/sample_allocatee_ptr_test.cpp | 52 +- score/mw/com/impl/bindings/lola/sample_ptr.h | 8 +- .../impl/bindings/lola/sample_ptr_test.cpp | 74 +- .../impl/bindings/lola/service_data_control.h | 1 - score/mw/com/impl/bindings/lola/skeleton.cpp | 173 ++-- score/mw/com/impl/bindings/lola/skeleton.h | 57 +- .../com/impl/bindings/lola/skeleton_event.h | 4 +- .../bindings/lola/skeleton_event_common.cpp | 4 +- .../skeleton_event_control_local_view.cpp | 23 + .../lola/skeleton_event_control_local_view.h | 38 + ...skeleton_event_data_control_local_view.cpp | 304 +++++++ .../skeleton_event_data_control_local_view.h | 178 ++++ ...ton_event_data_control_local_view_test.cpp | 447 ++++++++++ .../lola/skeleton_event_tracing_test.cpp | 23 +- ...eleton_service_data_control_local_view.cpp | 13 + ...skeleton_service_data_control_local_view.h | 66 ++ ...n_service_data_control_local_view_test.cpp | 147 ++++ .../com/impl/bindings/lola/skeleton_test.cpp | 78 +- .../com/impl/bindings/lola/slot_collector.cpp | 8 +- .../com/impl/bindings/lola/slot_collector.h | 7 +- .../bindings/lola/slot_collector_test.cpp | 45 +- .../impl/bindings/lola/slot_decrementer.cpp | 16 +- .../com/impl/bindings/lola/slot_decrementer.h | 7 +- .../bindings/lola/slot_decrementer_test.cpp | 20 +- .../subscription_not_subscribed_states.cpp | 19 +- .../lola/subscription_state_machine.cpp | 4 +- .../lola/subscription_state_machine.h | 6 +- ...subscription_state_machine_events_test.cpp | 6 +- ...ubscription_state_machine_methods_test.cpp | 2 +- score/mw/com/impl/bindings/lola/test/BUILD | 1 + .../lola/test/proxy_event_test_resources.cpp | 15 +- .../lola/test/proxy_event_test_resources.h | 8 +- .../lola/test/skeleton_component_test.cpp | 2 + .../test/skeleton_event_component_test.cpp | 17 +- .../test/skeleton_event_test_resources.cpp | 16 +- .../lola/test/skeleton_test_resources.cpp | 12 + .../lola/test/skeleton_test_resources.h | 9 +- .../test/transaction_log_test_resources.cpp | 46 +- .../test/transaction_log_test_resources.h | 18 +- .../transaction_log_registration_guard.cpp | 26 +- .../lola/transaction_log_registration_guard.h | 17 +- ...ransaction_log_registration_guard_test.cpp | 53 +- .../transaction_log_rollback_executor.cpp | 23 +- .../lola/transaction_log_rollback_executor.h | 12 +- ...transaction_log_rollback_executor_test.cpp | 18 +- ...proxy_event_field_binding_factory_test.cpp | 2 +- .../plumbing/sample_allocatee_ptr_test.cpp | 6 +- .../com/impl/tracing/skeleton_event_tracing.h | 9 +- 74 files changed, 3455 insertions(+), 1904 deletions(-) create mode 100644 score/mw/com/impl/bindings/lola/proxy_event_control_local_view.cpp create mode 100644 score/mw/com/impl/bindings/lola/proxy_event_control_local_view.h create mode 100644 score/mw/com/impl/bindings/lola/proxy_event_data_control_local_view.cpp create mode 100644 score/mw/com/impl/bindings/lola/proxy_event_data_control_local_view.h create mode 100644 score/mw/com/impl/bindings/lola/proxy_event_data_control_local_view_test.cpp create mode 100644 score/mw/com/impl/bindings/lola/proxy_service_data_control_local_view.cpp create mode 100644 score/mw/com/impl/bindings/lola/proxy_service_data_control_local_view.h create mode 100644 score/mw/com/impl/bindings/lola/proxy_service_data_control_local_view_test.cpp create mode 100644 score/mw/com/impl/bindings/lola/skeleton_event_control_local_view.cpp create mode 100644 score/mw/com/impl/bindings/lola/skeleton_event_control_local_view.h create mode 100644 score/mw/com/impl/bindings/lola/skeleton_event_data_control_local_view.cpp create mode 100644 score/mw/com/impl/bindings/lola/skeleton_event_data_control_local_view.h create mode 100644 score/mw/com/impl/bindings/lola/skeleton_event_data_control_local_view_test.cpp create mode 100644 score/mw/com/impl/bindings/lola/skeleton_service_data_control_local_view.cpp create mode 100644 score/mw/com/impl/bindings/lola/skeleton_service_data_control_local_view.h create mode 100644 score/mw/com/impl/bindings/lola/skeleton_service_data_control_local_view_test.cpp diff --git a/score/mw/com/impl/bindings/lola/BUILD b/score/mw/com/impl/bindings/lola/BUILD index 0b8ae1b55..c56230618 100644 --- a/score/mw/com/impl/bindings/lola/BUILD +++ b/score/mw/com/impl/bindings/lola/BUILD @@ -236,7 +236,6 @@ cc_library( ":application_id_pid_mapping", ":element_fq_id", ":event_control", - ":event_meta_info", "@score_baselibs//score/memory/shared", ], ) @@ -264,6 +263,33 @@ cc_library( ], ) +cc_library( + name = "skeleton_service_data_control_local_view", + srcs = ["skeleton_service_data_control_local_view.cpp"], + hdrs = ["skeleton_service_data_control_local_view.h"], + features = COMPILER_WARNING_FEATURES, + tags = ["FFI"], + deps = [ + ":element_fq_id", + ":service_data_control", + ":skeleton_event_control_local_view", + ], +) + +cc_library( + name = "proxy_service_data_control_local_view", + srcs = ["proxy_service_data_control_local_view.cpp"], + hdrs = ["proxy_service_data_control_local_view.h"], + features = COMPILER_WARNING_FEATURES, + tags = ["FFI"], + deps = [ + ":application_id_pid_mapping", + ":element_fq_id", + ":proxy_event_control_local_view", + ":service_data_control", + ], +) + cc_library( name = "skeleton", srcs = [ @@ -292,10 +318,12 @@ cc_library( ":i_shm_path_builder", ":partial_restart_path_builder", ":proxy_instance_identifier", + ":proxy_service_data_control_local_view", ":service_data_control", ":service_data_storage", ":shm_path_builder", ":skeleton_instance_identifier", + ":skeleton_service_data_control_local_view", ":transaction_log_registration_guard", ":type_erased_sample_ptrs_guard", "//score/mw/com/impl:error", @@ -350,7 +378,9 @@ cc_library( ":event", ":event_control", ":event_subscription_control", + ":proxy_event_control_local_view", ":proxy_instance_identifier", + ":proxy_service_data_control_local_view", ":service_data_control", ":service_data_storage", ":shm_path_builder", @@ -420,7 +450,7 @@ cc_library( "//score/mw/com/impl:__subpackages__", ], deps = [ - ":event_data_control", + ":proxy_event_data_control_local_view", ":slot_decrementer", ], ) @@ -435,7 +465,7 @@ cc_library( "//score/mw/com/impl:__subpackages__", ], deps = [ - ":event_data_control", + ":proxy_event_data_control_local_view", ":transaction_log_set", ], ) @@ -463,9 +493,9 @@ cc_library( features = COMPILER_WARNING_FEATURES, tags = ["FFI"], deps = [ - ":event_control", - ":event_data_control", ":i_runtime", + ":proxy_event_control_local_view", + ":proxy_event_data_control_local_view", ":slot_collector", ":transaction_log_id", ":transaction_log_registration_guard", @@ -482,8 +512,8 @@ cc_library( features = COMPILER_WARNING_FEATURES, tags = ["FFI"], deps = [ - ":event_data_control", ":event_slot_status", + ":proxy_event_data_control_local_view", ":transaction_log_set", ], ) @@ -569,6 +599,40 @@ cc_library( ], ) +cc_library( + name = "skeleton_event_data_control_local_view", + srcs = ["skeleton_event_data_control_local_view.cpp"], + hdrs = ["skeleton_event_data_control_local_view.h"], + features = COMPILER_WARNING_FEATURES, + tags = ["FFI"], + visibility = ["//score/mw/com/impl/bindings/lola:__subpackages__"], + deps = [ + ":control_slot_indicator", + ":control_slot_types", + ":event_data_control", + ":event_slot_status", + ":transaction_log_set", + "@score_baselibs//score/memory/shared:atomic_indirector", + ], +) + +cc_library( + name = "proxy_event_data_control_local_view", + srcs = ["proxy_event_data_control_local_view.cpp"], + hdrs = ["proxy_event_data_control_local_view.h"], + features = COMPILER_WARNING_FEATURES, + tags = ["FFI"], + visibility = ["//score/mw/com/impl/bindings/lola:__subpackages__"], + deps = [ + ":control_slot_indicator", + ":control_slot_types", + ":event_data_control", + ":event_slot_status", + ":transaction_log_set", + "@score_baselibs//score/memory/shared:atomic_indirector", + ], +) + cc_library( name = "control_slot_types", srcs = ["control_slot_types.cpp"], @@ -597,6 +661,33 @@ cc_library( ], ) +cc_library( + name = "skeleton_event_control_local_view", + srcs = ["skeleton_event_control_local_view.cpp"], + hdrs = ["skeleton_event_control_local_view.h"], + features = COMPILER_WARNING_FEATURES, + tags = ["FFI"], + visibility = ["//score/mw/com/impl/bindings/lola:__subpackages__"], + deps = [ + ":event_control", + ":skeleton_event_data_control_local_view", + ], +) + +cc_library( + name = "proxy_event_control_local_view", + srcs = ["proxy_event_control_local_view.cpp"], + hdrs = ["proxy_event_control_local_view.h"], + features = COMPILER_WARNING_FEATURES, + tags = ["FFI"], + visibility = ["//score/mw/com/impl/bindings/lola:__subpackages__"], + deps = [ + ":event_control", + ":event_data_control", + ":proxy_event_data_control_local_view", + ], +) + cc_library( name = "event_subscription_control", srcs = ["event_subscription_control.cpp"], @@ -638,6 +729,8 @@ cc_library( ":control_slot_types", ":event_data_control", ":event_slot_status", + ":proxy_event_data_control_local_view", + ":skeleton_event_data_control_local_view", "@score_baselibs//score/memory/shared:atomic_indirector", ], ) @@ -751,7 +844,7 @@ cc_library( tags = ["FFI"], visibility = ["//score/mw/com/impl/bindings/lola:__subpackages__"], deps = [ - ":service_data_control", + ":proxy_service_data_control_local_view", ":transaction_log_id", ":transaction_log_set", "//score/mw/com/impl:runtime", @@ -773,8 +866,10 @@ cc_library( tags = ["FFI"], visibility = ["//score/mw/com/impl/bindings/lola:__subpackages__"], deps = [ - ":event_data_control", + ":proxy_event_data_control_local_view", + ":skeleton_event_data_control_local_view", ":transaction_log_id", + ":transaction_log_set", "@score_baselibs//score/result", ], ) @@ -943,28 +1038,58 @@ cc_unit_test( ], ) -cc_test( +cc_gtest_unit_test( name = "event_data_control_test", + srcs = ["event_data_control_test.cpp"], + features = COMPILER_WARNING_FEATURES, + deps = [ + ":event_data_control", + ":event_slot_status", + "@score_baselibs//score/containers:dynamic_array", + ], +) + +cc_test( + name = "skeleton_event_data_control_local_view_test", size = "small", timeout = "long", srcs = [ - "event_data_control_test.cpp", + "skeleton_event_data_control_local_view_test.cpp", ], features = COMPILER_WARNING_FEATURES + [ "aborts_upon_exception", ], tags = ["unit"], deps = [ - "//score/mw/com/impl:instance_specifier", + ":skeleton_event_data_control_local_view", + "//score/mw/com/impl/bindings/lola:event_data_control", + "//score/mw/com/impl/bindings/lola:event_slot_status", + "//score/mw/com/impl/bindings/lola/test_doubles:fake_memory_resource", + "@googletest//:gtest_main", + "@score_baselibs//score/language/safecpp/coverage_termination_handler", + "@score_baselibs//score/memory/shared:atomic_indirector_mock_binding", + ], +) + +cc_test( + name = "proxy_event_data_control_local_view_test", + size = "small", + timeout = "long", + srcs = [ + "proxy_event_data_control_local_view_test.cpp", + ], + features = COMPILER_WARNING_FEATURES + [ + "aborts_upon_exception", + ], + tags = ["unit"], + deps = [ + ":proxy_event_data_control_local_view", + ":skeleton_event_data_control_local_view", "//score/mw/com/impl/bindings/lola:event_data_control", - "//score/mw/com/impl/bindings/lola:event_data_control_composite", "//score/mw/com/impl/bindings/lola/test_doubles:fake_memory_resource", "@googletest//:gtest_main", - "@score_baselibs//score/containers:dynamic_array", - "@score_baselibs//score/language/futurecpp", "@score_baselibs//score/language/safecpp/coverage_termination_handler", "@score_baselibs//score/memory/shared:atomic_indirector_mock_binding", - "@score_baselibs//score/memory/shared:new_delete_delegate_resource", ], ) @@ -973,6 +1098,8 @@ cc_gtest_unit_test( srcs = ["event_data_control_composite_test.cpp"], features = COMPILER_WARNING_FEATURES, deps = [ + ":proxy_event_data_control_local_view", + ":skeleton_event_data_control_local_view", "//score/mw/com/impl:instance_specifier", "//score/mw/com/impl/bindings/lola:event_data_control", "//score/mw/com/impl/bindings/lola:event_data_control_composite", @@ -1082,6 +1209,8 @@ cc_gtest_unit_test( features = COMPILER_WARNING_FEATURES, deps = [ ":event_data_control", + ":proxy_event_data_control_local_view", + ":skeleton_event_data_control_local_view", ":slot_decrementer", "//score/mw/com/impl/bindings/lola/test_doubles:fake_memory_resource", ], @@ -1275,6 +1404,8 @@ cc_gtest_unit_test( ], features = COMPILER_WARNING_FEATURES, deps = [ + ":proxy_event_data_control_local_view", + ":skeleton_event_data_control_local_view", ":slot_collector", "//score/mw/com/impl/bindings/lola/test_doubles", ], @@ -1447,6 +1578,8 @@ cc_unit_test_suites_for_host_and_qnx( ":dynamic_array_bounds_checking_test", ":event_data_control_test", ":event_data_control_composite_test", + ":proxy_event_data_control_local_view_test", + ":skeleton_event_data_control_local_view_test", ":generic_proxy_event_test", ":partial_restart_path_builder_test", ":proxy_instance_identifier_test", diff --git a/score/mw/com/impl/bindings/lola/event_data_control.cpp b/score/mw/com/impl/bindings/lola/event_data_control.cpp index adeb4bfce..680471c60 100644 --- a/score/mw/com/impl/bindings/lola/event_data_control.cpp +++ b/score/mw/com/impl/bindings/lola/event_data_control.cpp @@ -11,445 +11,3 @@ * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ #include "score/mw/com/impl/bindings/lola/event_data_control.h" - -#include "score/mw/com/impl/bindings/lola/event_slot_status.h" - -#include - -#include -#include -#include - -namespace score::mw::com::impl::lola::detail_event_data_control -{ - -namespace -{ - -constexpr auto MAX_ALLOCATE_RETRIES = 100U; -constexpr auto MAX_REFERENCE_RETRIES = 100U; - -} // namespace - -template