diff --git a/current.txt b/current.txt index 69f4164055..66a2e39c7b 100644 --- a/current.txt +++ b/current.txt @@ -595,7 +595,7 @@ c228aaa27f66c48e147159a4f4996c5273191fece1b08de31bd171c61334855e android.hardwar adb0efdf1462e9b2e742c0dcadd598666aac551f178be06e755bfcdf5797abd0 android.hardware.keymaster@4.1::IOperation 7a04ea5595ed418ca3e91c28b8bd7353dd988be9be7b0c8c9e64fb4b77bd4523 android.hardware.keymaster@4.1::types 9e59fffceed0dd72a9799e04505db5f777bbbea1af0695ba4107ef6d967c6fda android.hardware.neuralnetworks@1.3::IDevice -4a6c3b3556da951b4def21ba579a227c022980fe4465df6cdfbe20628fa75f5a android.hardware.neuralnetworks@1.3::IPreparedModel +258825966435b3ed08832055bb736d81516013e405f161d9ccde9a90cfcdde83 android.hardware.neuralnetworks@1.3::IPreparedModel 94e803236398bed1febb11cc21051bc42ec003700139b099d6c479e02a7ca3c3 android.hardware.neuralnetworks@1.3::IPreparedModelCallback cf1d55e8c68300090747ab90b94c22e4c859b29c84ced68a317c595bb115eab2 android.hardware.neuralnetworks@1.3::types 3e01d4446cd69fd1c48f8572efd97487bc179564b32bd795800b97bbe10be37b android.hardware.wifi@1.4::IWifi diff --git a/neuralnetworks/1.3/IPreparedModel.hal b/neuralnetworks/1.3/IPreparedModel.hal index c04809fea1..7aea4160b0 100644 --- a/neuralnetworks/1.3/IPreparedModel.hal +++ b/neuralnetworks/1.3/IPreparedModel.hal @@ -18,9 +18,11 @@ package android.hardware.neuralnetworks@1.3; import @1.0::ErrorStatus; import @1.0::Request; -import @1.2::MeasureTiming; import @1.2::IExecutionCallback; import @1.2::IPreparedModel; +import @1.2::MeasureTiming; +import @1.2::OutputShape; +import @1.2::Timing; /** * IPreparedModel describes a model that has been prepared for execution and @@ -62,8 +64,8 @@ interface IPreparedModel extends @1.2::IPreparedModel { * values, the execution should complete successfully (ErrorStatus::NONE): * There must be no failure unless the device itself is in a bad state. * - * Any number of calls to the execute, execute_1_2, execute_1_3, and executeSynchronously - * functions, in any combination, may be made concurrently, even on the same + * Any number of calls to the execute* and executeSynchronously* functions, + * in any combination, may be made concurrently, even on the same * IPreparedModel object. * * @param request The input and output information on which the prepared @@ -87,4 +89,60 @@ interface IPreparedModel extends @1.2::IPreparedModel { */ execute_1_3(Request request, MeasureTiming measure, IExecutionCallback callback) generates (ErrorStatus status); + + /** + * Performs a synchronous execution on a prepared model. + * + * The execution is performed synchronously with respect to the caller. + * executeSynchronously_1_3 must verify the inputs to the function are + * correct. If there is an error, executeSynchronously_1_3 must immediately + * return with the appropriate ErrorStatus value. If the inputs to the + * function are valid and there is no error, executeSynchronously_1_3 must + * perform the execution, and must not return until the execution is + * complete. + * + * The caller must not change the content of any data object referenced by + * 'request' (described by the {@link @1.0::DataLocation} of a + * {@link @1.0::RequestArgument}) until executeSynchronously_1_3 + * returns. executeSynchronously_1_3 must not change the content of any of the + * data objects corresponding to 'request' inputs. + * + * If the prepared model was prepared from a model wherein all tensor + * operands have fully specified dimensions, and the inputs to the function + * are valid, and at execution time every operation's input operands have + * legal values, then the execution should complete successfully + * (ErrorStatus::NONE): There must be no failure unless the device itself is + * in a bad state. + * + * Any number of calls to the execute* and executeSynchronously* functions, + * in any combination, may be made concurrently, even on the same + * IPreparedModel object. + * + * @param request The input and output information on which the prepared + * model is to be executed. + * @param measure Specifies whether or not to measure duration of the execution. + * The duration runs from the time the driver sees the call + * to the executeSynchronously_1_3 function to the time the driver + * returns from the function. + * @return status Error status of the execution, must be: + * - NONE if execution is performed successfully + * - DEVICE_UNAVAILABLE if driver is offline or busy + * - GENERAL_FAILURE if there is an unspecified error + * - OUTPUT_INSUFFICIENT_SIZE if at least one output + * operand buffer is not large enough to store the + * corresponding output + * - INVALID_ARGUMENT if one of the input arguments is + * invalid + * @return outputShapes A list of shape information of model output operands. + * The index into "outputShapes" corresponds to the index + * of the output operand in the Request outputs vector. + * outputShapes must be empty unless the status is either + * NONE or OUTPUT_INSUFFICIENT_SIZE. + * @return Timing Duration of execution. Unless measure is YES and status is + * NONE, all times must be reported as UINT64_MAX. A driver may + * choose to report any time as UINT64_MAX, indicating that + * measurement is not available. + */ + executeSynchronously_1_3(Request request, MeasureTiming measure) + generates (ErrorStatus status, vec outputShapes, Timing timing); }; diff --git a/neuralnetworks/1.3/vts/functional/GeneratedTestHarness.cpp b/neuralnetworks/1.3/vts/functional/GeneratedTestHarness.cpp index f61240efa6..be894f27c7 100644 --- a/neuralnetworks/1.3/vts/functional/GeneratedTestHarness.cpp +++ b/neuralnetworks/1.3/vts/functional/GeneratedTestHarness.cpp @@ -215,7 +215,7 @@ static Return ExecutePreparedModel(const sp& prepar hidl_vec* outputShapes, Timing* timing) { ErrorStatus result; - Return ret = preparedModel->executeSynchronously( + Return ret = preparedModel->executeSynchronously_1_3( request, measure, [&result, outputShapes, timing](ErrorStatus error, const hidl_vec& shapes, const Timing& time) { diff --git a/neuralnetworks/1.3/vts/functional/ValidateRequest.cpp b/neuralnetworks/1.3/vts/functional/ValidateRequest.cpp index 2cf30d54bc..8092d04bcb 100644 --- a/neuralnetworks/1.3/vts/functional/ValidateRequest.cpp +++ b/neuralnetworks/1.3/vts/functional/ValidateRequest.cpp @@ -79,9 +79,9 @@ static void validate(const sp& preparedModel, const std::string& // synchronous { - SCOPED_TRACE(message + " [executeSynchronously]"); + SCOPED_TRACE(message + " [executeSynchronously_1_3]"); - Return executeStatus = preparedModel->executeSynchronously( + Return executeStatus = preparedModel->executeSynchronously_1_3( request, measure, [](ErrorStatus error, const hidl_vec& outputShapes, const Timing& timing) { @@ -158,8 +158,8 @@ void validateRequest(const sp& preparedModel, const Request& req } void validateRequestFailure(const sp& preparedModel, const Request& request) { - SCOPED_TRACE("Expecting request to fail [executeSynchronously]"); - Return executeStatus = preparedModel->executeSynchronously( + SCOPED_TRACE("Expecting request to fail [executeSynchronously_1_3]"); + Return executeStatus = preparedModel->executeSynchronously_1_3( request, MeasureTiming::NO, [](ErrorStatus error, const hidl_vec& outputShapes, const Timing& timing) { ASSERT_NE(ErrorStatus::NONE, error);