diff options
author | Michael Butler <butlermichael@google.com> | 2021-11-01 17:39:44 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2021-11-01 17:39:44 +0000 |
commit | be7f81f58db3770a3ad416a7d2455e6764ac59d2 (patch) | |
tree | 25ff79362699495ba9a0af5adda0c972959238e2 /neuralnetworks/aidl/utils/src/Service.cpp | |
parent | 9b965ac6a58bffd3aab9d423bb18596d2508b00c (diff) | |
parent | abc86918aece7623019da6964350bb7f349d8f70 (diff) |
Merge "Revert^2 "Provide explicitly versioned NNAPI AIDL utils libs -- HAL.""
Diffstat (limited to 'neuralnetworks/aidl/utils/src/Service.cpp')
-rw-r--r-- | neuralnetworks/aidl/utils/src/Service.cpp | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/neuralnetworks/aidl/utils/src/Service.cpp b/neuralnetworks/aidl/utils/src/Service.cpp index ac182a205e..01772eed53 100644 --- a/neuralnetworks/aidl/utils/src/Service.cpp +++ b/neuralnetworks/aidl/utils/src/Service.cpp @@ -17,6 +17,7 @@ #include "Service.h" #include <AndroidVersionUtil.h> +#include <aidl/android/hardware/neuralnetworks/IDevice.h> #include <android/binder_auto_utils.h> #include <android/binder_manager.h> #include <android/binder_process.h> @@ -28,8 +29,33 @@ #include <string> #include "Device.h" +#include "Utils.h" namespace aidl::android::hardware::neuralnetworks::utils { +namespace { + +// Map the AIDL version of an IDevice to NNAPI canonical feature level. +nn::GeneralResult<nn::Version> getAidlServiceFeatureLevel(IDevice* service) { + CHECK(service != nullptr); + int aidlVersion; + const auto ret = service->getInterfaceVersion(&aidlVersion); + HANDLE_ASTATUS(ret) << "getInterfaceVersion failed"; + + // For service AIDL versions greater than or equal to the AIDL library version that the runtime + // was built against, clamp it to the runtime AIDL library version. + aidlVersion = std::min(aidlVersion, IDevice::version); + + // Map stable AIDL versions to canonical versions. + switch (aidlVersion) { + case 1: + return nn::Version::ANDROID_S; + case 2: + return nn::Version::FEATURE_LEVEL_6; + } + return NN_ERROR() << "Unknown AIDL service version: " << aidlVersion; +} + +} // namespace nn::GeneralResult<nn::SharedDevice> getDevice(const std::string& instanceName) { auto fullName = std::string(IDevice::descriptor) + "/" + instanceName; @@ -55,7 +81,8 @@ nn::GeneralResult<nn::SharedDevice> getDevice(const std::string& instanceName) { << " returned nullptr"; } ABinderProcess_startThreadPool(); - return Device::create(instanceName, std::move(service)); + const auto featureLevel = NN_TRY(getAidlServiceFeatureLevel(service.get())); + return Device::create(instanceName, std::move(service), featureLevel); }; return hal::utils::ResilientDevice::create(std::move(makeDevice)); |