aboutsummaryrefslogtreecommitdiff
path: root/test/DriverTestHelpers.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/DriverTestHelpers.hpp')
-rw-r--r--test/DriverTestHelpers.hpp361
1 files changed, 258 insertions, 103 deletions
diff --git a/test/DriverTestHelpers.hpp b/test/DriverTestHelpers.hpp
index 66d6ac5c..f8f38545 100644
--- a/test/DriverTestHelpers.hpp
+++ b/test/DriverTestHelpers.hpp
@@ -28,6 +28,16 @@ namespace V1_0
std::ostream& operator<<(std::ostream& os, V1_0::ErrorStatus stat);
} // namespace android::hardware::neuralnetworks::V1_0
+
+#ifdef ARMNN_ANDROID_NN_V1_3
+namespace V1_3
+{
+
+std::ostream& operator<<(std::ostream& os, V1_3::ErrorStatus stat);
+
+} // namespace android::hardware::neuralnetworks::V1_3
+#endif
+
} // namespace android::hardware::neuralnetworks
} // namespace android::hardware
} // namespace android
@@ -37,6 +47,10 @@ namespace driverTestHelpers
std::ostream& operator<<(std::ostream& os, V1_0::ErrorStatus stat);
+#ifdef ARMNN_ANDROID_NN_V1_3
+std::ostream& operator<<(std::ostream& os, V1_3::ErrorStatus stat);
+#endif
+
struct ExecutionCallback : public V1_0::IExecutionCallback
{
ExecutionCallback() : mNotified(false) {}
@@ -71,7 +85,7 @@ private:
android::sp<V1_0::IPreparedModel> m_PreparedModel;
};
-#ifdef ARMNN_ANDROID_NN_V1_2
+#if defined(ARMNN_ANDROID_NN_V1_2) || defined(ARMNN_ANDROID_NN_V1_3)
class PreparedModelCallback_1_2 : public V1_2::IPreparedModelCallback
{
@@ -101,6 +115,46 @@ private:
#endif
+#ifdef ARMNN_ANDROID_NN_V1_3
+
+class PreparedModelCallback_1_3 : public V1_3::IPreparedModelCallback
+{
+public:
+ PreparedModelCallback_1_3()
+ : m_1_0_ErrorStatus(V1_0::ErrorStatus::NONE)
+ , m_1_3_ErrorStatus(V1_3::ErrorStatus::NONE)
+ , m_PreparedModel()
+ , m_PreparedModel_1_2()
+ , m_PreparedModel_1_3()
+ { }
+ ~PreparedModelCallback_1_3() override { }
+
+ Return<void> notify(V1_0::ErrorStatus status, const android::sp<V1_0::IPreparedModel>& preparedModel) override;
+
+ Return<void> notify_1_2(V1_0::ErrorStatus status, const android::sp<V1_2::IPreparedModel>& preparedModel) override;
+
+ Return<void> notify_1_3(V1_3::ErrorStatus status, const android::sp<V1_3::IPreparedModel>& preparedModel) override;
+
+ V1_0::ErrorStatus GetErrorStatus() { return m_1_0_ErrorStatus; }
+
+ V1_3::ErrorStatus Get_1_3_ErrorStatus() { return m_1_3_ErrorStatus; }
+
+ android::sp<V1_0::IPreparedModel> GetPreparedModel() { return m_PreparedModel; }
+
+ android::sp<V1_2::IPreparedModel> GetPreparedModel_1_2() { return m_PreparedModel_1_2; }
+
+ android::sp<V1_3::IPreparedModel> GetPreparedModel_1_3() { return m_PreparedModel_1_3; }
+
+private:
+ V1_0::ErrorStatus m_1_0_ErrorStatus;
+ V1_3::ErrorStatus m_1_3_ErrorStatus;
+ android::sp<V1_0::IPreparedModel> m_PreparedModel;
+ android::sp<V1_2::IPreparedModel> m_PreparedModel_1_2;
+ android::sp<V1_3::IPreparedModel> m_PreparedModel_1_3;
+};
+
+#endif
+
hidl_memory allocateSharedMemory(int64_t size);
template<typename T>
@@ -142,30 +196,6 @@ void AddOperand(HalModel& model, const HalOperand& op)
}
template<typename HalPolicy, typename HalModel = typename HalPolicy::Model>
-void AddIntOperand(HalModel& model, int32_t value, uint32_t numberOfConsumers = 1)
-{
- using HalOperand = typename HalPolicy::Operand;
- using HalOperandType = typename HalPolicy::OperandType;
- using HalOperandLifeTime = typename HalPolicy::OperandLifeTime;
-
- DataLocation location = {};
- location.offset = model.operandValues.size();
- location.length = sizeof(int32_t);
-
- HalOperand op = {};
- op.type = HalOperandType::INT32;
- op.dimensions = hidl_vec<uint32_t>{};
- op.lifetime = HalOperandLifeTime::CONSTANT_COPY;
- op.location = location;
- op.numberOfConsumers = numberOfConsumers;
-
- model.operandValues.resize(model.operandValues.size() + location.length);
- *reinterpret_cast<int32_t*>(&model.operandValues[location.offset]) = value;
-
- AddOperand<HalPolicy>(model, op);
-}
-
-template<typename HalPolicy, typename HalModel = typename HalPolicy::Model>
void AddBoolOperand(HalModel& model, bool value, uint32_t numberOfConsumers = 1)
{
using HalOperand = typename HalPolicy::Operand;
@@ -199,80 +229,8 @@ template<>
OperandType TypeToOperandType<int32_t>();
template<typename HalPolicy,
- typename T,
- typename HalModel = typename HalPolicy::Model,
- typename HalOperandType = typename HalPolicy::OperandType,
- typename HalOperandLifeTime = typename HalPolicy::OperandLifeTime>
-void AddTensorOperand(HalModel& model,
- const hidl_vec<uint32_t>& dimensions,
- const T* values,
- HalOperandType operandType = HalOperandType::TENSOR_FLOAT32,
- HalOperandLifeTime operandLifeTime = V1_0::OperandLifeTime::CONSTANT_COPY,
- double scale = 0.f,
- int offset = 0,
- uint32_t numberOfConsumers = 1)
-{
- using HalOperand = typename HalPolicy::Operand;
-
- uint32_t totalElements = 1;
- for (uint32_t dim : dimensions)
- {
- totalElements *= dim;
- }
-
- DataLocation location = {};
- location.length = totalElements * sizeof(T);
-
- if(operandLifeTime == HalOperandLifeTime::CONSTANT_COPY)
- {
- location.offset = model.operandValues.size();
- }
-
- HalOperand op = {};
- op.type = operandType;
- op.dimensions = dimensions;
- op.scale = scale;
- op.zeroPoint = offset;
- op.lifetime = HalOperandLifeTime::CONSTANT_COPY;
- op.location = location;
- op.numberOfConsumers = numberOfConsumers;
-
- model.operandValues.resize(model.operandValues.size() + location.length);
- for (uint32_t i = 0; i < totalElements; i++)
- {
- *(reinterpret_cast<T*>(&model.operandValues[location.offset]) + i) = values[i];
- }
-
- AddOperand<HalPolicy>(model, op);
-}
-
-template<typename HalPolicy,
- typename T,
- typename HalModel = typename HalPolicy::Model,
- typename HalOperandType = typename HalPolicy::OperandType,
- typename HalOperandLifeTime = typename HalPolicy::OperandLifeTime>
-void AddTensorOperand(HalModel& model,
- const hidl_vec<uint32_t>& dimensions,
- const std::vector<T>& values,
- HalOperandType operandType = HalPolicy::OperandType::TENSOR_FLOAT32,
- HalOperandLifeTime operandLifeTime = V1_0::OperandLifeTime::CONSTANT_COPY,
- double scale = 0.f,
- int offset = 0,
- uint32_t numberOfConsumers = 1)
-{
- AddTensorOperand<HalPolicy, T>(model,
- dimensions,
- values.data(),
- operandType,
- operandLifeTime,
- scale,
- offset,
- numberOfConsumers);
-}
-
-template<typename HalPolicy,
- typename HalModel = typename HalPolicy::Model,
- typename HalOperandType = typename HalPolicy::OperandType>
+ typename HalModel = typename HalPolicy::Model,
+ typename HalOperandType = typename HalPolicy::OperandType>
void AddInputOperand(HalModel& model,
const hidl_vec<uint32_t>& dimensions,
HalOperandType operandType = HalOperandType::TENSOR_FLOAT32,
@@ -298,8 +256,8 @@ void AddInputOperand(HalModel& model,
}
template<typename HalPolicy,
- typename HalModel = typename HalPolicy::Model,
- typename HalOperandType = typename HalPolicy::OperandType>
+ typename HalModel = typename HalPolicy::Model,
+ typename HalOperandType = typename HalPolicy::OperandType>
void AddOutputOperand(HalModel& model,
const hidl_vec<uint32_t>& dimensions,
HalOperandType operandType = HalOperandType::TENSOR_FLOAT32,
@@ -329,7 +287,7 @@ android::sp<V1_0::IPreparedModel> PrepareModelWithStatus(const V1_0::Model& mode
V1_0::ErrorStatus& prepareStatus,
V1_0::ErrorStatus expectedStatus = V1_0::ErrorStatus::NONE);
-#if defined(ARMNN_ANDROID_NN_V1_1) || defined(ARMNN_ANDROID_NN_V1_2)
+#if defined(ARMNN_ANDROID_NN_V1_1) || defined(ARMNN_ANDROID_NN_V1_2) || defined(ARMNN_ANDROID_NN_V1_3)
android::sp<V1_0::IPreparedModel> PrepareModelWithStatus(const V1_1::Model& model,
armnn_driver::ArmnnDriver& driver,
@@ -346,7 +304,7 @@ android::sp<V1_0::IPreparedModel> PrepareModel(const HalModel& model,
return PrepareModelWithStatus(model, driver, prepareStatus);
}
-#ifdef ARMNN_ANDROID_NN_V1_2
+#if defined(ARMNN_ANDROID_NN_V1_2) || defined(ARMNN_ANDROID_NN_V1_3)
android::sp<V1_2::IPreparedModel> PrepareModelWithStatus_1_2(const armnn_driver::hal_1_2::HalPolicy::Model& model,
armnn_driver::ArmnnDriver& driver,
@@ -363,6 +321,203 @@ android::sp<V1_2::IPreparedModel> PrepareModel_1_2(const HalModel& model,
#endif
+#ifdef ARMNN_ANDROID_NN_V1_3
+
+template<typename HalPolicy>
+void AddOperand(armnn_driver::hal_1_3::HalPolicy::Model& model,
+ const armnn_driver::hal_1_3::HalPolicy::Operand& op)
+{
+ model.main.operands.resize(model.main.operands.size() + 1);
+ model.main.operands[model.main.operands.size() - 1] = op;
+}
+
+template<typename HalPolicy>
+void AddInputOperand(armnn_driver::hal_1_3::HalPolicy::Model& model,
+ const hidl_vec<uint32_t>& dimensions,
+ armnn_driver::hal_1_3::HalPolicy::OperandType operandType =
+ armnn_driver::hal_1_3::HalPolicy::OperandType::TENSOR_FLOAT32,
+ double scale = 0.f,
+ int offset = 0,
+ uint32_t numberOfConsumers = 1)
+{
+ using HalOperand = typename armnn_driver::hal_1_3::HalPolicy::Operand;
+ using HalOperandLifeTime = typename armnn_driver::hal_1_3::HalPolicy::OperandLifeTime;
+
+ HalOperand op = {};
+ op.type = operandType;
+ op.scale = scale;
+ op.zeroPoint = offset;
+ op.dimensions = dimensions;
+ op.lifetime = HalOperandLifeTime::SUBGRAPH_INPUT;
+ op.numberOfConsumers = numberOfConsumers;
+
+ AddOperand<HalPolicy>(model, op);
+
+ model.main.inputIndexes.resize(model.main.inputIndexes.size() + 1);
+ model.main.inputIndexes[model.main.inputIndexes.size() - 1] = model.main.operands.size() - 1;
+}
+
+template<typename HalPolicy>
+void AddOutputOperand(armnn_driver::hal_1_3::HalPolicy::Model& model,
+ const hidl_vec<uint32_t>& dimensions,
+ armnn_driver::hal_1_3::HalPolicy::OperandType operandType =
+ armnn_driver::hal_1_3::HalPolicy::OperandType::TENSOR_FLOAT32,
+ double scale = 0.f,
+ int offset = 0,
+ uint32_t numberOfConsumers = 0)
+{
+ using HalOperand = typename armnn_driver::hal_1_3::HalPolicy::Operand;
+ using HalOperandLifeTime = typename armnn_driver::hal_1_3::HalPolicy::OperandLifeTime;
+
+ HalOperand op = {};
+ op.type = operandType;
+ op.scale = scale;
+ op.zeroPoint = offset;
+ op.dimensions = dimensions;
+ op.lifetime = HalOperandLifeTime::SUBGRAPH_OUTPUT;
+ op.numberOfConsumers = numberOfConsumers;
+
+ AddOperand<HalPolicy>(model, op);
+
+ model.main.outputIndexes.resize(model.main.outputIndexes.size() + 1);
+ model.main.outputIndexes[model.main.outputIndexes.size() - 1] = model.main.operands.size() - 1;
+}
+
+android::sp<V1_3::IPreparedModel> PrepareModelWithStatus_1_3(const armnn_driver::hal_1_3::HalPolicy::Model& model,
+ armnn_driver::ArmnnDriver& driver,
+ V1_3::ErrorStatus& prepareStatus);
+
+template<typename HalModel>
+android::sp<V1_3::IPreparedModel> PrepareModel_1_3(const HalModel& model,
+ armnn_driver::ArmnnDriver& driver)
+{
+ V1_3::ErrorStatus prepareStatus = V1_3::ErrorStatus::NONE;
+ return PrepareModelWithStatus_1_3(model, driver, prepareStatus);
+}
+
+#endif
+
+template<typename HalPolicy,
+ typename T,
+ typename HalModel = typename HalPolicy::Model,
+ typename HalOperandType = typename HalPolicy::OperandType,
+ typename HalOperandLifeTime = typename HalPolicy::OperandLifeTime>
+void AddTensorOperand(HalModel& model,
+ const hidl_vec<uint32_t>& dimensions,
+ const T* values,
+ HalOperandType operandType = HalOperandType::TENSOR_FLOAT32,
+ HalOperandLifeTime operandLifeTime = V1_0::OperandLifeTime::CONSTANT_COPY,
+ double scale = 0.f,
+ int offset = 0,
+ uint32_t numberOfConsumers = 1)
+{
+ using HalOperand = typename HalPolicy::Operand;
+
+ uint32_t totalElements = 1;
+ for (uint32_t dim : dimensions)
+ {
+ totalElements *= dim;
+ }
+
+ DataLocation location = {};
+ location.length = totalElements * sizeof(T);
+
+ if(operandLifeTime == HalOperandLifeTime::CONSTANT_COPY)
+ {
+ location.offset = model.operandValues.size();
+ }
+
+ HalOperand op = {};
+ op.type = operandType;
+ op.dimensions = dimensions;
+ op.scale = scale;
+ op.zeroPoint = offset;
+ op.lifetime = HalOperandLifeTime::CONSTANT_COPY;
+ op.location = location;
+ op.numberOfConsumers = numberOfConsumers;
+
+ model.operandValues.resize(model.operandValues.size() + location.length);
+ for (uint32_t i = 0; i < totalElements; i++)
+ {
+ *(reinterpret_cast<T*>(&model.operandValues[location.offset]) + i) = values[i];
+ }
+
+ AddOperand<HalPolicy>(model, op);
+}
+
+template<typename HalPolicy,
+ typename T,
+ typename HalModel = typename HalPolicy::Model,
+ typename HalOperandType = typename HalPolicy::OperandType,
+ typename HalOperandLifeTime = typename HalPolicy::OperandLifeTime>
+void AddTensorOperand(HalModel& model,
+ const hidl_vec<uint32_t>& dimensions,
+ const std::vector<T>& values,
+ HalOperandType operandType = HalPolicy::OperandType::TENSOR_FLOAT32,
+ HalOperandLifeTime operandLifeTime = V1_0::OperandLifeTime::CONSTANT_COPY,
+ double scale = 0.f,
+ int offset = 0,
+ uint32_t numberOfConsumers = 1)
+{
+ AddTensorOperand<HalPolicy, T>(model,
+ dimensions,
+ values.data(),
+ operandType,
+ operandLifeTime,
+ scale,
+ offset,
+ numberOfConsumers);
+}
+
+template<typename HalPolicy, typename HalModel = typename HalPolicy::Model>
+void AddIntOperand(HalModel& model, int32_t value, uint32_t numberOfConsumers = 1)
+{
+ using HalOperand = typename HalPolicy::Operand;
+ using HalOperandType = typename HalPolicy::OperandType;
+ using HalOperandLifeTime = typename HalPolicy::OperandLifeTime;
+
+ DataLocation location = {};
+ location.offset = model.operandValues.size();
+ location.length = sizeof(int32_t);
+
+ HalOperand op = {};
+ op.type = HalOperandType::INT32;
+ op.dimensions = hidl_vec<uint32_t>{};
+ op.lifetime = HalOperandLifeTime::CONSTANT_COPY;
+ op.location = location;
+ op.numberOfConsumers = numberOfConsumers;
+
+ model.operandValues.resize(model.operandValues.size() + location.length);
+ *reinterpret_cast<int32_t*>(&model.operandValues[location.offset]) = value;
+
+ AddOperand<HalPolicy>(model, op);
+}
+
+template<typename HalPolicy, typename HalModel = typename HalPolicy::Model>
+void AddFloatOperand(HalModel& model,
+ float value,
+ uint32_t numberOfConsumers = 1)
+{
+ using HalOperand = typename HalPolicy::Operand;
+ using HalOperandType = typename HalPolicy::OperandType;
+ using HalOperandLifeTime = typename HalPolicy::OperandLifeTime;
+
+ DataLocation location = {};
+ location.offset = model.operandValues.size();
+ location.length = sizeof(float);
+
+ HalOperand op = {};
+ op.type = HalOperandType::FLOAT32;
+ op.dimensions = hidl_vec<uint32_t>{};
+ op.lifetime = HalOperandLifeTime::CONSTANT_COPY;
+ op.location = location;
+ op.numberOfConsumers = numberOfConsumers;
+
+ model.operandValues.resize(model.operandValues.size() + location.length);
+ *reinterpret_cast<float*>(&model.operandValues[location.offset]) = value;
+
+ AddOperand<HalPolicy>(model, op);
+}
V1_0::ErrorStatus Execute(android::sp<V1_0::IPreparedModel> preparedModel,
const V1_0::Request& request,