summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Butler <butlermichael@google.com>2019-10-04 22:02:52 -0700
committerMichael Butler <butlermichael@google.com>2019-10-28 16:50:32 -0700
commit9ed83978db60dd87744678e54fc06b5d1d8e77bc (patch)
treecff7e4a895159bad613993c79f0439e024486d8e
parent869066c5fcc4aa785a857fbf8d4d5aa62338d2b1 (diff)
downloadml-9ed83978db60dd87744678e54fc06b5d1d8e77bc.tar.gz
Create initialization phase for VersionedIDevice
Bug: N/A Test: mma Test: NeuralNetworksTest_static Test: CtsNNAPITestCases Change-Id: I026bad696f0838a3a993576062fc7d3fd7866261 Merged-In: I026bad696f0838a3a993576062fc7d3fd7866261 (cherry picked from commit fe84aeb850ff2b2601b3350ab8dd28ba7e9e2902)
-rw-r--r--nn/runtime/VersionedInterfaces.cpp44
-rw-r--r--nn/runtime/VersionedInterfaces.h19
2 files changed, 57 insertions, 6 deletions
diff --git a/nn/runtime/VersionedInterfaces.cpp b/nn/runtime/VersionedInterfaces.cpp
index 16ebe0ae8..f44717d76 100644
--- a/nn/runtime/VersionedInterfaces.cpp
+++ b/nn/runtime/VersionedInterfaces.cpp
@@ -319,7 +319,17 @@ std::shared_ptr<VersionedIDevice> VersionedIDevice::create(std::string serviceNa
}
VersionedIDevice::VersionedIDevice(std::string serviceName, Core core)
- : mServiceName(std::move(serviceName)), mCore(std::move(core)) {}
+ : mServiceName(std::move(serviceName)), mCore(std::move(core)) {
+ initializeInternal();
+}
+
+void VersionedIDevice::initializeInternal() {
+ mCapabilities = getCapabilitiesInternal();
+ mSupportedExtensions = getSupportedExtensionsInternal();
+ mType = getTypeInternal();
+ mVersionString = getVersionStringInternal();
+ mNumberOfCacheFilesNeeded = getNumberOfCacheFilesNeededInternal();
+}
std::optional<VersionedIDevice::Core> VersionedIDevice::Core::create(sp<V1_0::IDevice> device) {
CHECK(device != nullptr) << "VersionedIDevice::Core::create passed invalid device object.";
@@ -481,7 +491,7 @@ Return<T_Return> VersionedIDevice::recoverable(
return ret;
}
-std::pair<ErrorStatus, Capabilities> VersionedIDevice::getCapabilities() const {
+std::pair<ErrorStatus, Capabilities> VersionedIDevice::getCapabilitiesInternal() const {
const std::pair<ErrorStatus, Capabilities> kFailure = {ErrorStatus::GENERAL_FAILURE, {}};
std::pair<ErrorStatus, Capabilities> result;
@@ -560,7 +570,12 @@ std::pair<ErrorStatus, Capabilities> VersionedIDevice::getCapabilities() const {
return {ErrorStatus::DEVICE_UNAVAILABLE, {}};
}
-std::pair<ErrorStatus, hidl_vec<Extension>> VersionedIDevice::getSupportedExtensions() const {
+std::pair<ErrorStatus, Capabilities> VersionedIDevice::getCapabilities() const {
+ return mCapabilities;
+}
+
+std::pair<ErrorStatus, hidl_vec<Extension>> VersionedIDevice::getSupportedExtensionsInternal()
+ const {
const std::pair<ErrorStatus, hidl_vec<Extension>> kFailure = {ErrorStatus::GENERAL_FAILURE, {}};
// version 1.2+ HAL
@@ -591,6 +606,10 @@ std::pair<ErrorStatus, hidl_vec<Extension>> VersionedIDevice::getSupportedExtens
return {ErrorStatus::DEVICE_UNAVAILABLE, {}};
}
+std::pair<ErrorStatus, hidl_vec<Extension>> VersionedIDevice::getSupportedExtensions() const {
+ return mSupportedExtensions;
+}
+
std::pair<ErrorStatus, hidl_vec<bool>> VersionedIDevice::getSupportedOperations(
const MetaModel& metaModel) const {
const std::pair<ErrorStatus, hidl_vec<bool>> kFailure = {ErrorStatus::GENERAL_FAILURE, {}};
@@ -968,7 +987,7 @@ int64_t VersionedIDevice::getFeatureLevel() const {
}
}
-int32_t VersionedIDevice::getType() const {
+int32_t VersionedIDevice::getTypeInternal() const {
constexpr int32_t kFailure = -1;
// version 1.2+ HAL
@@ -994,7 +1013,11 @@ int32_t VersionedIDevice::getType() const {
return ANEURALNETWORKS_DEVICE_UNKNOWN;
}
-std::pair<ErrorStatus, hidl_string> VersionedIDevice::getVersionString() const {
+int32_t VersionedIDevice::getType() const {
+ return mType;
+}
+
+std::pair<ErrorStatus, hidl_string> VersionedIDevice::getVersionStringInternal() const {
const std::pair<ErrorStatus, hidl_string> kFailure = {ErrorStatus::GENERAL_FAILURE, ""};
// version 1.2+ HAL
@@ -1024,7 +1047,12 @@ std::pair<ErrorStatus, hidl_string> VersionedIDevice::getVersionString() const {
return kFailure;
}
-std::tuple<ErrorStatus, uint32_t, uint32_t> VersionedIDevice::getNumberOfCacheFilesNeeded() const {
+std::pair<ErrorStatus, hidl_string> VersionedIDevice::getVersionString() const {
+ return mVersionString;
+}
+
+std::tuple<ErrorStatus, uint32_t, uint32_t> VersionedIDevice::getNumberOfCacheFilesNeededInternal()
+ const {
constexpr std::tuple<ErrorStatus, uint32_t, uint32_t> kFailure = {ErrorStatus::GENERAL_FAILURE,
0, 0};
@@ -1056,5 +1084,9 @@ std::tuple<ErrorStatus, uint32_t, uint32_t> VersionedIDevice::getNumberOfCacheFi
return kFailure;
}
+std::tuple<ErrorStatus, uint32_t, uint32_t> VersionedIDevice::getNumberOfCacheFilesNeeded() const {
+ return mNumberOfCacheFilesNeeded;
+}
+
} // namespace nn
} // namespace android
diff --git a/nn/runtime/VersionedInterfaces.h b/nn/runtime/VersionedInterfaces.h
index 87e776507..5c66865c0 100644
--- a/nn/runtime/VersionedInterfaces.h
+++ b/nn/runtime/VersionedInterfaces.h
@@ -422,6 +422,25 @@ class VersionedIDevice {
std::tuple<hal::ErrorStatus, uint32_t, uint32_t> getNumberOfCacheFilesNeeded() const;
private:
+ // initializeInternal must be called once before any other public method is
+ // called
+ void initializeInternal();
+
+ // internal helper methods
+ std::pair<hal::ErrorStatus, hal::Capabilities> getCapabilitiesInternal() const;
+ std::pair<hal::ErrorStatus, hal::hidl_vec<hal::Extension>> getSupportedExtensionsInternal()
+ const;
+ int32_t getTypeInternal() const;
+ std::pair<hal::ErrorStatus, hal::hidl_string> getVersionStringInternal() const;
+ std::tuple<hal::ErrorStatus, uint32_t, uint32_t> getNumberOfCacheFilesNeededInternal() const;
+
+ // internal members for the cached results of the internal methods above
+ std::pair<hal::ErrorStatus, hal::Capabilities> mCapabilities;
+ std::pair<hal::ErrorStatus, hal::hidl_vec<hal::Extension>> mSupportedExtensions;
+ int32_t mType;
+ std::pair<hal::ErrorStatus, hal::hidl_string> mVersionString;
+ std::tuple<hal::ErrorStatus, uint32_t, uint32_t> mNumberOfCacheFilesNeeded;
+
/**
* This is a utility class for VersionedIDevice that encapsulates a
* V1_0::IDevice, any appropriate downcasts to newer interfaces, and a