From 85da71a9b59c0fe12078df88769f0fe5c044f9b3 Mon Sep 17 00:00:00 2001 From: Mikhail Naganov Date: Fri, 28 Apr 2023 17:24:36 -0700 Subject: [PATCH] audio VTS: Update PolicyConfig after AudioPolicyConfig Make necessary changes to use updated AudioPolicyConfig class. Bug: 205884982 Test: m VtsHalAudioV6_0TargetTest Test: atest HalAudioV6_0GeneratorTest (cherry picked from https://android-review.googlesource.com/q/commit:33a35b5ffbbcbcf8a41d70a8af807d6c16f332c9) Merged-In: Iced9d665d018853c4b2a50f4471a545af7bf60bb Change-Id: Iced9d665d018853c4b2a50f4471a545af7bf60bb --- .../vts/functional/6.0/Generators.cpp | 2 + .../vts/functional/AudioPrimaryHidlHalTest.h | 2 +- .../vts/functional/PolicyConfig.h | 97 ++++++++----------- 3 files changed, 44 insertions(+), 57 deletions(-) diff --git a/audio/core/all-versions/vts/functional/6.0/Generators.cpp b/audio/core/all-versions/vts/functional/6.0/Generators.cpp index dafd32697b..705932d4c9 100644 --- a/audio/core/all-versions/vts/functional/6.0/Generators.cpp +++ b/audio/core/all-versions/vts/functional/6.0/Generators.cpp @@ -16,6 +16,8 @@ #include +#include + #include "6.0/Generators.h" #include "ConfigHelper.h" #include "PolicyConfig.h" diff --git a/audio/core/all-versions/vts/functional/AudioPrimaryHidlHalTest.h b/audio/core/all-versions/vts/functional/AudioPrimaryHidlHalTest.h index 478482d412..fabe2d29a2 100644 --- a/audio/core/all-versions/vts/functional/AudioPrimaryHidlHalTest.h +++ b/audio/core/all-versions/vts/functional/AudioPrimaryHidlHalTest.h @@ -195,7 +195,7 @@ static constexpr char kConfigFileName[] = "audio_policy_configuration.xml"; // Cached policy config after parsing for faster test startup const PolicyConfig& getCachedPolicyConfig() { static std::unique_ptr policyConfig = [] { - auto config = std::make_unique(kConfigFileName); + auto config = std::make_unique("", kConfigFileName); return config; }(); return *policyConfig; diff --git a/audio/core/all-versions/vts/functional/PolicyConfig.h b/audio/core/all-versions/vts/functional/PolicyConfig.h index 171d03f42a..b08e8084a0 100644 --- a/audio/core/all-versions/vts/functional/PolicyConfig.h +++ b/audio/core/all-versions/vts/functional/PolicyConfig.h @@ -19,9 +19,9 @@ #include #include +#include #include #include -#include #include #include @@ -30,47 +30,35 @@ using ::android::sp; using ::android::status_t; -struct PolicyConfigData { - android::HwModuleCollection hwModules; - android::DeviceVector availableOutputDevices; - android::DeviceVector availableInputDevices; - sp defaultOutputDevice; -}; - -class PolicyConfig : private PolicyConfigData, public android::AudioPolicyConfig { +class PolicyConfig { public: - explicit PolicyConfig(const std::string& configFileName) - : android::AudioPolicyConfig(hwModules, availableOutputDevices, availableInputDevices, - defaultOutputDevice), - mConfigFileName{configFileName} { - for (const auto& location : android::audio_get_configuration_paths()) { - std::string path = location + '/' + mConfigFileName; - if (access(path.c_str(), F_OK) == 0) { - mFilePath = path; - break; - } - } - init(); - } PolicyConfig(const std::string& configPath, const std::string& configFileName) - : android::AudioPolicyConfig(hwModules, availableOutputDevices, availableInputDevices, - defaultOutputDevice), - mConfigFileName{configFileName}, - mFilePath{configPath + "/" + mConfigFileName} { - init(); + : mInitialFilePath(configPath.empty() ? configFileName + : configPath + "/" + configFileName) { + auto result = android::AudioPolicyConfig::loadFromCustomXmlConfigForVtsTests( + configPath, configFileName); + if (result.ok()) { + mStatus = ::android::OK; + mConfig = result.value(); + init(); + } else { + mStatus = result.error(); + } } status_t getStatus() const { return mStatus; } std::string getError() const { - if (mFilePath.empty()) { - return std::string{"Could not find "} + mConfigFileName + + if (mConfig == nullptr) { + return std::string{"Could not find "} + mInitialFilePath + " file in: " + testing::PrintToString(android::audio_get_configuration_paths()); } else { - return "Invalid config file: " + mFilePath; + return "Invalid config file: " + mConfig->getSource(); } } - const std::string& getFilePath() const { return mFilePath; } + const std::string& getFilePath() const { + return mConfig != nullptr ? mConfig->getSource() : mInitialFilePath; + } sp getModuleFromName(const std::string& name) const { - return getHwModules().getModuleFromName(name.c_str()); + return mConfig->getHwModules().getModuleFromName(name.c_str()); } sp getPrimaryModule() const { return mPrimaryModule; } const std::set& getModulesWithDevicesNames() const { @@ -86,6 +74,8 @@ class PolicyConfig : private PolicyConfigData, public android::AudioPolicyConfig return findAttachedDevice(getAttachedDevices(moduleName), getSourceDevicesForMixPort(moduleName, mixPortName)); } + const android::DeviceVector& getInputDevices() const { return mConfig->getInputDevices(); } + const android::DeviceVector& getOutputDevices() const { return mConfig->getOutputDevices(); } bool haveInputProfilesInModule(const std::string& name) const { auto module = getModuleFromName(name); return module && !module->getInputProfiles().empty(); @@ -93,29 +83,24 @@ class PolicyConfig : private PolicyConfigData, public android::AudioPolicyConfig private: void init() { - mStatus = android::deserializeAudioPolicyFileForVts(mFilePath.c_str(), this); - if (mStatus == android::OK) { - mPrimaryModule = getModuleFromName(DeviceManager::kPrimaryDevice); - // Available devices are not 'attached' to modules at this moment. - // Need to go over available devices and find their module. - for (const auto& device : availableOutputDevices) { - for (const auto& module : hwModules) { - if (module->getDeclaredDevices().indexOf(device) >= 0) { - mModulesWithDevicesNames.insert(module->getName()); - mAttachedDevicesPerModule[module->getName()].push_back( - device->getTagName()); - break; - } + mPrimaryModule = getModuleFromName(DeviceManager::kPrimaryDevice); + // Available devices are not 'attached' to modules at this moment. + // Need to go over available devices and find their module. + for (const auto& device : mConfig->getOutputDevices()) { + for (const auto& module : mConfig->getHwModules()) { + if (module->getDeclaredDevices().indexOf(device) >= 0) { + mModulesWithDevicesNames.insert(module->getName()); + mAttachedDevicesPerModule[module->getName()].push_back(device->getTagName()); + break; } } - for (const auto& device : availableInputDevices) { - for (const auto& module : hwModules) { - if (module->getDeclaredDevices().indexOf(device) >= 0) { - mModulesWithDevicesNames.insert(module->getName()); - mAttachedDevicesPerModule[module->getName()].push_back( - device->getTagName()); - break; - } + } + for (const auto& device : mConfig->getInputDevices()) { + for (const auto& module : mConfig->getHwModules()) { + if (module->getDeclaredDevices().indexOf(device) >= 0) { + mModulesWithDevicesNames.insert(module->getName()); + mAttachedDevicesPerModule[module->getName()].push_back(device->getTagName()); + break; } } } @@ -166,10 +151,10 @@ class PolicyConfig : private PolicyConfigData, public android::AudioPolicyConfig return result; } - const std::string mConfigFileName; + const std::string mInitialFilePath; status_t mStatus = android::NO_INIT; - std::string mFilePath; - sp mPrimaryModule = nullptr; + sp mConfig; + sp mPrimaryModule; std::set mModulesWithDevicesNames; std::map> mAttachedDevicesPerModule; };