summaryrefslogtreecommitdiff
path: root/neuralnetworks/aidl/utils/src/Service.cpp
diff options
context:
space:
mode:
authorMichael Butler <butlermichael@google.com>2021-11-01 17:39:44 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2021-11-01 17:39:44 +0000
commitbe7f81f58db3770a3ad416a7d2455e6764ac59d2 (patch)
tree25ff79362699495ba9a0af5adda0c972959238e2 /neuralnetworks/aidl/utils/src/Service.cpp
parent9b965ac6a58bffd3aab9d423bb18596d2508b00c (diff)
parentabc86918aece7623019da6964350bb7f349d8f70 (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.cpp29
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));