Make prepareModel asynchronous.
Updated the corresponding VTS tests.
Bug: 63905942
Test: mm, vts
Change-Id: Ie520af845f491dbdd93ea66fd643d77cfb4703f7
diff --git a/neuralnetworks/1.0/IDevice.hal b/neuralnetworks/1.0/IDevice.hal
index b826b23..9e19097 100644
--- a/neuralnetworks/1.0/IDevice.hal
+++ b/neuralnetworks/1.0/IDevice.hal
@@ -18,6 +18,7 @@
package android.hardware.neuralnetworks@1.0;
+import IEvent;
import IPreparedModel;
interface IDevice {
@@ -25,7 +26,7 @@
getSupportedSubgraph(Model model) generates(vec<bool> supported);
- prepareModel(Model model) generates(IPreparedModel preparedModel);
+ prepareModel(Model model, IEvent event) generates(IPreparedModel preparedModel);
getStatus() generates(DeviceStatus status);
};
diff --git a/neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0TargetTest.cpp b/neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0TargetTest.cpp
index 90ccd06..9c64c04 100644
--- a/neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0TargetTest.cpp
+++ b/neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0TargetTest.cpp
@@ -209,10 +209,14 @@
const uint32_t INPUT = 0;
const uint32_t OUTPUT = 1;
- // prpeare request
+ // prepare request
Model model = createTestModel();
- sp<IPreparedModel> preparedModel = device->prepareModel(model);
+ sp<Event> preparationEvent = new Event();
+ ASSERT_NE(nullptr, preparationEvent.get());
+ sp<IPreparedModel> preparedModel = device->prepareModel(model, preparationEvent);
ASSERT_NE(nullptr, preparedModel.get());
+ Event::Status preparationStatus = preparationEvent->wait();
+ EXPECT_EQ(Event::Status::SUCCESS, preparationStatus);
// prepare inputs
uint32_t inputSize = static_cast<uint32_t>(inputData.size() * sizeof(float));
@@ -245,13 +249,13 @@
outputMemory->commit();
// execute request
- sp<Event> event = sp<Event>(new Event());
- ASSERT_NE(nullptr, event.get());
+ sp<Event> executionEvent = new Event();
+ ASSERT_NE(nullptr, executionEvent.get());
bool success = preparedModel->execute({.inputs = inputs, .outputs = outputs, .pools = pools},
- event);
+ executionEvent);
EXPECT_TRUE(success);
- Event::Status status = event->wait();
- EXPECT_EQ(Event::Status::SUCCESS, status);
+ Event::Status executionStatus = executionEvent->wait();
+ EXPECT_EQ(Event::Status::SUCCESS, executionStatus);
// validate results { 1+5, 2+6, 3+7, 4+8 }
outputMemory->read();