Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions score/mw/com/impl/proxy_event_base.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -153,11 +153,19 @@ void ProxyEventBase::Unsubscribe() noexcept

Result<void> ProxyEventBase::SetSubscriptionStateChangeHandler(SubscriptionStateChangeHandler handler) noexcept
{
if (binding_base_ != nullptr)
{
tracing::TraceSetSubscriptionStateChangeHandler(tracing_data_, *binding_base_);
}
return binding_base_->SetSubscriptionStateChangeHandler(std::move(handler));
}

Result<void> ProxyEventBase::UnsetSubscriptionStateChangeHandler() noexcept
{
if (binding_base_ != nullptr)
{
tracing::TraceUnsetSubscriptionStateChangeHandler(tracing_data_, *binding_base_);
}
return binding_base_->UnsetSubscriptionStateChangeHandler();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,19 +85,15 @@
"$ref": "#/$defs/trace_unsubscribe_received"
},
"trace_subscription_state_changed": {
"_lola_support" : false,
"$ref": "#/$defs/trace_subscription_state_changed"
},
"trace_subscription_state_change_handler_registered": {
"_lola_support" : false,
"$ref": "#/$defs/trace_subscription_state_change_handler_registered"
},
"trace_subscription_state_change_handler_deregistered": {
"_lola_support" : false,
"$ref": "#/$defs/trace_subscription_state_change_handler_deregistered"
},
"trace_subscription_state_change_handler_callback": {
"_lola_support" : false,
"$ref": "#/$defs/trace_subscription_state_change_handler_callback"
},
"trace_send": {
Expand Down Expand Up @@ -179,19 +175,15 @@
"$ref": "#/$defs/trace_unsubscribe_received"
},
"trace_subscription_state_changed": {
"_lola_support" : false,
"$ref": "#/$defs/trace_subscription_state_changed"
},
"trace_subscription_state_change_handler_registered": {
"_lola_support" : false,
"$ref": "#/$defs/trace_subscription_state_change_handler_registered"
},
"trace_subscription_state_change_handler_deregistered": {
"_lola_support" : false,
"$ref": "#/$defs/trace_subscription_state_change_handler_deregistered"
},
"trace_subscription_state_change_handler_callback": {
"_lola_support" : false,
"$ref": "#/$defs/trace_subscription_state_change_handler_callback"
},
"trace_update": {
Expand Down
148 changes: 148 additions & 0 deletions score/mw/com/impl/tracing/proxy_event_tracing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,154 @@ void TraceCallReceiveHandler(ProxyEventTracingData& proxy_event_tracing_data,
}
}

void TraceSubscriptionStateChanged(ProxyEventTracingData& proxy_event_tracing_data,
const ProxyEventBindingBase& proxy_event_binding_base,
SubscriptionState new_state) noexcept
{
if (proxy_event_tracing_data.enable_subscription_state_changed)
{
const auto service_element_instance_identifier =
proxy_event_tracing_data.service_element_instance_identifier_view;
const auto service_element_type =
service_element_instance_identifier.service_element_identifier_view.service_element_type;

TracingRuntime::TracePointType trace_point{};
if (service_element_type == ServiceElementType::EVENT)
{
trace_point = ProxyEventTracePointType::SUBSCRIBE_STATE_CHANGE;
}
else if (service_element_type == ServiceElementType::FIELD)
{
trace_point = ProxyFieldTracePointType::SUBSCRIBE_STATE_CHANGE;
}
else
{
// Suppress "AUTOSAR C++14 M0-1-1", The rule states: "A project shall not contain unreachable code"
// This is false positive, the enum has more fields than EVENT and FIELD so we might reach this branch.
// coverity[autosar_cpp14_m0_1_1_violation : FALSE]
SCORE_LANGUAGE_FUTURECPP_ASSERT_PRD_MESSAGE(false, "Service element type must be EVENT or FIELD");
}

const auto binding_type = proxy_event_binding_base.GetBindingType();
const auto trace_result = TraceData(service_element_instance_identifier,
trace_point,
binding_type,
ConvertToFatPointer(new_state));
UpdateTracingDataFromTraceResult(
trace_result, proxy_event_tracing_data, proxy_event_tracing_data.enable_subscription_state_changed);
}
}

void TraceSetSubscriptionStateChangeHandler(ProxyEventTracingData& proxy_event_tracing_data,
const ProxyEventBindingBase& proxy_event_binding_base) noexcept
{
if (proxy_event_tracing_data.enable_set_subcription_state_change_handler)
{
const auto service_element_instance_identifier =
proxy_event_tracing_data.service_element_instance_identifier_view;
const auto service_element_type =
service_element_instance_identifier.service_element_identifier_view.service_element_type;

TracingRuntime::TracePointType trace_point{};
if (service_element_type == ServiceElementType::EVENT)
{
trace_point = ProxyEventTracePointType::SET_SUBSCRIPTION_STATE_CHANGE_HANDLER;
}
else if (service_element_type == ServiceElementType::FIELD)
{
trace_point = ProxyFieldTracePointType::SET_SUBSCRIPTION_STATE_CHANGE_HANDLER;
}
else
{
// Suppress "AUTOSAR C++14 M0-1-1", The rule states: "A project shall not contain unreachable code"
// This is false positive, the enum has more fields than EVENT and FIELD so we might reach this branch.
// coverity[autosar_cpp14_m0_1_1_violation : FALSE]
SCORE_LANGUAGE_FUTURECPP_ASSERT_PRD_MESSAGE(false, "Service element type must be EVENT or FIELD");
}

const auto binding_type = proxy_event_binding_base.GetBindingType();
const auto trace_result =
TraceData(proxy_event_tracing_data.service_element_instance_identifier_view, trace_point, binding_type);
UpdateTracingDataFromTraceResult(trace_result,
proxy_event_tracing_data,
proxy_event_tracing_data.enable_set_subcription_state_change_handler);
}
}

void TraceUnsetSubscriptionStateChangeHandler(ProxyEventTracingData& proxy_event_tracing_data,
const ProxyEventBindingBase& proxy_event_binding_base) noexcept
{
if (proxy_event_tracing_data.enable_unset_subscription_state_change_handler)
{
const auto service_element_instance_identifier =
proxy_event_tracing_data.service_element_instance_identifier_view;
const auto service_element_type =
service_element_instance_identifier.service_element_identifier_view.service_element_type;

TracingRuntime::TracePointType trace_point{};
if (service_element_type == ServiceElementType::EVENT)
{
trace_point = ProxyEventTracePointType::UNSET_SUBSCRIPTION_STATE_CHANGE_HANDLER;
}
else if (service_element_type == ServiceElementType::FIELD)
{
trace_point = ProxyFieldTracePointType::UNSET_SUBSCRIPTION_STATE_CHANGE_HANDLER;
}
else
{
// Suppress "AUTOSAR C++14 M0-1-1", The rule states: "A project shall not contain unreachable code"
// This is false positive, the enum has more fields than EVENT and FIELD so we might reach this branch.
// coverity[autosar_cpp14_m0_1_1_violation : FALSE]
SCORE_LANGUAGE_FUTURECPP_ASSERT_PRD_MESSAGE(false, "Service element type must be EVENT or FIELD");
}

const auto binding_type = proxy_event_binding_base.GetBindingType();
const auto trace_result =
TraceData(proxy_event_tracing_data.service_element_instance_identifier_view, trace_point, binding_type);
UpdateTracingDataFromTraceResult(
trace_result, proxy_event_tracing_data, proxy_event_tracing_data.enable_unset_subscription_state_change_handler);
}
}

void TraceCallSubscriptionStateChangeHandler(ProxyEventTracingData& proxy_event_tracing_data,
const ProxyEventBindingBase& proxy_event_binding_base,
SubscriptionState new_state) noexcept
{
if (proxy_event_tracing_data.enable_call_subscription_state_change_handler)
{
const auto service_element_instance_identifier =
proxy_event_tracing_data.service_element_instance_identifier_view;
const auto service_element_type =
service_element_instance_identifier.service_element_identifier_view.service_element_type;

TracingRuntime::TracePointType trace_point{};
if (service_element_type == ServiceElementType::EVENT)
{
trace_point = ProxyEventTracePointType::SUBSCRIPTION_STATE_CHANGE_HANDLER_CALLBACK;
}
else if (service_element_type == ServiceElementType::FIELD)
{
trace_point = ProxyFieldTracePointType::SUBSCRIPTION_STATE_CHANGE_HANDLER_CALLBACK;
}
else
{
// Suppress "AUTOSAR C++14 M0-1-1", The rule states: "A project shall not contain unreachable code"
// This is false positive, the enum has more fields than EVENT and FIELD so we might reach this branch.
// coverity[autosar_cpp14_m0_1_1_violation : FALSE]
SCORE_LANGUAGE_FUTURECPP_ASSERT_PRD_MESSAGE(false, "Service element type must be EVENT or FIELD");
}

const auto binding_type = proxy_event_binding_base.GetBindingType();
const auto trace_result = TraceData(service_element_instance_identifier,
trace_point,
binding_type,
ConvertToFatPointer(new_state));
UpdateTracingDataFromTraceResult(trace_result,
proxy_event_tracing_data,
proxy_event_tracing_data.enable_call_subscription_state_change_handler);
}
}

score::cpp::callback<void(void), 128U> CreateTracingReceiveHandler(
ProxyEventTracingData& proxy_event_tracing_data,
const ProxyEventBindingBase& proxy_event_binding_base,
Expand Down
10 changes: 10 additions & 0 deletions score/mw/com/impl/tracing/proxy_event_tracing.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,16 @@ void TraceCallGetNewSamplesCallback(ProxyEventTracingData& proxy_event_tracing_d
ITracingRuntime::TracePointDataId trace_point_data_id) noexcept;
void TraceCallReceiveHandler(ProxyEventTracingData& proxy_event_tracing_data,
const ProxyEventBindingBase& proxy_event_binding_base) noexcept;
void TraceSubscriptionStateChanged(ProxyEventTracingData& proxy_event_tracing_data,
const ProxyEventBindingBase& proxy_event_binding_base,
SubscriptionState new_state) noexcept;
void TraceSetSubscriptionStateChangeHandler(ProxyEventTracingData& proxy_event_tracing_data,
const ProxyEventBindingBase& proxy_event_binding_base) noexcept;
void TraceUnsetSubscriptionStateChangeHandler(ProxyEventTracingData& proxy_event_tracing_data,
const ProxyEventBindingBase& proxy_event_binding_base) noexcept;
void TraceCallSubscriptionStateChangeHandler(ProxyEventTracingData& proxy_event_tracing_data,
const ProxyEventBindingBase& proxy_event_binding_base,
SubscriptionState new_state) noexcept;

score::cpp::callback<void(void), 128U> CreateTracingReceiveHandler(
ProxyEventTracingData& proxy_event_tracing_data,
Expand Down