diff options
Diffstat (limited to 'neuralnetworks/aidl/utils/src/Service.cpp')
-rw-r--r-- | neuralnetworks/aidl/utils/src/Service.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/neuralnetworks/aidl/utils/src/Service.cpp b/neuralnetworks/aidl/utils/src/Service.cpp index 5ec6ded5e5..511de559a6 100644 --- a/neuralnetworks/aidl/utils/src/Service.cpp +++ b/neuralnetworks/aidl/utils/src/Service.cpp @@ -18,6 +18,7 @@ #include <android/binder_auto_utils.h> #include <android/binder_manager.h> +#include <android/binder_process.h> #include <nnapi/IDevice.h> #include <nnapi/Result.h> @@ -29,19 +30,21 @@ namespace aidl::android::hardware::neuralnetworks::utils { -nn::GeneralResult<nn::SharedDevice> getDevice(const std::string& name) { +nn::GeneralResult<nn::SharedDevice> getDevice(const std::string& instanceName) { + auto fullName = std::string(IDevice::descriptor) + "/" + instanceName; hal::utils::ResilientDevice::Factory makeDevice = - [name](bool blocking) -> nn::GeneralResult<nn::SharedDevice> { - auto service = blocking ? IDevice::fromBinder( - ndk::SpAIBinder(AServiceManager_getService(name.c_str()))) - : IDevice::fromBinder(ndk::SpAIBinder( - AServiceManager_checkService(name.c_str()))); + [instanceName, + name = std::move(fullName)](bool blocking) -> nn::GeneralResult<nn::SharedDevice> { + const auto& getService = + blocking ? AServiceManager_getService : AServiceManager_checkService; + auto service = IDevice::fromBinder(ndk::SpAIBinder(getService(name.c_str()))); if (service == nullptr) { return NN_ERROR() << (blocking ? "AServiceManager_getService" : "AServiceManager_checkService") << " returned nullptr"; } - return Device::create(name, std::move(service)); + ABinderProcess_startThreadPool(); + return Device::create(instanceName, std::move(service)); }; return hal::utils::ResilientDevice::create(std::move(makeDevice)); |