OSDN Git Service

Make prepareModel asynchronous.
authorMichael Butler <butlermichael@google.com>
Mon, 11 Sep 2017 20:53:19 +0000 (13:53 -0700)
committerMichael Butler <butlermichael@google.com>
Tue, 12 Sep 2017 06:17:21 +0000 (23:17 -0700)
Updated the corresponding VTS tests.

Bug: 63905942
Test: mm, vts
Change-Id: Ie520af845f491dbdd93ea66fd643d77cfb4703f7

neuralnetworks/1.0/IDevice.hal
neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0TargetTest.cpp

index b826b23..9e19097 100644 (file)
@@ -18,6 +18,7 @@
 
 package android.hardware.neuralnetworks@1.0;
 
+import IEvent;
 import IPreparedModel;
 
 interface IDevice {
@@ -25,7 +26,7 @@ interface IDevice {
 
     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);
 };
index 90ccd06..9c64c04 100644 (file)
@@ -209,10 +209,14 @@ TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphTest) {
     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 @@ TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphTest) {
     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();