From 080fbf755c48a944586ecd739f02570b7aa611ee Mon Sep 17 00:00:00 2001 From: Michael Butler Date: Mon, 11 Jan 2021 19:35:53 -0800 Subject: [PATCH] Add isUpdatable to NNAPI canonical IDevice -- hal Bug: 177284207 Test: mma Change-Id: I580d5325be91f566ee1c591736a87a94d0a74315 --- .../1.0/utils/include/nnapi/hal/1.0/Device.h | 1 + neuralnetworks/1.0/utils/src/Device.cpp | 4 ++++ .../1.1/utils/include/nnapi/hal/1.1/Device.h | 1 + neuralnetworks/1.1/utils/src/Device.cpp | 4 ++++ .../1.2/utils/include/nnapi/hal/1.2/Device.h | 1 + neuralnetworks/1.2/utils/src/Device.cpp | 4 ++++ .../1.3/utils/include/nnapi/hal/1.3/Device.h | 1 + neuralnetworks/1.3/utils/src/Device.cpp | 4 ++++ .../utils/common/include/nnapi/hal/InvalidDevice.h | 4 +++- .../utils/common/include/nnapi/hal/ResilientDevice.h | 1 + neuralnetworks/utils/common/src/InvalidDevice.cpp | 9 +++++++-- neuralnetworks/utils/common/src/ResilientDevice.cpp | 12 +++++++++--- neuralnetworks/utils/common/test/MockDevice.h | 1 + 13 files changed, 41 insertions(+), 6 deletions(-) diff --git a/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Device.h b/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Device.h index db3b2ad44f..4681b9e47f 100644 --- a/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Device.h +++ b/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Device.h @@ -52,6 +52,7 @@ class Device final : public nn::IDevice { const std::string& getVersionString() const override; nn::Version getFeatureLevel() const override; nn::DeviceType getType() const override; + bool isUpdatable() const override; const std::vector& getSupportedExtensions() const override; const nn::Capabilities& getCapabilities() const override; std::pair getNumberOfCacheFilesNeeded() const override; diff --git a/neuralnetworks/1.0/utils/src/Device.cpp b/neuralnetworks/1.0/utils/src/Device.cpp index 93bd81a19c..bb31a266e0 100644 --- a/neuralnetworks/1.0/utils/src/Device.cpp +++ b/neuralnetworks/1.0/utils/src/Device.cpp @@ -106,6 +106,10 @@ nn::DeviceType Device::getType() const { return nn::DeviceType::OTHER; } +bool Device::isUpdatable() const { + return false; +} + const std::vector& Device::getSupportedExtensions() const { return kExtensions; } diff --git a/neuralnetworks/1.1/utils/include/nnapi/hal/1.1/Device.h b/neuralnetworks/1.1/utils/include/nnapi/hal/1.1/Device.h index 5e224b5018..3aec8ee497 100644 --- a/neuralnetworks/1.1/utils/include/nnapi/hal/1.1/Device.h +++ b/neuralnetworks/1.1/utils/include/nnapi/hal/1.1/Device.h @@ -52,6 +52,7 @@ class Device final : public nn::IDevice { const std::string& getVersionString() const override; nn::Version getFeatureLevel() const override; nn::DeviceType getType() const override; + bool isUpdatable() const override; const std::vector& getSupportedExtensions() const override; const nn::Capabilities& getCapabilities() const override; std::pair getNumberOfCacheFilesNeeded() const override; diff --git a/neuralnetworks/1.1/utils/src/Device.cpp b/neuralnetworks/1.1/utils/src/Device.cpp index 3197ef4ac3..d2ef57f18e 100644 --- a/neuralnetworks/1.1/utils/src/Device.cpp +++ b/neuralnetworks/1.1/utils/src/Device.cpp @@ -106,6 +106,10 @@ nn::DeviceType Device::getType() const { return nn::DeviceType::UNKNOWN; } +bool Device::isUpdatable() const { + return false; +} + const std::vector& Device::getSupportedExtensions() const { return kExtensions; } diff --git a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Device.h b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Device.h index b4bef5ee0a..489f85749d 100644 --- a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Device.h +++ b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Device.h @@ -71,6 +71,7 @@ class Device final : public nn::IDevice { const std::string& getVersionString() const override; nn::Version getFeatureLevel() const override; nn::DeviceType getType() const override; + bool isUpdatable() const override; const std::vector& getSupportedExtensions() const override; const nn::Capabilities& getCapabilities() const override; std::pair getNumberOfCacheFilesNeeded() const override; diff --git a/neuralnetworks/1.2/utils/src/Device.cpp b/neuralnetworks/1.2/utils/src/Device.cpp index 9fe0de25b3..1954dfa5bf 100644 --- a/neuralnetworks/1.2/utils/src/Device.cpp +++ b/neuralnetworks/1.2/utils/src/Device.cpp @@ -199,6 +199,10 @@ nn::DeviceType Device::getType() const { return kDeviceType; } +bool Device::isUpdatable() const { + return false; +} + const std::vector& Device::getSupportedExtensions() const { return kExtensions; } diff --git a/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/Device.h b/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/Device.h index 84f606a357..f36b6c0642 100644 --- a/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/Device.h +++ b/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/Device.h @@ -54,6 +54,7 @@ class Device final : public nn::IDevice { const std::string& getVersionString() const override; nn::Version getFeatureLevel() const override; nn::DeviceType getType() const override; + bool isUpdatable() const override; const std::vector& getSupportedExtensions() const override; const nn::Capabilities& getCapabilities() const override; std::pair getNumberOfCacheFilesNeeded() const override; diff --git a/neuralnetworks/1.3/utils/src/Device.cpp b/neuralnetworks/1.3/utils/src/Device.cpp index d710b85070..87c9f32e4d 100644 --- a/neuralnetworks/1.3/utils/src/Device.cpp +++ b/neuralnetworks/1.3/utils/src/Device.cpp @@ -150,6 +150,10 @@ nn::DeviceType Device::getType() const { return kDeviceType; } +bool Device::isUpdatable() const { + return false; +} + const std::vector& Device::getSupportedExtensions() const { return kExtensions; } diff --git a/neuralnetworks/utils/common/include/nnapi/hal/InvalidDevice.h b/neuralnetworks/utils/common/include/nnapi/hal/InvalidDevice.h index 5e62b9ae0b..d8435262cc 100644 --- a/neuralnetworks/utils/common/include/nnapi/hal/InvalidDevice.h +++ b/neuralnetworks/utils/common/include/nnapi/hal/InvalidDevice.h @@ -32,7 +32,7 @@ namespace android::hardware::neuralnetworks::utils { class InvalidDevice final : public nn::IDevice { public: InvalidDevice(std::string name, std::string versionString, nn::Version featureLevel, - nn::DeviceType type, std::vector extensions, + nn::DeviceType type, bool isUpdatable, std::vector extensions, nn::Capabilities capabilities, std::pair numberOfCacheFilesNeeded); @@ -40,6 +40,7 @@ class InvalidDevice final : public nn::IDevice { const std::string& getVersionString() const override; nn::Version getFeatureLevel() const override; nn::DeviceType getType() const override; + bool isUpdatable() const override; const std::vector& getSupportedExtensions() const override; const nn::Capabilities& getCapabilities() const override; std::pair getNumberOfCacheFilesNeeded() const override; @@ -70,6 +71,7 @@ class InvalidDevice final : public nn::IDevice { const std::string kVersionString; const nn::Version kFeatureLevel; const nn::DeviceType kType; + const bool kIsUpdatable; const std::vector kExtensions; const nn::Capabilities kCapabilities; const std::pair kNumberOfCacheFilesNeeded; diff --git a/neuralnetworks/utils/common/include/nnapi/hal/ResilientDevice.h b/neuralnetworks/utils/common/include/nnapi/hal/ResilientDevice.h index 84ae799aad..8199c522e3 100644 --- a/neuralnetworks/utils/common/include/nnapi/hal/ResilientDevice.h +++ b/neuralnetworks/utils/common/include/nnapi/hal/ResilientDevice.h @@ -53,6 +53,7 @@ class ResilientDevice final : public nn::IDevice, const std::string& getVersionString() const override; nn::Version getFeatureLevel() const override; nn::DeviceType getType() const override; + bool isUpdatable() const override; const std::vector& getSupportedExtensions() const override; const nn::Capabilities& getCapabilities() const override; std::pair getNumberOfCacheFilesNeeded() const override; diff --git a/neuralnetworks/utils/common/src/InvalidDevice.cpp b/neuralnetworks/utils/common/src/InvalidDevice.cpp index 535ccb41c7..81bca7fad0 100644 --- a/neuralnetworks/utils/common/src/InvalidDevice.cpp +++ b/neuralnetworks/utils/common/src/InvalidDevice.cpp @@ -32,13 +32,14 @@ namespace android::hardware::neuralnetworks::utils { InvalidDevice::InvalidDevice(std::string name, std::string versionString, nn::Version featureLevel, - nn::DeviceType type, std::vector extensions, - nn::Capabilities capabilities, + nn::DeviceType type, bool isUpdatable, + std::vector extensions, nn::Capabilities capabilities, std::pair numberOfCacheFilesNeeded) : kName(std::move(name)), kVersionString(std::move(versionString)), kFeatureLevel(featureLevel), kType(type), + kIsUpdatable(isUpdatable), kExtensions(std::move(extensions)), kCapabilities(std::move(capabilities)), kNumberOfCacheFilesNeeded(numberOfCacheFilesNeeded) {} @@ -59,6 +60,10 @@ nn::DeviceType InvalidDevice::getType() const { return kType; } +bool InvalidDevice::isUpdatable() const { + return kIsUpdatable; +} + const std::vector& InvalidDevice::getSupportedExtensions() const { return kExtensions; } diff --git a/neuralnetworks/utils/common/src/ResilientDevice.cpp b/neuralnetworks/utils/common/src/ResilientDevice.cpp index 2023c9af30..13965afd37 100644 --- a/neuralnetworks/utils/common/src/ResilientDevice.cpp +++ b/neuralnetworks/utils/common/src/ResilientDevice.cpp @@ -122,12 +122,14 @@ nn::GeneralResult ResilientDevice::recover(const nn::IDevice* }; if (compare(&IDevice::getName) || compare(&IDevice::getVersionString) || compare(&IDevice::getFeatureLevel) || compare(&IDevice::getType) || - compare(&IDevice::getSupportedExtensions) || compare(&IDevice::getCapabilities)) { + compare(&IDevice::isUpdatable) || compare(&IDevice::getSupportedExtensions) || + compare(&IDevice::getCapabilities)) { LOG(ERROR) << "Recovered device has different metadata than what is cached. Marking " "IDevice object as invalid."; device = std::make_shared( - kName, kVersionString, mDevice->getFeatureLevel(), mDevice->getType(), kExtensions, - kCapabilities, mDevice->getNumberOfCacheFilesNeeded()); + kName, kVersionString, mDevice->getFeatureLevel(), mDevice->getType(), + mDevice->isUpdatable(), kExtensions, kCapabilities, + mDevice->getNumberOfCacheFilesNeeded()); mIsValid = false; } @@ -151,6 +153,10 @@ nn::DeviceType ResilientDevice::getType() const { return getDevice()->getType(); } +bool ResilientDevice::isUpdatable() const { + return getDevice()->isUpdatable(); +} + const std::vector& ResilientDevice::getSupportedExtensions() const { return kExtensions; } diff --git a/neuralnetworks/utils/common/test/MockDevice.h b/neuralnetworks/utils/common/test/MockDevice.h index 08cd5c5501..5566968c68 100644 --- a/neuralnetworks/utils/common/test/MockDevice.h +++ b/neuralnetworks/utils/common/test/MockDevice.h @@ -29,6 +29,7 @@ class MockDevice final : public IDevice { MOCK_METHOD(const std::string&, getVersionString, (), (const, override)); MOCK_METHOD(Version, getFeatureLevel, (), (const, override)); MOCK_METHOD(DeviceType, getType, (), (const, override)); + MOCK_METHOD(bool, isUpdatable, (), (const, override)); MOCK_METHOD(const std::vector&, getSupportedExtensions, (), (const, override)); MOCK_METHOD(const Capabilities&, getCapabilities, (), (const, override)); MOCK_METHOD((std::pair), getNumberOfCacheFilesNeeded, (),