From 39bf2c314644db179773b1d03185eedc9617b5f5 Mon Sep 17 00:00:00 2001 From: Shunkai Yao Date: Tue, 6 Dec 2022 03:25:59 +0000 Subject: [PATCH] Audio AIDL HAL priority update Enable RT priority inheritance. Set minimum Audio AIDL HAL Binder access priority to ANDROID_PRIORITY_AUDIO. Bug: 261496726 Test: atest VtsHalAudioEffectTargetTest Test: atest VtsHalAudioCoreTargetTest Change-Id: I584d80f4fe344e4bfae5765cac2afb92313b6a39 --- audio/aidl/default/EffectFactory.cpp | 7 ++++++- audio/aidl/default/Module.cpp | 5 +++++ .../android.hardware.audio.effect.service-aidl.example.rc | 2 ++ .../default/android.hardware.audio.service-aidl.example.rc | 2 ++ audio/aidl/default/main.cpp | 3 +++ 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/audio/aidl/default/EffectFactory.cpp b/audio/aidl/default/EffectFactory.cpp index 820b447dd1..74ed7802ee 100644 --- a/audio/aidl/default/EffectFactory.cpp +++ b/audio/aidl/default/EffectFactory.cpp @@ -15,10 +15,13 @@ */ #define LOG_TAG "AHAL_EffectFactory" -#include #include #include +#include +#include +#include + #include "effect-impl/EffectTypes.h" #include "effect-impl/EffectUUID.h" #include "effectFactory-impl/EffectFactory.h" @@ -109,6 +112,8 @@ ndk::ScopedAStatus Factory::createEffect(const AudioUuid& in_impl_uuid, return ndk::ScopedAStatus::fromExceptionCode(EX_TRANSACTION_FAILED); } *_aidl_return = effectSp; + AIBinder_setMinSchedulerPolicy(effectSp->asBinder().get(), SCHED_NORMAL, + ANDROID_PRIORITY_AUDIO); mEffectUuidMap[std::weak_ptr(effectSp)] = in_impl_uuid; LOG(DEBUG) << __func__ << ": instance " << effectSp.get() << " created successfully"; return ndk::ScopedAStatus::ok(); diff --git a/audio/aidl/default/Module.cpp b/audio/aidl/default/Module.cpp index 1e561d4ec7..971d94612a 100644 --- a/audio/aidl/default/Module.cpp +++ b/audio/aidl/default/Module.cpp @@ -19,6 +19,7 @@ #define LOG_TAG "AHAL_Module" #include +#include #include #include @@ -307,6 +308,8 @@ ndk::ScopedAStatus Module::setModuleDebug( ndk::ScopedAStatus Module::getTelephony(std::shared_ptr* _aidl_return) { if (mTelephony == nullptr) { mTelephony = ndk::SharedRefBase::make(); + AIBinder_setMinSchedulerPolicy(mTelephony->asBinder().get(), SCHED_NORMAL, + ANDROID_PRIORITY_AUDIO); } *_aidl_return = mTelephony; LOG(DEBUG) << __func__ << ": returning instance of ITelephony: " << _aidl_return->get(); @@ -525,6 +528,7 @@ ndk::ScopedAStatus Module::openInputStream(const OpenInputStreamArguments& in_ar if (auto status = stream->init(); !status.isOk()) { return status; } + AIBinder_setMinSchedulerPolicy(stream->asBinder().get(), SCHED_NORMAL, ANDROID_PRIORITY_AUDIO); StreamWrapper streamWrapper(stream); auto patchIt = mPatches.find(in_args.portConfigId); if (patchIt != mPatches.end()) { @@ -575,6 +579,7 @@ ndk::ScopedAStatus Module::openOutputStream(const OpenOutputStreamArguments& in_ if (auto status = stream->init(); !status.isOk()) { return status; } + AIBinder_setMinSchedulerPolicy(stream->asBinder().get(), SCHED_NORMAL, ANDROID_PRIORITY_AUDIO); StreamWrapper streamWrapper(stream); auto patchIt = mPatches.find(in_args.portConfigId); if (patchIt != mPatches.end()) { diff --git a/audio/aidl/default/android.hardware.audio.effect.service-aidl.example.rc b/audio/aidl/default/android.hardware.audio.effect.service-aidl.example.rc index 68bbf5b076..5f859a1994 100644 --- a/audio/aidl/default/android.hardware.audio.effect.service-aidl.example.rc +++ b/audio/aidl/default/android.hardware.audio.effect.service-aidl.example.rc @@ -4,6 +4,8 @@ service vendor.audio-effect-hal-aidl /vendor/bin/hw/android.hardware.audio.effec # media gid needed for /dev/fm (radio) and for /data/misc/media (tee) group audio media capabilities BLOCK_SUSPEND + # setting RLIMIT_RTPRIO allows binder RT priority inheritance + rlimit rtprio 10 10 ioprio rt 4 task_profiles ProcessCapacityHigh HighPerformance onrestart restart audioserver diff --git a/audio/aidl/default/android.hardware.audio.service-aidl.example.rc b/audio/aidl/default/android.hardware.audio.service-aidl.example.rc index 02a9c37d42..2068735794 100644 --- a/audio/aidl/default/android.hardware.audio.service-aidl.example.rc +++ b/audio/aidl/default/android.hardware.audio.service-aidl.example.rc @@ -4,6 +4,8 @@ service vendor.audio-hal-aidl /vendor/bin/hw/android.hardware.audio.service-aidl # media gid needed for /dev/fm (radio) and for /data/misc/media (tee) group audio camera drmrpc inet media mediadrm net_bt net_bt_admin net_bw_acct wakelock context_hub capabilities BLOCK_SUSPEND + # setting RLIMIT_RTPRIO allows binder RT priority inheritance + rlimit rtprio 10 10 ioprio rt 4 task_profiles ProcessCapacityHigh HighPerformance onrestart restart audioserver diff --git a/audio/aidl/default/main.cpp b/audio/aidl/default/main.cpp index 15874a0489..7786cc63f2 100644 --- a/audio/aidl/default/main.cpp +++ b/audio/aidl/default/main.cpp @@ -21,6 +21,7 @@ #include "core-impl/Module.h" #include +#include #include #include @@ -44,6 +45,8 @@ int main() { // Make the default module auto moduleDefault = ndk::SharedRefBase::make(); + AIBinder_setMinSchedulerPolicy(moduleDefault->asBinder().get(), SCHED_NORMAL, + ANDROID_PRIORITY_AUDIO); const std::string moduleDefaultName = std::string() + Module::descriptor + "/default"; status = AServiceManager_addService(moduleDefault->asBinder().get(), moduleDefaultName.c_str()); CHECK_EQ(STATUS_OK, status);