From 7f9c8ae6d9012f3e8d36ffae3cf127139e7367c8 Mon Sep 17 00:00:00 2001 From: Jaideep Sharma Date: Fri, 23 Jun 2023 10:27:39 +0530 Subject: [PATCH] vts: Don't excercise data path for offloaded/bypass effects Incase of offload effects or effects running in bypass mode data is not handled by effect module, in those cases skip the testcases to excercise data path. Bug: 287590880 Test: run vts -m VtsHalAudioEffectTargetTest Change-Id: I76155f8997b415bc96242f995ccc2e33c8989dc5 Merged-In: I76155f8997b415bc96242f995ccc2e33c8989dc5 --- audio/aidl/vts/TestUtils.h | 7 +++ .../aidl/vts/VtsHalAudioEffectTargetTest.cpp | 44 ++++++++++++++++--- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/audio/aidl/vts/TestUtils.h b/audio/aidl/vts/TestUtils.h index 72ca56f228..10c2fc652d 100644 --- a/audio/aidl/vts/TestUtils.h +++ b/audio/aidl/vts/TestUtils.h @@ -77,3 +77,10 @@ inline ::testing::AssertionResult assertResult(const char* exp_expr, const char* #define EXPECT_STATUS(expected, ret) \ EXPECT_PRED_FORMAT2(::android::hardware::audio::common::testing::detail::assertResult, \ expected, ret) + +#define SKIP_TEST_IF_DATA_UNSUPPORTED(flags) \ + ({ \ + if ((flags).hwAcceleratorMode == Flags::HardwareAccelerator::TUNNEL || (flags).bypass) { \ + GTEST_SKIP() << "Skip data path for offload"; \ + } \ + }) \ No newline at end of file diff --git a/audio/aidl/vts/VtsHalAudioEffectTargetTest.cpp b/audio/aidl/vts/VtsHalAudioEffectTargetTest.cpp index 4ad9b2ddae..3011a5ed2c 100644 --- a/audio/aidl/vts/VtsHalAudioEffectTargetTest.cpp +++ b/audio/aidl/vts/VtsHalAudioEffectTargetTest.cpp @@ -46,6 +46,7 @@ using aidl::android::hardware::audio::effect::IEffect; using aidl::android::hardware::audio::effect::IFactory; using aidl::android::hardware::audio::effect::Parameter; using aidl::android::hardware::audio::effect::State; +using aidl::android::hardware::audio::effect::Flags; using aidl::android::media::audio::common::AudioDeviceDescription; using aidl::android::media::audio::common::AudioDeviceType; using aidl::android::media::audio::common::AudioMode; @@ -85,6 +86,14 @@ class AudioEffectTest : public testing::TestWithParam, public E } }; +class AudioEffectDataPathTest : public AudioEffectTest { + public: + void SetUp() override { + AudioEffectTest::SetUp(); + SKIP_TEST_IF_DATA_UNSUPPORTED(mDescriptor.common.flags); + } +}; + TEST_P(AudioEffectTest, SetupAndTearDown) { // Intentionally empty test body. } @@ -577,7 +586,8 @@ TEST_P(AudioEffectTest, SetAndGetParameterVolume) { /// Data processing test // Send data to effects and expect it to be consumed by checking statusMQ. -TEST_P(AudioEffectTest, ConsumeDataInProcessingState) { +// Effects exposing bypass flags or operating in offload mode will be skipped. +TEST_P(AudioEffectDataPathTest, ConsumeDataInProcessingState) { ASSERT_NO_FATAL_FAILURE(create(mFactory, mEffect, mDescriptor)); Parameter::Common common = EffectHelper::createParamCommon( @@ -610,7 +620,8 @@ TEST_P(AudioEffectTest, ConsumeDataInProcessingState) { } // Send data to effects and expect it to be consumed after effect restart. -TEST_P(AudioEffectTest, ConsumeDataAfterRestart) { +// Effects exposing bypass flags or operating in offload mode will be skipped. +TEST_P(AudioEffectDataPathTest, ConsumeDataAfterRestart) { ASSERT_NO_FATAL_FAILURE(create(mFactory, mEffect, mDescriptor)); Parameter::Common common = EffectHelper::createParamCommon( @@ -649,7 +660,8 @@ TEST_P(AudioEffectTest, ConsumeDataAfterRestart) { } // Send data to IDLE effects and expect it to be consumed after effect start. -TEST_P(AudioEffectTest, SendDataAtIdleAndConsumeDataInProcessing) { +// Effects exposing bypass flags or operating in offload mode will be skipped. +TEST_P(AudioEffectDataPathTest, SendDataAtIdleAndConsumeDataInProcessing) { ASSERT_NO_FATAL_FAILURE(create(mFactory, mEffect, mDescriptor)); Parameter::Common common = EffectHelper::createParamCommon( @@ -682,7 +694,8 @@ TEST_P(AudioEffectTest, SendDataAtIdleAndConsumeDataInProcessing) { } // Send data multiple times. -TEST_P(AudioEffectTest, ProcessDataMultipleTimes) { +// Effects exposing bypass flags or operating in offload mode will be skipped. +TEST_P(AudioEffectDataPathTest, ProcessDataMultipleTimes) { ASSERT_NO_FATAL_FAILURE(create(mFactory, mEffect, mDescriptor)); Parameter::Common common = EffectHelper::createParamCommon( @@ -721,7 +734,8 @@ TEST_P(AudioEffectTest, ProcessDataMultipleTimes) { } // Send data to processing state effects, stop, and restart. -TEST_P(AudioEffectTest, ConsumeDataAndRestart) { +// Effects exposing bypass flags or operating in offload mode will be skipped. +TEST_P(AudioEffectDataPathTest, ConsumeDataAndRestart) { ASSERT_NO_FATAL_FAILURE(create(mFactory, mEffect, mDescriptor)); Parameter::Common common = EffectHelper::createParamCommon( @@ -762,7 +776,8 @@ TEST_P(AudioEffectTest, ConsumeDataAndRestart) { } // Send data to closed effects and expect it not be consumed. -TEST_P(AudioEffectTest, NotConsumeDataByClosedEffect) { +// Effects exposing bypass flags or operating in offload mode will be skipped. +TEST_P(AudioEffectDataPathTest, NotConsumeDataByClosedEffect) { ASSERT_NO_FATAL_FAILURE(create(mFactory, mEffect, mDescriptor)); Parameter::Common common = EffectHelper::createParamCommon( @@ -788,7 +803,8 @@ TEST_P(AudioEffectTest, NotConsumeDataByClosedEffect) { } // Send data to multiple effects. -TEST_P(AudioEffectTest, ConsumeDataMultipleEffects) { +// Effects exposing bypass flags or operating in offload mode will be skipped. +TEST_P(AudioEffectDataPathTest, ConsumeDataMultipleEffects) { std::shared_ptr effect1, effect2; ASSERT_NO_FATAL_FAILURE(create(mFactory, effect1, mDescriptor)); ASSERT_NO_FATAL_FAILURE(create(mFactory, effect2, mDescriptor)); @@ -855,6 +871,20 @@ INSTANTIATE_TEST_SUITE_P( }); GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(AudioEffectTest); +INSTANTIATE_TEST_SUITE_P( + SingleEffectInstanceTest, AudioEffectDataPathTest, + ::testing::Combine(testing::ValuesIn( + EffectFactoryHelper::getAllEffectDescriptors(IFactory::descriptor))), + [](const testing::TestParamInfo& info) { + auto descriptor = std::get(info.param).second; + std::string name = getPrefix(descriptor); + std::replace_if( + name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_'); + return name; + }); + +GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(AudioEffectDataPathTest); + int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); ABinderProcess_setThreadPoolMaxThreadCount(1);