Merge "NN HAL: Upgrade IPreparedModel::executeSynchronously to 1.3."
This commit is contained in:
commit
f4f2a0d6bf
4 changed files with 67 additions and 9 deletions
|
@ -633,7 +633,7 @@ adb0efdf1462e9b2e742c0dcadd598666aac551f178be06e755bfcdf5797abd0 android.hardwar
|
|||
df9c79c4fdde2821550c6d5c3d07f5ec0adfb1b702561ce543c906ddef698703 android.hardware.media.c2@1.1::IComponent
|
||||
a3eddd9bbdc87e8c22764070037dd1154f1cf006e6fba93364c4f85d4c134a19 android.hardware.media.c2@1.1::IComponentStore
|
||||
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
|
||||
|
|
|
@ -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<OutputShape> outputShapes, Timing timing);
|
||||
};
|
||||
|
|
|
@ -215,7 +215,7 @@ static Return<ErrorStatus> ExecutePreparedModel(const sp<IPreparedModel>& prepar
|
|||
hidl_vec<OutputShape>* outputShapes,
|
||||
Timing* timing) {
|
||||
ErrorStatus result;
|
||||
Return<void> ret = preparedModel->executeSynchronously(
|
||||
Return<void> ret = preparedModel->executeSynchronously_1_3(
|
||||
request, measure,
|
||||
[&result, outputShapes, timing](ErrorStatus error, const hidl_vec<OutputShape>& shapes,
|
||||
const Timing& time) {
|
||||
|
|
|
@ -79,9 +79,9 @@ static void validate(const sp<IPreparedModel>& preparedModel, const std::string&
|
|||
|
||||
// synchronous
|
||||
{
|
||||
SCOPED_TRACE(message + " [executeSynchronously]");
|
||||
SCOPED_TRACE(message + " [executeSynchronously_1_3]");
|
||||
|
||||
Return<void> executeStatus = preparedModel->executeSynchronously(
|
||||
Return<void> executeStatus = preparedModel->executeSynchronously_1_3(
|
||||
request, measure,
|
||||
[](ErrorStatus error, const hidl_vec<OutputShape>& outputShapes,
|
||||
const Timing& timing) {
|
||||
|
@ -158,8 +158,8 @@ void validateRequest(const sp<IPreparedModel>& preparedModel, const Request& req
|
|||
}
|
||||
|
||||
void validateRequestFailure(const sp<IPreparedModel>& preparedModel, const Request& request) {
|
||||
SCOPED_TRACE("Expecting request to fail [executeSynchronously]");
|
||||
Return<void> executeStatus = preparedModel->executeSynchronously(
|
||||
SCOPED_TRACE("Expecting request to fail [executeSynchronously_1_3]");
|
||||
Return<void> executeStatus = preparedModel->executeSynchronously_1_3(
|
||||
request, MeasureTiming::NO,
|
||||
[](ErrorStatus error, const hidl_vec<OutputShape>& outputShapes, const Timing& timing) {
|
||||
ASSERT_NE(ErrorStatus::NONE, error);
|
||||
|
|
Loading…
Reference in a new issue