From d975a9e6ec0b6f0eeac99673b9b06e11146874ba Mon Sep 17 00:00:00 2001 From: Mikhail Naganov Date: Tue, 26 Mar 2024 17:19:48 -0700 Subject: [PATCH] audio: Allow to inherit Binder RT priority in AIDL This option is on by default for HIDL interfaces, however in AIDL it needs to be enabled explicitly. Bug: 331469541 Test: m Change-Id: I971185a46da4222160fb04b8b77f805ef0396562 --- audio/aidl/default/EffectFactory.cpp | 1 + audio/aidl/default/Module.cpp | 10 ++++++---- audio/aidl/default/include/core-impl/ChildInterface.h | 6 +++--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/audio/aidl/default/EffectFactory.cpp b/audio/aidl/default/EffectFactory.cpp index ba5b14163d..e3894f9517 100644 --- a/audio/aidl/default/EffectFactory.cpp +++ b/audio/aidl/default/EffectFactory.cpp @@ -145,6 +145,7 @@ ndk::ScopedAStatus Factory::createEffect(const AudioUuid& in_impl_uuid, *_aidl_return = effectSp; ndk::SpAIBinder effectBinder = effectSp->asBinder(); AIBinder_setMinSchedulerPolicy(effectBinder.get(), SCHED_NORMAL, ANDROID_PRIORITY_AUDIO); + AIBinder_setInheritRt(effectBinder.get(), true); mEffectMap[std::weak_ptr(effectSp)] = std::make_pair(in_impl_uuid, std::move(effectBinder)); return ndk::ScopedAStatus::ok(); diff --git a/audio/aidl/default/Module.cpp b/audio/aidl/default/Module.cpp index 94aa4dc657..3a36d43291 100644 --- a/audio/aidl/default/Module.cpp +++ b/audio/aidl/default/Module.cpp @@ -855,8 +855,9 @@ ndk::ScopedAStatus Module::openInputStream(const OpenInputStreamArguments& in_ar RETURN_STATUS_IF_ERROR( streamWrapper.setConnectedDevices(findConnectedDevices(in_args.portConfigId))); } - AIBinder_setMinSchedulerPolicy(streamWrapper.getBinder().get(), SCHED_NORMAL, - ANDROID_PRIORITY_AUDIO); + auto streamBinder = streamWrapper.getBinder(); + AIBinder_setMinSchedulerPolicy(streamBinder.get(), SCHED_NORMAL, ANDROID_PRIORITY_AUDIO); + AIBinder_setInheritRt(streamBinder.get(), true); mStreams.insert(port->id, in_args.portConfigId, std::move(streamWrapper)); _aidl_return->stream = std::move(stream); return ndk::ScopedAStatus::ok(); @@ -901,8 +902,9 @@ ndk::ScopedAStatus Module::openOutputStream(const OpenOutputStreamArguments& in_ RETURN_STATUS_IF_ERROR( streamWrapper.setConnectedDevices(findConnectedDevices(in_args.portConfigId))); } - AIBinder_setMinSchedulerPolicy(streamWrapper.getBinder().get(), SCHED_NORMAL, - ANDROID_PRIORITY_AUDIO); + auto streamBinder = streamWrapper.getBinder(); + AIBinder_setMinSchedulerPolicy(streamBinder.get(), SCHED_NORMAL, ANDROID_PRIORITY_AUDIO); + AIBinder_setInheritRt(streamBinder.get(), true); mStreams.insert(port->id, in_args.portConfigId, std::move(streamWrapper)); _aidl_return->stream = std::move(stream); return ndk::ScopedAStatus::ok(); diff --git a/audio/aidl/default/include/core-impl/ChildInterface.h b/audio/aidl/default/include/core-impl/ChildInterface.h index f5f1855aab..161f6db6c0 100644 --- a/audio/aidl/default/include/core-impl/ChildInterface.h +++ b/audio/aidl/default/include/core-impl/ChildInterface.h @@ -48,9 +48,9 @@ struct ChildInterface : private std::pair, ndk::SpAIBinder> { } AIBinder* getBinder() { if (this->second.get() == nullptr) { - this->second = this->first->asBinder(); - AIBinder_setMinSchedulerPolicy(this->second.get(), SCHED_NORMAL, - ANDROID_PRIORITY_AUDIO); + const auto binder = this->second = this->first->asBinder(); + AIBinder_setMinSchedulerPolicy(binder.get(), SCHED_NORMAL, ANDROID_PRIORITY_AUDIO); + AIBinder_setInheritRt(binder.get(), true); } return this->second.get(); }