diff options
author | Ian Hua <ianhua@google.com> | 2021-10-15 11:06:31 +0100 |
---|---|---|
committer | Ian Hua <ianhua@google.com> | 2021-10-27 11:55:25 +0100 |
commit | ca46f9768c056dc52aa4ef3988cfaea155ed0dc5 (patch) | |
tree | 4e29bf60e517ba6c58f17c342890c9dcaf4e3cbf | |
parent | 5f14bad22cb3393dfa0e6ca132eecd050d676b56 (diff) |
Add FL6 spec tests to AIDL VTS.
Also skip FL6 (AIDL_V2) tests for older AIDL drivers.
Bug: 203038813
Test: VtsHalNeuralnetworksTargetTest
Specifically, for old driver such as AIDL_V1 sample driver, it can pass
HIDL tests and skip AIDL_V2 tests. For new driver such as AIDL_V2
sample driver, it can pass all tests.
Change-Id: I689fef0945428f6548977628e3c43628dd1e5bf7
5 files changed, 25 insertions, 1 deletions
diff --git a/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/Utils.h b/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/Utils.h index 3a45f8d3ea..f2ab479e43 100644 --- a/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/Utils.h +++ b/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/Utils.h @@ -28,7 +28,7 @@ namespace aidl::android::hardware::neuralnetworks::utils { constexpr auto kDefaultPriority = Priority::MEDIUM; -constexpr auto kVersion = nn::Version::ANDROID_S; +constexpr auto kVersion = nn::Version::FEATURE_LEVEL_6; template <typename Type> nn::Result<void> validate(const Type& halObject) { diff --git a/neuralnetworks/aidl/vts/functional/Android.bp b/neuralnetworks/aidl/vts/functional/Android.bp index 4dc2ed0f8c..3558d12aa1 100644 --- a/neuralnetworks/aidl/vts/functional/Android.bp +++ b/neuralnetworks/aidl/vts/functional/Android.bp @@ -63,6 +63,7 @@ cc_test { "neuralnetworks_utils_hal_aidl", ], whole_static_libs: [ + "neuralnetworks_generated_AIDL_V2_example", "neuralnetworks_generated_V1_0_example", "neuralnetworks_generated_V1_1_example", "neuralnetworks_generated_V1_2_example", diff --git a/neuralnetworks/aidl/vts/functional/GeneratedTestHarness.cpp b/neuralnetworks/aidl/vts/functional/GeneratedTestHarness.cpp index ac5b96a8a4..f67fd34383 100644 --- a/neuralnetworks/aidl/vts/functional/GeneratedTestHarness.cpp +++ b/neuralnetworks/aidl/vts/functional/GeneratedTestHarness.cpp @@ -907,6 +907,20 @@ void GeneratedTestBase::SetUp() { const bool deviceIsResponsive = ndk::ScopedAStatus::fromStatus(AIBinder_ping(kDevice->asBinder().get())).isOk(); ASSERT_TRUE(deviceIsResponsive); + // TODO(b/201260787): We should require old drivers to report the model as + // unsupported instead of simply skipping the test. + SkipIfDriverOlderThanTestModel(); +} + +void GeneratedTestBase::SkipIfDriverOlderThanTestModel() { + int32_t deviceVersion; + ASSERT_TRUE(kDevice->getInterfaceVersion(&deviceVersion).isOk()); + const int32_t modelVersion = kTestModel.getAidlVersionInt(); + if (deviceVersion < modelVersion) { + GTEST_SKIP() << "Device interface version " << deviceVersion + << " is older than test model's minimum supported HAL version " << modelVersion + << ". Skipping test."; + } } std::vector<NamedModel> getNamedModels(const FilterFn& filter) { diff --git a/neuralnetworks/aidl/vts/functional/GeneratedTestHarness.h b/neuralnetworks/aidl/vts/functional/GeneratedTestHarness.h index ad40f06874..da74db962e 100644 --- a/neuralnetworks/aidl/vts/functional/GeneratedTestHarness.h +++ b/neuralnetworks/aidl/vts/functional/GeneratedTestHarness.h @@ -34,6 +34,9 @@ class GeneratedTestBase : public testing::TestWithParam<GeneratedTestParam> { void SetUp() override; const std::shared_ptr<IDevice> kDevice = getData(std::get<NamedDevice>(GetParam())); const test_helper::TestModel& kTestModel = *getData(std::get<NamedModel>(GetParam())); + + private: + void SkipIfDriverOlderThanTestModel(); }; using FilterFn = std::function<bool(const test_helper::TestModel&)>; diff --git a/neuralnetworks/aidl/vts/functional/ValidateModel.cpp b/neuralnetworks/aidl/vts/functional/ValidateModel.cpp index 3f3e2250c6..fdc7eff96f 100644 --- a/neuralnetworks/aidl/vts/functional/ValidateModel.cpp +++ b/neuralnetworks/aidl/vts/functional/ValidateModel.cpp @@ -1122,6 +1122,7 @@ static bool removeOperationInputSkip(const Operation& op, size_t input) { // align_corners and half_pixel_centers parameters. // - L2_NORMALIZATION, LOCAL_RESPONSE_NORMALIZATION, SOFTMAX can have an optional axis // parameter. + // - PACK has at least 2 inputs, with the first element being INT32. switch (op.type) { case OperationType::CONCATENATION: { if (op.inputs.size() > 2 && input != op.inputs.size() - 1) { @@ -1178,6 +1179,11 @@ static bool removeOperationInputSkip(const Operation& op, size_t input) { return true; } } break; + case OperationType::PACK: { + if (op.inputs.size() > 2 && input != 0) { + return true; + } + } break; default: break; } |