From 34dfa2f74cf79ce66afd08b681bb2bb3a136c5d9 Mon Sep 17 00:00:00 2001 From: Miao Wang Date: Tue, 25 Feb 2020 15:54:08 -0800 Subject: [PATCH] Add more tests exercising IPreparedModel::executeFenced API - executeFenced with device memory - executeFenced with depending sync fences Bug: 148979873 Test: mm Test: VtsHalNeuralnetworksV1_3TargetTest Change-Id: I772c5c85f75cee56e2af06470c2de5b810f8078d --- .../vts/functional/GeneratedTestHarness.cpp | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/neuralnetworks/1.3/vts/functional/GeneratedTestHarness.cpp b/neuralnetworks/1.3/vts/functional/GeneratedTestHarness.cpp index 8c9393b030..3e2be8a346 100644 --- a/neuralnetworks/1.3/vts/functional/GeneratedTestHarness.cpp +++ b/neuralnetworks/1.3/vts/functional/GeneratedTestHarness.cpp @@ -626,21 +626,28 @@ void EvaluatePreparedModel(const sp& device, const sp& ErrorStatus result; hidl_handle syncFenceHandle; sp fencedCallback; - Return ret = preparedModel->executeFenced( - request, {}, testConfig.measureTiming, {}, loopTimeoutDuration, {}, - [&result, &syncFenceHandle, &fencedCallback]( - ErrorStatus error, const hidl_handle& handle, - const sp& callback) { - result = error; - syncFenceHandle = handle; - fencedCallback = callback; - }); + auto callbackFunc = [&result, &syncFenceHandle, &fencedCallback]( + ErrorStatus error, const hidl_handle& handle, + const sp& callback) { + result = error; + syncFenceHandle = handle; + fencedCallback = callback; + }; + Return ret = + preparedModel->executeFenced(request, {}, testConfig.measureTiming, {}, + loopTimeoutDuration, {}, callbackFunc); ASSERT_TRUE(ret.isOk()); if (result != ErrorStatus::NONE) { ASSERT_EQ(syncFenceHandle.getNativeHandle(), nullptr); ASSERT_EQ(fencedCallback, nullptr); executionStatus = ErrorStatus::GENERAL_FAILURE; } else if (syncFenceHandle.getNativeHandle()) { + // If a sync fence is returned, try start another run waiting for the sync fence. + ret = preparedModel->executeFenced(request, {syncFenceHandle}, + testConfig.measureTiming, {}, + loopTimeoutDuration, {}, callbackFunc); + ASSERT_TRUE(ret.isOk()); + ASSERT_EQ(result, ErrorStatus::NONE); waitForSyncFence(syncFenceHandle.getNativeHandle()->data[0]); } if (result == ErrorStatus::NONE) { @@ -744,7 +751,7 @@ void EvaluatePreparedModel(const sp& device, const sp& case TestKind::MEMORY_DOMAIN: { outputTypesList = {OutputType::FULLY_SPECIFIED}; measureTimingList = {MeasureTiming::NO}; - executorList = {Executor::ASYNC, Executor::SYNC}; + executorList = {Executor::ASYNC, Executor::SYNC, Executor::FENCED}; memoryType = MemoryType::DEVICE; } break; case TestKind::FENCED_COMPUTE: {