summaryrefslogtreecommitdiff
path: root/nn/runtime/test/TestExecution.cpp
diff options
context:
space:
mode:
authorXusong Wang <xusongw@google.com>2019-10-25 12:06:20 -0700
committerXusong Wang <xusongw@google.com>2019-11-08 16:05:52 -0800
commit196a18756067c91b28358be7fbd783a8c4226ea0 (patch)
tree702cb3c6975a351ef86c43ea2fcf38e791f75216 /nn/runtime/test/TestExecution.cpp
parent6ddafbc3e680038df547adeea321ca88d333c9a2 (diff)
downloadml-196a18756067c91b28358be7fbd783a8c4226ea0.tar.gz
NN Runtime: Upgrade IPreparedModel::execute to 1.3.
Bug: 143242728 Test: NNT_static Change-Id: I947ebf15c47f69b60da03e7c2e7849593109bd50
Diffstat (limited to 'nn/runtime/test/TestExecution.cpp')
-rw-r--r--nn/runtime/test/TestExecution.cpp74
1 files changed, 64 insertions, 10 deletions
diff --git a/nn/runtime/test/TestExecution.cpp b/nn/runtime/test/TestExecution.cpp
index 7b7b5346d..46525964d 100644
--- a/nn/runtime/test/TestExecution.cpp
+++ b/nn/runtime/test/TestExecution.cpp
@@ -59,16 +59,17 @@ namespace {
const Timing kBadTiming = {.timeOnDevice = UINT64_MAX, .timeInDriver = UINT64_MAX};
-// Wraps an V1_2::IPreparedModel to allow dummying up the execution status.
-class TestPreparedModel12 : public V1_2::IPreparedModel {
+// Wraps the latest version of IPreparedModel to allow dummying up the execution status.
+class TestPreparedModelLatest : public IPreparedModel {
public:
// If errorStatus is NONE, then execute behaves normally (and sends back
// the actual execution status). Otherwise, don't bother to execute, and
// just send back errorStatus (as the execution status, not the launch
// status).
- TestPreparedModel12(sp<V1_0::IPreparedModel> preparedModel, ErrorStatus errorStatus)
+ TestPreparedModelLatest(sp<V1_0::IPreparedModel> preparedModel, ErrorStatus errorStatus)
: mPreparedModelV1_0(preparedModel),
mPreparedModelV1_2(V1_2::IPreparedModel::castFrom(preparedModel).withDefault(nullptr)),
+ mPreparedModelV1_3(V1_3::IPreparedModel::castFrom(preparedModel).withDefault(nullptr)),
mErrorStatus(errorStatus) {}
Return<ErrorStatus> execute(const Request& request,
@@ -97,6 +98,21 @@ class TestPreparedModel12 : public V1_2::IPreparedModel {
}
}
+ Return<ErrorStatus> execute_1_3(const Request& request, MeasureTiming measure,
+ const sp<V1_2::IExecutionCallback>& callback) override {
+ CHECK(mPreparedModelV1_3 != nullptr) << "V1_3 prepared model is nullptr.";
+ if (mErrorStatus == ErrorStatus::NONE) {
+ return mPreparedModelV1_3->execute_1_3(request, measure, callback);
+ } else if (mErrorStatus == ErrorStatus::OUTPUT_INSUFFICIENT_SIZE) {
+ OutputShape shape = {.dimensions = {1}, .isSufficient = false};
+ callback->notify_1_2(mErrorStatus, {shape}, kBadTiming);
+ return ErrorStatus::NONE;
+ } else {
+ callback->notify_1_2(mErrorStatus, {}, kBadTiming);
+ return ErrorStatus::NONE;
+ }
+ }
+
Return<void> executeSynchronously(const Request& request, MeasureTiming measure,
executeSynchronously_cb cb) override {
CHECK(mPreparedModelV1_2 != nullptr) << "V1_2 prepared model is nullptr.";
@@ -120,6 +136,7 @@ class TestPreparedModel12 : public V1_2::IPreparedModel {
const MQDescriptorSync<V1_2::FmqRequestDatum>& requestChannel,
const MQDescriptorSync<V1_2::FmqResultDatum>& resultChannel,
configureExecutionBurst_cb cb) override {
+ CHECK(mPreparedModelV1_2 != nullptr) << "V1_2 prepared model is nullptr.";
if (mErrorStatus == ErrorStatus::NONE) {
return mPreparedModelV1_2->configureExecutionBurst(callback, requestChannel,
resultChannel, cb);
@@ -132,22 +149,59 @@ class TestPreparedModel12 : public V1_2::IPreparedModel {
private:
const sp<V1_0::IPreparedModel> mPreparedModelV1_0;
const sp<V1_2::IPreparedModel> mPreparedModelV1_2;
+ const sp<V1_3::IPreparedModel> mPreparedModelV1_3;
ErrorStatus mErrorStatus;
};
-// Like TestPreparedModel12, but implementing 1.0
+using TestPreparedModel13 = TestPreparedModelLatest;
+
+// Like TestPreparedModelLatest, but implementing 1.2
+class TestPreparedModel12 : public V1_2::IPreparedModel {
+ public:
+ TestPreparedModel12(sp<V1_0::IPreparedModel> preparedModel, ErrorStatus errorStatus)
+ : mLatestPreparedModel(new TestPreparedModelLatest(preparedModel, errorStatus)) {}
+
+ Return<ErrorStatus> execute(const Request& request,
+ const sp<V1_0::IExecutionCallback>& callback) override {
+ return mLatestPreparedModel->execute(request, callback);
+ }
+
+ Return<ErrorStatus> execute_1_2(const Request& request, MeasureTiming measure,
+ const sp<V1_2::IExecutionCallback>& callback) override {
+ return mLatestPreparedModel->execute_1_2(request, measure, callback);
+ }
+
+ Return<void> executeSynchronously(const Request& request, MeasureTiming measure,
+ executeSynchronously_cb cb) override {
+ return mLatestPreparedModel->executeSynchronously(request, measure, cb);
+ }
+
+ Return<void> configureExecutionBurst(
+ const sp<V1_2::IBurstCallback>& callback,
+ const MQDescriptorSync<V1_2::FmqRequestDatum>& requestChannel,
+ const MQDescriptorSync<V1_2::FmqResultDatum>& resultChannel,
+ configureExecutionBurst_cb cb) override {
+ return mLatestPreparedModel->configureExecutionBurst(callback, requestChannel,
+ resultChannel, cb);
+ }
+
+ private:
+ const sp<IPreparedModel> mLatestPreparedModel;
+};
+
+// Like TestPreparedModelLatest, but implementing 1.0
class TestPreparedModel10 : public V1_0::IPreparedModel {
public:
TestPreparedModel10(sp<V1_0::IPreparedModel> preparedModel, ErrorStatus errorStatus)
- : m12PreparedModel(new TestPreparedModel12(preparedModel, errorStatus)) {}
+ : mLatestPreparedModel(new TestPreparedModelLatest(preparedModel, errorStatus)) {}
Return<ErrorStatus> execute(const Request& request,
const sp<V1_0::IExecutionCallback>& callback) override {
- return m12PreparedModel->execute(request, callback);
+ return mLatestPreparedModel->execute(request, callback);
}
private:
- const sp<V1_2::IPreparedModel> m12PreparedModel;
+ const sp<IPreparedModel> mLatestPreparedModel;
};
// Behaves like SampleDriver, except that it produces wrapped IPreparedModel.
@@ -200,18 +254,18 @@ class TestDriver13 : public SampleDriver {
if (prepareModelReturn != ErrorStatus::NONE) {
actualCallback->notify_1_3(
localCallback->getStatus(),
- V1_2::IPreparedModel::castFrom(localCallback->getPreparedModel()));
+ V1_3::IPreparedModel::castFrom(localCallback->getPreparedModel()));
return prepareModelReturn;
}
localCallback->wait();
if (localCallback->getStatus() != ErrorStatus::NONE) {
actualCallback->notify_1_3(
localCallback->getStatus(),
- V1_2::IPreparedModel::castFrom(localCallback->getPreparedModel()));
+ V1_3::IPreparedModel::castFrom(localCallback->getPreparedModel()));
} else {
actualCallback->notify_1_3(
ErrorStatus::NONE,
- new TestPreparedModel12(localCallback->getPreparedModel(), mErrorStatus));
+ new TestPreparedModel13(localCallback->getPreparedModel(), mErrorStatus));
}
return prepareModelReturn;
}