From 02025847dea97d50014d1fd23060c4d62472e020 Mon Sep 17 00:00:00 2001 From: Kevin Rocard Date: Fri, 1 Dec 2017 22:06:14 -0800 Subject: [PATCH 1/2] Audio VTS: HAL can support more than the native sampling rates getSupportedSampleRate should return the native sampling rates, (IE. the sampling rates that can be played without resampling) but other sampling rates can be supported by the HAL. The test was too strict as it was failing if HALs were supporting more sample rates than there native (optimized) ones. For example, a HAL might have its best performance (no resampling) on 48kHz but still support 16kHz through resampling. Note: getSupportedSampleRate might be renamed to getNativeSampleRate in the next major HAL revision to avoid ambiguity. Test: vts-tradefed run commandAndExit vts --module VtsHalAudioV2_0Target -t CheckConfig.audioPolicyConfigurationValidation Bug: 69811500 Change-Id: I1ec1ce422bc5039637463c6641060508f4ee892b Signed-off-by: Kevin Rocard --- .../functional/AudioPrimaryHidlHalTest.cpp | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp b/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp index 3ee44f33ca..ec9755d441 100644 --- a/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp +++ b/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp @@ -768,11 +768,12 @@ TEST_IO_STREAM(GetBufferSize, ASSERT_GE(extract(stream->getBufferSize()), extract(stream->getFrameSize()))); -template +template static void testCapabilityGetter(const string& name, IStream* stream, - Property currentValue, CapabilityGetter capablityGetter, - Getter getter, Setter setter) { + Return (IStream::*getter)(), + Return (IStream::*setter)(Property), + bool currentMustBeSupported = true) { hidl_vec capabilities; ASSERT_OK((stream->*capablityGetter)(returnIn(capabilities))); if (capabilities.size() == 0) { @@ -783,12 +784,14 @@ static void testCapabilityGetter(const string& name, IStream* stream, doc::partialTest(name + " is not supported"); return; }; - // TODO: This code has never been tested on a hal that supports - // getSupportedSampleRates - EXPECT_NE(std::find(capabilities.begin(), capabilities.end(), currentValue), - capabilities.end()) - << "current " << name << " is not in the list of the supported ones " - << toString(capabilities); + + if (currentMustBeSupported) { + Property currentValue = extract((stream->*getter)()); + EXPECT_NE(std::find(capabilities.begin(), capabilities.end(), currentValue), + capabilities.end()) + << "current " << name << " is not in the list of the supported ones " + << toString(capabilities); + } // Check that all declared supported values are indeed supported for (auto capability : capabilities) { @@ -800,15 +803,17 @@ static void testCapabilityGetter(const string& name, IStream* stream, TEST_IO_STREAM(SupportedSampleRate, "Check that the stream sample rate is declared as supported", testCapabilityGetter("getSupportedSampleRate", stream.get(), - extract(stream->getSampleRate()), &IStream::getSupportedSampleRates, &IStream::getSampleRate, - &IStream::setSampleRate)) + &IStream::setSampleRate, + // getSupportedSampleRate returns the native sampling rates, + // (the sampling rates that can be played without resampling) + // but other sampling rates can be supported by the HAL. + false)) TEST_IO_STREAM(SupportedChannelMask, "Check that the stream channel mask is declared as supported", testCapabilityGetter("getSupportedChannelMask", stream.get(), - extract(stream->getChannelMask()), &IStream::getSupportedChannelMasks, &IStream::getChannelMask, &IStream::setChannelMask)) @@ -816,7 +821,6 @@ TEST_IO_STREAM(SupportedChannelMask, TEST_IO_STREAM(SupportedFormat, "Check that the stream format is declared as supported", testCapabilityGetter("getSupportedFormat", stream.get(), - extract(stream->getFormat()), &IStream::getSupportedFormats, &IStream::getFormat, &IStream::setFormat)) From 3bcba14c36062583372e903385fc4447fbcee394 Mon Sep 17 00:00:00 2001 From: Kevin Rocard Date: Fri, 1 Dec 2017 22:15:39 -0800 Subject: [PATCH 2/2] Audio HAL: Allow setters to not be implemented setSampleRate, setChannelMask, setFormat may not be implemented by the HAL, although this is not documented in the HAL API. Currently the VTS test requires their implementation if the respective getSupported{SampleRate,ChannelMask,Format} are supported. Relax this requirement as the framework never calls those setters. Note that the optionality of those functions will be documented in the next HAL API version. Test: vts-tradefed run commandAndExit vts --module VtsHalAudioV2_0Target -t CheckConfig.audioPolicyConfigurationValidation Bug: 69811500 Change-Id: I3a390ae925cabd99e7f1ed4a627e71ad87b1b437 Signed-off-by: Kevin Rocard --- audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp b/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp index ec9755d441..a5b37af49a 100644 --- a/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp +++ b/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp @@ -795,7 +795,13 @@ static void testCapabilityGetter(const string& name, IStream* stream, // Check that all declared supported values are indeed supported for (auto capability : capabilities) { - ASSERT_OK((stream->*setter)(capability)); + auto ret = (stream->*setter)(capability); + ASSERT_TRUE(ret.isOk()); + if (ret == Result::NOT_SUPPORTED) { + doc::partialTest("Setter is not supported"); + return; + } + ASSERT_OK(ret); ASSERT_EQ(capability, extract((stream->*getter)())); } }