mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 16:50:18 +00:00
Merge "Clamp NNAPI HAL Version to runtime version -- hal" am: b66f1308ac
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1985406 Change-Id: Ifebccd1297cef08bdc1974eebea11bc7712a7061
This commit is contained in:
@@ -25,7 +25,8 @@
|
||||
|
||||
namespace aidl::android::hardware::neuralnetworks::utils {
|
||||
|
||||
::android::nn::GeneralResult<::android::nn::SharedDevice> getDevice(const std::string& name);
|
||||
::android::nn::GeneralResult<::android::nn::SharedDevice> getDevice(
|
||||
const std::string& name, ::android::nn::Version::Level maxFeatureLevelAllowed);
|
||||
|
||||
} // namespace aidl::android::hardware::neuralnetworks::utils
|
||||
|
||||
|
||||
@@ -55,11 +55,12 @@ nn::GeneralResult<nn::Version> getAidlServiceFeatureLevel(IDevice* service) {
|
||||
|
||||
} // namespace
|
||||
|
||||
nn::GeneralResult<nn::SharedDevice> getDevice(const std::string& instanceName) {
|
||||
nn::GeneralResult<nn::SharedDevice> getDevice(
|
||||
const std::string& instanceName, ::android::nn::Version::Level maxFeatureLevelAllowed) {
|
||||
auto fullName = std::string(IDevice::descriptor) + "/" + instanceName;
|
||||
hal::utils::ResilientDevice::Factory makeDevice =
|
||||
[instanceName,
|
||||
name = std::move(fullName)](bool blocking) -> nn::GeneralResult<nn::SharedDevice> {
|
||||
[instanceName, name = std::move(fullName),
|
||||
maxFeatureLevelAllowed](bool blocking) -> nn::GeneralResult<nn::SharedDevice> {
|
||||
std::add_pointer_t<AIBinder*(const char*)> getService;
|
||||
if (blocking) {
|
||||
if (__builtin_available(android __NNAPI_AIDL_MIN_ANDROID_API__, *)) {
|
||||
@@ -79,7 +80,8 @@ nn::GeneralResult<nn::SharedDevice> getDevice(const std::string& instanceName) {
|
||||
<< " returned nullptr";
|
||||
}
|
||||
ABinderProcess_startThreadPool();
|
||||
const auto featureLevel = NN_TRY(getAidlServiceFeatureLevel(service.get()));
|
||||
auto featureLevel = NN_TRY(getAidlServiceFeatureLevel(service.get()));
|
||||
featureLevel.level = std::min(featureLevel.level, maxFeatureLevelAllowed);
|
||||
return Device::create(instanceName, std::move(service), featureLevel);
|
||||
};
|
||||
|
||||
|
||||
@@ -29,7 +29,18 @@ struct SharedDeviceAndUpdatability {
|
||||
bool isDeviceUpdatable = false;
|
||||
};
|
||||
|
||||
std::vector<SharedDeviceAndUpdatability> getDevices(bool includeUpdatableDrivers);
|
||||
/**
|
||||
* @brief Get the NNAPI sAIDL and HIDL services declared in the VINTF.
|
||||
*
|
||||
* @pre maxFeatureLevelAllowed >= Version::Level::FEATURE_LEVEL_5
|
||||
*
|
||||
* @param includeUpdatableDrivers Allow updatable drivers to be used.
|
||||
* @param maxFeatureLevelAllowed Maximum version of driver allowed to be used. Any driver version
|
||||
* exceeding this must be clamped to `maxFeatureLevelAllowed`.
|
||||
* @return A list of devices and whether each device is updatable or not.
|
||||
*/
|
||||
std::vector<SharedDeviceAndUpdatability> getDevices(bool includeUpdatableDrivers,
|
||||
nn::Version::Level maxFeatureLevelAllowed);
|
||||
|
||||
} // namespace android::hardware::neuralnetworks::service
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ void getHidlDevicesForVersion(const std::string& descriptor, getDeviceFn getDevi
|
||||
|
||||
void getAidlDevices(std::vector<SharedDeviceAndUpdatability>* devices,
|
||||
std::unordered_set<std::string>* registeredDevices,
|
||||
bool includeUpdatableDrivers) {
|
||||
bool includeUpdatableDrivers, nn::Version::Level maxFeatureLevelAllowed) {
|
||||
CHECK(devices != nullptr);
|
||||
CHECK(registeredDevices != nullptr);
|
||||
|
||||
@@ -100,7 +100,7 @@ void getAidlDevices(std::vector<SharedDeviceAndUpdatability>* devices,
|
||||
continue;
|
||||
}
|
||||
if (const auto [it, unregistered] = registeredDevices->insert(name); unregistered) {
|
||||
auto maybeDevice = aidl_hal::utils::getDevice(name);
|
||||
auto maybeDevice = aidl_hal::utils::getDevice(name, maxFeatureLevelAllowed);
|
||||
if (maybeDevice.has_value()) {
|
||||
auto device = std::move(maybeDevice).value();
|
||||
CHECK(device != nullptr);
|
||||
@@ -116,11 +116,14 @@ void getAidlDevices(std::vector<SharedDeviceAndUpdatability>* devices,
|
||||
|
||||
} // namespace
|
||||
|
||||
std::vector<SharedDeviceAndUpdatability> getDevices(bool includeUpdatableDrivers) {
|
||||
std::vector<SharedDeviceAndUpdatability> getDevices(bool includeUpdatableDrivers,
|
||||
nn::Version::Level maxFeatureLevelAllowed) {
|
||||
std::vector<SharedDeviceAndUpdatability> devices;
|
||||
std::unordered_set<std::string> registeredDevices;
|
||||
|
||||
getAidlDevices(&devices, ®isteredDevices, includeUpdatableDrivers);
|
||||
CHECK_GE(maxFeatureLevelAllowed, nn::Version::Level::FEATURE_LEVEL_5);
|
||||
|
||||
getAidlDevices(&devices, ®isteredDevices, includeUpdatableDrivers, maxFeatureLevelAllowed);
|
||||
|
||||
getHidlDevicesForVersion(V1_3::IDevice::descriptor, &V1_3::utils::getDevice, &devices,
|
||||
®isteredDevices);
|
||||
|
||||
Reference in New Issue
Block a user