diff --git a/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Utils.h b/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Utils.h index 5c1480e83b..ed7c3e7c29 100644 --- a/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Utils.h +++ b/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Utils.h @@ -28,7 +28,7 @@ namespace android::hardware::neuralnetworks::V1_0::utils { -constexpr auto kVersion = nn::Version::ANDROID_OC_MR1; +const auto kVersion = nn::Version::ANDROID_OC_MR1; template nn::Result validate(const Type& halObject) { @@ -51,7 +51,7 @@ bool valid(const Type& halObject) { template nn::Result compliantVersion(const Type& canonical) { const auto version = NN_TRY(nn::validate(canonical)); - if (version > kVersion) { + if (!nn::isCompliantVersion(version, kVersion)) { return NN_ERROR() << "Insufficient version: " << version << " vs required " << kVersion; } return {}; diff --git a/neuralnetworks/1.1/utils/include/nnapi/hal/1.1/Utils.h b/neuralnetworks/1.1/utils/include/nnapi/hal/1.1/Utils.h index 4660ff732f..3aebb9367d 100644 --- a/neuralnetworks/1.1/utils/include/nnapi/hal/1.1/Utils.h +++ b/neuralnetworks/1.1/utils/include/nnapi/hal/1.1/Utils.h @@ -30,7 +30,7 @@ namespace android::hardware::neuralnetworks::V1_1::utils { constexpr auto kDefaultExecutionPreference = ExecutionPreference::FAST_SINGLE_ANSWER; -constexpr auto kVersion = nn::Version::ANDROID_P; +const auto kVersion = nn::Version::ANDROID_P; template nn::Result validate(const Type& halObject) { @@ -53,7 +53,7 @@ bool valid(const Type& halObject) { template nn::Result compliantVersion(const Type& canonical) { const auto version = NN_TRY(nn::validate(canonical)); - if (version > kVersion) { + if (!nn::isCompliantVersion(version, kVersion)) { return NN_ERROR() << "Insufficient version: " << version << " vs required " << kVersion; } return {}; diff --git a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Utils.h b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Utils.h index 23e336a69a..7ec32e85c3 100644 --- a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Utils.h +++ b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Utils.h @@ -39,7 +39,7 @@ using V1_1::utils::kDefaultExecutionPreference; constexpr auto kDefaultMesaureTiming = MeasureTiming::NO; constexpr auto kNoTiming = Timing{.timeOnDevice = std::numeric_limits::max(), .timeInDriver = std::numeric_limits::max()}; -constexpr auto kVersion = nn::Version::ANDROID_Q; +const auto kVersion = nn::Version::ANDROID_Q; template nn::Result validate(const Type& halObject) { @@ -62,7 +62,7 @@ bool valid(const Type& halObject) { template nn::Result compliantVersion(const Type& canonical) { const auto version = NN_TRY(nn::validate(canonical)); - if (version > kVersion) { + if (!nn::isCompliantVersion(version, kVersion)) { return NN_ERROR() << "Insufficient version: " << version << " vs required " << kVersion; } return {}; diff --git a/neuralnetworks/1.2/utils/src/Burst.cpp b/neuralnetworks/1.2/utils/src/Burst.cpp index e0a23f1635..911fbfa981 100644 --- a/neuralnetworks/1.2/utils/src/Burst.cpp +++ b/neuralnetworks/1.2/utils/src/Burst.cpp @@ -315,7 +315,7 @@ nn::ExecutionResult, nn::Timing>> Burst:: // if the request is valid but of a higher version than what's supported in burst execution, // fall back to another execution path - if (const auto version = NN_TRY(nn::validate(request)); version > nn::Version::ANDROID_Q) { + if (!compliantVersion(request).ok()) { // fallback to another execution path if the packet could not be sent return kPreparedModel->execute(request, measure, deadline, loopTimeoutDuration); } @@ -359,7 +359,7 @@ nn::GeneralResult Burst::createReusableExecution( // if the request is valid but of a higher version than what's supported in burst execution, // fall back to another execution path - if (const auto version = NN_TRY(nn::validate(request)); version > nn::Version::ANDROID_Q) { + if (!compliantVersion(request).ok()) { // fallback to another execution path if the packet could not be sent return kPreparedModel->createReusableExecution(request, measure, loopTimeoutDuration); } diff --git a/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/Utils.h b/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/Utils.h index 2812db2546..0ea3f29694 100644 --- a/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/Utils.h +++ b/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/Utils.h @@ -39,7 +39,7 @@ using V1_2::utils::kDefaultMesaureTiming; using V1_2::utils::kNoTiming; constexpr auto kDefaultPriority = Priority::MEDIUM; -constexpr auto kVersion = nn::Version::ANDROID_R; +const auto kVersion = nn::Version::ANDROID_R; template nn::Result validate(const Type& halObject) { @@ -62,7 +62,7 @@ bool valid(const Type& halObject) { template nn::Result compliantVersion(const Type& canonical) { const auto version = NN_TRY(nn::validate(canonical)); - if (version > kVersion) { + if (!nn::isCompliantVersion(version, kVersion)) { return NN_ERROR() << "Insufficient version: " << version << " vs required " << kVersion; } return {}; diff --git a/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/Utils.h b/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/Utils.h index 1fb694b5ad..4262ef885f 100644 --- a/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/Utils.h +++ b/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/Utils.h @@ -30,7 +30,7 @@ namespace aidl::android::hardware::neuralnetworks::utils { constexpr auto kDefaultPriority = Priority::MEDIUM; -constexpr std::optional aidlVersionToCanonicalVersion(int aidlVersion) { +inline std::optional aidlVersionToCanonicalVersion(int aidlVersion) { switch (aidlVersion) { case 1: return nn::Version::ANDROID_S; @@ -41,7 +41,7 @@ constexpr std::optional aidlVersionToCanonicalVersion(int aidlVersi } } -constexpr auto kVersion = aidlVersionToCanonicalVersion(IDevice::version).value(); +const auto kVersion = aidlVersionToCanonicalVersion(IDevice::version).value(); template nn::Result validate(const Type& halObject) { @@ -64,7 +64,7 @@ bool valid(const Type& halObject) { template nn::Result compliantVersion(const Type& canonical) { const auto version = NN_TRY(nn::validate(canonical)); - if (version > kVersion) { + if (!nn::isCompliantVersion(version, kVersion)) { return NN_ERROR() << "Insufficient version: " << version << " vs required " << kVersion; } return {}; diff --git a/neuralnetworks/aidl/utils/test/DeviceTest.cpp b/neuralnetworks/aidl/utils/test/DeviceTest.cpp index 79abe1b19b..19d2314994 100644 --- a/neuralnetworks/aidl/utils/test/DeviceTest.cpp +++ b/neuralnetworks/aidl/utils/test/DeviceTest.cpp @@ -152,13 +152,15 @@ class DeviceTest : public ::testing::TestWithParam { }; std::string printDeviceTest(const testing::TestParamInfo& info) { - switch (info.param) { - case nn::Version::ANDROID_S: + const nn::Version version = info.param; + CHECK(!version.runtimeOnlyFeatures); + switch (version.level) { + case nn::Version::Level::ANDROID_S: return "v1"; - case nn::Version::FEATURE_LEVEL_6: + case nn::Version::Level::FEATURE_LEVEL_6: return "v2"; default: - LOG(FATAL) << "Invalid AIDL version: " << info.param; + LOG(FATAL) << "Invalid AIDL version: " << version; return "invalid"; } } diff --git a/neuralnetworks/utils/common/test/ResilientDeviceTest.cpp b/neuralnetworks/utils/common/test/ResilientDeviceTest.cpp index 3abd724c8c..2e93a1155c 100644 --- a/neuralnetworks/utils/common/test/ResilientDeviceTest.cpp +++ b/neuralnetworks/utils/common/test/ResilientDeviceTest.cpp @@ -28,7 +28,6 @@ namespace android::hardware::neuralnetworks::utils { namespace { using ::testing::_; -using ::testing::InvokeWithoutArgs; using ::testing::Return; using SharedMockDevice = std::shared_ptr; @@ -54,7 +53,7 @@ SharedMockDevice createConfiguredMockDevice() { // Setup default actions for each relevant call. constexpr auto getName_ret = []() -> const std::string& { return kName; }; constexpr auto getVersionString_ret = []() -> const std::string& { return kVersionString; }; - constexpr auto kFeatureLevel = nn::Version::ANDROID_OC_MR1; + const auto kFeatureLevel = nn::Version::ANDROID_OC_MR1; constexpr auto kDeviceType = nn::DeviceType::ACCELERATOR; constexpr auto getSupportedExtensions_ret = []() -> const std::vector& { return kExtensions; @@ -142,7 +141,7 @@ TEST(ResilientDeviceTest, cachedData) { TEST(ResilientDeviceTest, getFeatureLevel) { // setup call const auto [mockDevice, mockDeviceFactory, device] = setup(); - constexpr auto kFeatureLevel = nn::Version::ANDROID_OC_MR1; + const auto kFeatureLevel = nn::Version::ANDROID_OC_MR1; EXPECT_CALL(*mockDevice, getFeatureLevel()).Times(1).WillOnce(Return(kFeatureLevel)); // run test