From efb45bc7925d6eefa2a376c75dbcefe96d395f94 Mon Sep 17 00:00:00 2001 From: Mikhail Naganov Date: Wed, 27 Mar 2024 16:20:33 +0000 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 (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:d975a9e6ec0b6f0eeac99673b9b06e11146874ba) Merged-In: I971185a46da4222160fb04b8b77f805ef0396562 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 d48729fd5f..0d6151e65b 100644 --- a/audio/aidl/default/Module.cpp +++ b/audio/aidl/default/Module.cpp @@ -874,8 +874,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(); @@ -920,8 +921,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(); }