From 850649147504d09a6b6a96d2421211ca1d934878 Mon Sep 17 00:00:00 2001 From: Mikhail Naganov Date: Tue, 26 Sep 2023 17:10:08 -0700 Subject: [PATCH] audio: Align Module::getMmapPolicyInfos behavior with legacy When there are no device ports supporting MMAP, Module::getMmapPolicyInfos have to return 'Policy::NEVER' so that the AAudio code does not attempt to use the AAudio service. This aligns with the use of sysprops by the HIDL implementation. Update AudioCoreModule#GetMmapPolicyInfos test to use the same logic for determining MMAP support as the framework uses. This makes CtsNativeMediaAAudioTest cases passing with the AIDL HAL on Cuttlefish. Bug: 302049825 Test: atest VtsHalAudioCoreTargetTest Test: atest CtsNativeMediaAAudioTest [w/AIDL enabled on CF] Change-Id: Ie58c408f6f648a8a03b6a5d92118b90061389c50 --- audio/aidl/default/Module.cpp | 6 ++++++ audio/aidl/vts/VtsHalAudioCoreModuleTargetTest.cpp | 9 ++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/audio/aidl/default/Module.cpp b/audio/aidl/default/Module.cpp index 3117134f4d..819b3c50d6 100644 --- a/audio/aidl/default/Module.cpp +++ b/audio/aidl/default/Module.cpp @@ -1277,6 +1277,12 @@ ndk::ScopedAStatus Module::getMmapPolicyInfos(AudioMMapPolicyType mmapPolicyType mmapSources.insert(port.id); } } + if (mmapSources.empty() && mmapSinks.empty()) { + AudioMMapPolicyInfo never; + never.mmapPolicy = AudioMMapPolicy::NEVER; + _aidl_return->push_back(never); + return ndk::ScopedAStatus::ok(); + } for (const auto& route : getConfig().routes) { if (mmapSinks.count(route.sinkPortId) != 0) { // The sink is a mix port, add the sources if they are device ports. diff --git a/audio/aidl/vts/VtsHalAudioCoreModuleTargetTest.cpp b/audio/aidl/vts/VtsHalAudioCoreModuleTargetTest.cpp index cd765d2225..c758b9e4ce 100644 --- a/audio/aidl/vts/VtsHalAudioCoreModuleTargetTest.cpp +++ b/audio/aidl/vts/VtsHalAudioCoreModuleTargetTest.cpp @@ -87,6 +87,7 @@ using aidl::android::media::audio::common::AudioDualMonoMode; using aidl::android::media::audio::common::AudioFormatType; using aidl::android::media::audio::common::AudioIoFlags; using aidl::android::media::audio::common::AudioLatencyMode; +using aidl::android::media::audio::common::AudioMMapPolicy; using aidl::android::media::audio::common::AudioMMapPolicyInfo; using aidl::android::media::audio::common::AudioMMapPolicyType; using aidl::android::media::audio::common::AudioMode; @@ -2133,7 +2134,13 @@ TEST_P(AudioCoreModule, GetMmapPolicyInfos) { std::vector policyInfos; EXPECT_IS_OK(module->getMmapPolicyInfos(mmapPolicyType, &policyInfos)) << toString(mmapPolicyType); - EXPECT_EQ(isMmapSupported, !policyInfos.empty()); + const bool isMMapSupportedByPolicyInfos = + std::find_if(policyInfos.begin(), policyInfos.end(), [](const auto& info) { + return info.mmapPolicy == AudioMMapPolicy::AUTO || + info.mmapPolicy == AudioMMapPolicy::ALWAYS; + }) != policyInfos.end(); + EXPECT_EQ(isMmapSupported, isMMapSupportedByPolicyInfos) + << ::android::internal::ToString(policyInfos); } }