Merge changes from topic "NNAPI v1.3" am: b8d9568f3d am: 5af04da4a0
am: b339abc82c

Change-Id: I399f85bd975bda5eabc188a527afd7c35608d8f3
diff --git a/current.txt b/current.txt
index aa2494e..972fe16 100644
--- a/current.txt
+++ b/current.txt
@@ -586,5 +586,3 @@
 # HALs released in Android R
 07d0a252b2d8fa35887908a996ba395cf392968395fc30afab791f46e0c22a52 android.hardware.boot@1.1::IBootControl
 74049a402be913963edfdd80828a53736570e9d8124a1bf18166b6ed46a6b0ab android.hardware.boot@1.1::types
-34515afa2bb792d3c6d8495a5f5d907d179c8507ca5e55c10050d02ae1d516ef android.hardware.neuralnetworks@1.3::IDevice
-e2d20d4eb24f40b44a3766d05f77052581cb3f4df35fb48c0cc5d9cdcf5c872e android.hardware.neuralnetworks@1.3::types
diff --git a/neuralnetworks/1.2/vts/functional/Android.bp b/neuralnetworks/1.2/vts/functional/Android.bp
index bfb8719..3ba8879 100644
--- a/neuralnetworks/1.2/vts/functional/Android.bp
+++ b/neuralnetworks/1.2/vts/functional/Android.bp
@@ -37,7 +37,6 @@
         "android.hardware.neuralnetworks@1.0",
         "android.hardware.neuralnetworks@1.1",
         "android.hardware.neuralnetworks@1.2",
-        "android.hardware.neuralnetworks@1.3",
         "android.hidl.allocator@1.0",
         "android.hidl.memory@1.0",
         "libgmock",
diff --git a/neuralnetworks/1.3/Android.bp b/neuralnetworks/1.3/Android.bp
deleted file mode 100644
index 0615ec6..0000000
--- a/neuralnetworks/1.3/Android.bp
+++ /dev/null
@@ -1,21 +0,0 @@
-// This file is autogenerated by hidl-gen -Landroidbp.
-
-hidl_interface {
-    name: "android.hardware.neuralnetworks@1.3",
-    root: "android.hardware",
-    vndk: {
-        enabled: true,
-    },
-    srcs: [
-        "types.hal",
-        "IDevice.hal",
-    ],
-    interfaces: [
-        "android.hardware.neuralnetworks@1.0",
-        "android.hardware.neuralnetworks@1.1",
-        "android.hardware.neuralnetworks@1.2",
-        "android.hidl.base@1.0",
-        "android.hidl.safe_union@1.0",
-    ],
-    gen_java: false,
-}
diff --git a/neuralnetworks/1.3/IDevice.hal b/neuralnetworks/1.3/IDevice.hal
deleted file mode 100644
index ee36fb4..0000000
--- a/neuralnetworks/1.3/IDevice.hal
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.neuralnetworks@1.3;
-
-import @1.0::ErrorStatus;
-import @1.1::ExecutionPreference;
-import @1.2::Constant;
-import @1.2::DeviceType;
-import @1.2::Extension;
-import @1.2::IDevice;
-import @1.2::IPreparedModelCallback;
-
-/**
- * This interface represents a device driver.
- */
-interface IDevice extends @1.2::IDevice {
-    /**
-     * Gets the capabilities of a driver.
-     *
-     * @return status Error status of the call, must be:
-     *                - NONE if successful
-     *                - DEVICE_UNAVAILABLE if driver is offline or busy
-     *                - GENERAL_FAILURE if there is an unspecified error
-     * @return capabilities Capabilities of the driver.
-     */
-    getCapabilities_1_3() generates (ErrorStatus status, Capabilities capabilities);
-
-    /**
-     * Gets the supported operations in a model.
-     *
-     * getSupportedOperations indicates which operations of a model are fully
-     * supported by the vendor driver. If an operation may not be supported for
-     * any reason, getSupportedOperations must return false for that operation.
-     *
-     * @param model A model whose operations--and their corresponding operands--
-     *     are to be verified by the driver.
-     * @return status Error status of the call, must be:
-     *     - NONE if successful
-     *     - DEVICE_UNAVAILABLE if driver is offline or busy
-     *     - GENERAL_FAILURE if there is an unspecified error
-     *     - INVALID_ARGUMENT if provided model is invalid
-     * @return supportedOperations A list of supported operations, where true
-     *     indicates the operation is supported and false indicates the
-     *     operation is not supported. The index of "supported" corresponds with
-     *     the index of the operation it is describing.
-     */
-    getSupportedOperations_1_3(Model model)
-        generates (ErrorStatus status, vec<bool> supportedOperations);
-
-    /**
-     * Asynchronously creates a prepared model for execution and optionally
-     * saves it into cache files.
-     *
-     * prepareModel is used to make any necessary transformations to or
-     * alternative representations to a model for execution, possibly including
-     * transformations on the constant data, optimization on the model's graph,
-     * or compilation into the device's native binary format. The model itself
-     * is not changed.
-     *
-     * Optionally, caching information may be provided for the driver to save
-     * the prepared model to cache files for faster model compilation time when
-     * the same model preparation is requested in the future. There are two
-     * types of cache file handles provided to the driver: model cache and data
-     * cache. For more information on the two types of cache handles, refer to
-     * getNumberOfCacheFilesNeeded.
-     *
-     * The file descriptors must be opened with read and write permission. A
-     * file may have any size, and the corresponding file descriptor may have
-     * any offset. The driver must truncate a file to zero size before writing
-     * to that file. The file descriptors may be closed by the client once the
-     * asynchronous preparation has finished. The driver must dup a file
-     * descriptor if it wants to get access to the cache file later.
-     *
-     * The model is prepared asynchronously with respect to the caller. The
-     * prepareModel function must verify the inputs to the preparedModel
-     * function related to preparing the model (as opposed to saving the
-     * prepared model to cache) are correct. If there is an error, prepareModel
-     * must immediately invoke the callback with the appropriate ErrorStatus
-     * value and nullptr for the IPreparedModel, then return with the same
-     * ErrorStatus. If the inputs to the prepareModel function that are related
-     * to preparing the model are valid and there is no error, prepareModel must
-     * launch an asynchronous task to prepare the model in the background, and
-     * immediately return from prepareModel with ErrorStatus::NONE. If the
-     * asynchronous task fails to launch, prepareModel must immediately invoke
-     * the callback with ErrorStatus::GENERAL_FAILURE and nullptr for the
-     * IPreparedModel, then return with ErrorStatus::GENERAL_FAILURE.
-     *
-     * When the asynchronous task has finished preparing the model, it must
-     * immediately invoke the callback function provided as an input to
-     * prepareModel. If the model was prepared successfully, the callback object
-     * must be invoked with an error status of ErrorStatus::NONE and the
-     * produced IPreparedModel object. If an error occurred preparing the model,
-     * the callback object must be invoked with the appropriate ErrorStatus
-     * value and nullptr for the IPreparedModel.
-     *
-     * Optionally, the driver may save the prepared model to cache during the
-     * asynchronous preparation. Any error that occurs when saving to cache must
-     * not affect the status of preparing the model. Even if the input arguments
-     * related to the cache may be invalid, or the driver may fail to save to
-     * cache, the prepareModel function must finish preparing the model. The
-     * driver may choose not to save to cache even if the caching information is
-     * provided and valid.
-     *
-     * The only information that may be unknown to the model at this stage is
-     * the shape of the tensors, which may only be known at execution time. As
-     * such, some driver services may return partially prepared models, where
-     * the prepared model may only be finished when it is paired with a set of
-     * inputs to the model. Note that the same prepared model object may be used
-     * with different shapes of inputs on different (possibly concurrent)
-     * executions.
-     *
-     * Multiple threads may call prepareModel on the same model concurrently.
-     *
-     * @param model The model to be prepared for execution.
-     * @param preference Indicates the intended execution behavior of a prepared
-     *     model.
-     * @param modelCache A vector of handles with each entry holding exactly one
-     *     cache file descriptor for the security-sensitive cache. The length of
-     *     the vector must either be 0 indicating that caching information is
-     *     not provided, or match the numModelCache returned from
-     *     getNumberOfCacheFilesNeeded. The cache handles will be provided in
-     *     the same order when retrieving the preparedModel from cache files
-     *     with prepareModelFromCache.
-     * @param dataCache A vector of handles with each entry holding exactly one
-     *     cache file descriptor for the constants' cache. The length of the
-     *     vector must either be 0 indicating that caching information is not
-     *     provided, or match the numDataCache returned from
-     *     getNumberOfCacheFilesNeeded. The cache handles will be provided in
-     *     the same order when retrieving the preparedModel from cache files
-     *     with prepareModelFromCache.
-     * @param token A caching token of length Constant::BYTE_SIZE_OF_CACHE_TOKEN
-     *     identifying the prepared model. The same token will be provided when
-     *     retrieving the prepared model from the cache files with
-     *     prepareModelFromCache.  Tokens should be chosen to have a low rate of
-     *     collision for a particular application. The driver cannot detect a
-     *     collision; a collision will result in a failed execution or in a
-     *     successful execution that produces incorrect output values. If both
-     *     modelCache and dataCache are empty indicating that caching
-     *     information is not provided, this token must be ignored.
-     * @param callback A callback object used to return the error status of
-     *     preparing the model for execution and the prepared model if
-     *     successful, nullptr otherwise. The callback object's notify function
-     *     must be called exactly once, even if the model could not be prepared.
-     * @return status Error status of launching a task which prepares the model
-     *     in the background; must be:
-     *     - NONE if preparation task is successfully launched
-     *     - DEVICE_UNAVAILABLE if driver is offline or busy
-     *     - GENERAL_FAILURE if there is an unspecified error
-     *     - INVALID_ARGUMENT if one of the input arguments related to preparing
-     *       the model is invalid
-     */
-    prepareModel_1_3(Model model, ExecutionPreference preference,
-                     vec<handle> modelCache, vec<handle> dataCache,
-                     uint8_t[Constant:BYTE_SIZE_OF_CACHE_TOKEN] token,
-                     IPreparedModelCallback callback)
-        generates (ErrorStatus status);
-};
diff --git a/neuralnetworks/1.3/types.hal b/neuralnetworks/1.3/types.hal
deleted file mode 100644
index db5dd51..0000000
--- a/neuralnetworks/1.3/types.hal
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.neuralnetworks@1.3;
-
-import @1.0::DataLocation;
-import @1.0::OperandLifeTime;
-import @1.0::PerformanceInfo;
-import @1.2::OperandType;
-import @1.2::OperationType;
-import @1.2::SymmPerChannelQuantParams;
-
-import android.hidl.safe_union@1.0::Monostate;
-
-/**
- * NOTE: Since NNAPI 1.2, OEM operation and data type are deprecated. Extensions
- * are the preferred alternative.
- *
- * NOTE: Adding a new fundamental type requires updating the value of
- * OperandTypeRange::FUNDAMENTAL_MAX.
- */
-enum OperandType : @1.2::OperandType {
-    /**
-     * A tensor of 8 bit signed integers that represent real numbers.
-     *
-     * Attached to this tensor are two numbers that can be used to convert the
-     * 8 bit integer to the real value and vice versa. These two numbers are:
-     * - scale: a 32 bit floating point value greater than zero.
-     * - zeroPoint: a 32 bit integer, in range [-128, 127].
-     *
-     * The formula is:
-     * real_value = (integer_value - zeroPoint) * scale.
-     *
-     * Available since API level 30.
-     */
-    TENSOR_QUANT8_ASYMM_SIGNED = 14,
-};
-
-/**
- * The range of operand values in the OperandType enum.
- */
-enum OperandTypeRange : uint32_t {
-    BASE_MIN        = 0,
-    FUNDAMENTAL_MIN = 0,
-    FUNDAMENTAL_MAX = 14,
-    OEM_MIN         = 10000,
-    OEM_MAX         = 10001,
-    BASE_MAX        = 0xFFFF,
-};
-
-
-/**
- * The capabilities of a driver.
- *
- * Performance of an operation comes from the type of its first operand.
- * This represents performance for non extension operand types.
- */
-struct Capabilities {
-    /**
-     * Driver performance when operating on float32 data but performing
-     * calculations with range and/or precision as low as that of the IEEE
-     * 754 16-bit floating-point format.
-     */
-    PerformanceInfo relaxedFloat32toFloat16PerformanceScalar;
-    PerformanceInfo relaxedFloat32toFloat16PerformanceTensor;
-
-    /**
-     * Driver performance when operating on a particular data type.
-     * In the case of float32 data, this is used when the calculations
-     * are not relaxed.
-     */
-    struct OperandPerformance {
-        OperandType type;
-        PerformanceInfo info;
-    };
-
-    /**
-     * Performance by operand type. Must be sorted by OperandType.
-     * If a particular OperandType is not present in operandPerformance,
-     * its performance is treated as
-     * { .execTime = FLT_MAX, .powerUsage = FLT_MAX }.
-     */
-    vec<OperandPerformance> operandPerformance;
-};
-
-/**
- * Describes one operand of the model's graph.
- */
-struct Operand {
-    /**
-     * The data type.
-     *
-     * Besides the values listed in {@link OperandType}, any value above
-     * {@link OperandTypeRange::BASE_MAX} is possible and should be interpreted
-     * as an extension type according to {@link Model::extensionNameToPrefix}.
-     */
-    OperandType type;
-
-    /**
-     * Dimensions of the operand.
-     *
-     * For a scalar operand, dimensions.size() must be 0.
-     *
-     * A tensor operand with all dimensions specified has "fully
-     * specified" dimensions. Whenever possible (i.e., whenever the
-     * dimensions are known at model construction time), a tensor
-     * operand should have (but is not required to have) fully
-     * specified dimensions, in order to enable the best possible
-     * performance.
-     *
-     * If a tensor operand's dimensions are not fully specified, the
-     * dimensions of the operand are deduced from the operand
-     * dimensions and values of the operation for which that operand
-     * is an output.
-     *
-     * In the following situations, a tensor operand's dimensions must
-     * be fully specified:
-     *
-     *     . The operand has lifetime CONSTANT_COPY or
-     *       CONSTANT_REFERENCE.
-     *
-     *     . The operand has lifetime MODEL_INPUT. Fully
-     *       specified dimensions must either be present in the
-     *       Operand or they must be provided in the corresponding
-     *       RequestArgument.
-     *       EXCEPTION: If the input is optional and omitted
-     *       (by setting the hasNoValue field of the corresponding
-     *       RequestArgument to true) then it need not have fully
-     *       specified dimensions.
-     *
-     * A tensor operand with some number of unspecified dimensions is
-     * represented by setting each unspecified dimension to 0.
-     *
-     * A tensor operand with unspecified rank is represented by providing
-     * an empty dimensions vector.
-     */
-    vec<uint32_t> dimensions;
-
-    /**
-     * The number of times this operand appears as an operation input.
-     *
-     * (For example, if this operand appears once in one operation's
-     * input list, and three times in another operation's input list,
-     * then numberOfConsumers = 4.)
-     */
-    uint32_t numberOfConsumers;
-
-    /**
-     * Quantized scale of the operand.
-     *
-     * Only applicable if the operand is of type TENSOR_QUANT8_ASYMM or
-     * TENSOR_INT32.
-     */
-    float scale;
-
-    /**
-     * Quantized zero-point offset of the operand.
-     *
-     * Only applicable if the operand is of type TENSOR_QUANT8_ASYMM.
-     */
-    int32_t zeroPoint;
-
-    /**
-     * How the operand is used.
-     */
-    OperandLifeTime lifetime;
-
-    /**
-     * Where to find the data for this operand.
-     * If the lifetime is TEMPORARY_VARIABLE, MODEL_INPUT, MODEL_OUTPUT, or
-     * NO_VALUE:
-     * - All the fields must be 0.
-     * If the lifetime is CONSTANT_COPY:
-     * - location.poolIndex is 0.
-     * - location.offset is the offset in bytes into Model.operandValues.
-     * - location.length is set.
-     * If the lifetime is CONSTANT_REFERENCE:
-     * - location.poolIndex is set.
-     * - location.offset is the offset in bytes into the specified pool.
-     * - location.length is set.
-     */
-    DataLocation location;
-
-    /**
-     * Additional parameters specific to a particular operand type.
-     */
-    safe_union ExtraParams {
-       /**
-        * No additional parameters.
-        */
-       Monostate none;
-
-       /**
-        * Symmetric per-channel quantization parameters.
-        *
-        * Only applicable to operands of type TENSOR_QUANT8_SYMM_PER_CHANNEL.
-        */
-       SymmPerChannelQuantParams channelQuant;
-
-       /**
-        * Extension operand parameters.
-        *
-        * The framework treats this as an opaque data blob.
-        * The format is up to individual extensions.
-        */
-       vec<uint8_t> extension;
-    } extraParams;
-};
-
-/**
- * Describes one operation of the model's graph.
- */
-struct Operation {
-    /**
-     * The operation type.
-     */
-    OperationType type;
-
-    /**
-     * Describes the table that contains the indexes of the inputs of the
-     * operation. The offset is the index in the operandIndexes table.
-     */
-    vec<uint32_t> inputs;
-
-    /**
-     * Describes the table that contains the indexes of the outputs of the
-     * operation. The offset is the index in the operandIndexes table.
-     */
-    vec<uint32_t> outputs;
-};
-
-/**
- * A Neural Network Model.
- *
- * This includes not only the execution graph, but also constant data such as
- * weights or scalars added at construction time. The only information that
- * may not be known is the shape of the input tensors.
- */
-struct Model {
-    /**
-     * All operands included in the model.
-     */
-    vec<Operand> operands;
-
-    /**
-     * All operations included in the model.
-     *
-     * The operations are sorted into execution order. Every operand
-     * with lifetime MODEL_OUTPUT or TEMPORARY_VARIABLE must be
-     * written before it is read.
-     */
-    vec<Operation> operations;
-
-    /**
-     * Input indexes of the model. There must be at least one.
-     *
-     * Each value corresponds to the index of the operand in "operands".
-     */
-    vec<uint32_t> inputIndexes;
-
-    /**
-     * Output indexes of the model. There must be at least one.
-     *
-     * Each value corresponds to the index of the operand in "operands".
-     */
-    vec<uint32_t> outputIndexes;
-
-    /**
-     * A byte buffer containing operand data that were copied into the model.
-     *
-     * An operand's value must be located here if and only if Operand::lifetime
-     * equals OperandLifeTime::CONSTANT_COPY.
-     */
-    vec<uint8_t> operandValues;
-
-    /**
-     * A collection of shared memory pools containing operand values.
-     *
-     * An operand's value must be located here if and only if Operand::lifetime
-     * equals OperandLifeTime::CONSTANT_REFERENCE.
-     */
-    vec<memory> pools;
-
-    /**
-     * 'true' indicates TENSOR_FLOAT32 may be calculated with range and/or
-     * precision as low as that of the IEEE 754 16-bit floating-point format.
-     * 'false' indicates TENSOR_FLOAT32 must be calculated using at least the
-     * range and precision of the IEEE 754 32-bit floating-point format.
-     */
-    bool relaxComputationFloat32toFloat16;
-
-    /**
-     * The mapping between extension names and prefixes of operand and
-     * operation type values.
-     *
-     * An operand or operation whose numeric type value is above
-     * {@link OperandTypeRange::BASE_MAX} or
-     * {@link OperationTypeRange::BASE_MAX} respectively should be interpreted
-     * as an extension operand. The low
-     * {@link Model::ExtensionTypeEncoding::LOW_BITS_TYPE} bits of the value
-     * correspond to the type ID within the extension and the high
-     * {@link Model::ExtensionTypeEncoding::HIGH_BITS_PREFIX} bits encode
-     * the "prefix", which maps uniquely to the extension name.
-     *
-     * For example, if a model contains an operation whose value is
-     * 0xAAAABBBB and extensionNameToPrefix contains an entry with
-     * prefix=0xAAAA and name="vendor.test.test_extension", then
-     * the operation should be interpreted as the operation 0xBBBB
-     * of the extension named vendor.test.test_extension.
-     *
-     * This is a one-to-one correspondence. That is, there must be at most one
-     * prefix corresponding to each extension name and at most one extension
-     * name corresponding to each prefix.
-     */
-    vec<ExtensionNameAndPrefix> extensionNameToPrefix;
-
-    /**
-     * A correspondence between an extension name and a prefix of operand and
-     * operation type values.
-     */
-    struct ExtensionNameAndPrefix {
-        /**
-         * The extension name.
-         *
-         * See {@link Extension::name} for the format specification.
-         */
-        string name;
-
-        /**
-         * The unique extension identifier within the model.
-         *
-         * See {@link Model::extensionNameToPrefix}.
-         */
-        uint16_t prefix;
-    };
-
-    /**
-     * Numeric values of extension operand and operation types have the
-     * following structure:
-     * - 16 high bits represent the "prefix", which corresponds uniquely to the
-     *   extension name.
-     * - 16 low bits represent the type ID within the extension.
-     */
-    enum ExtensionTypeEncoding : uint8_t {
-        HIGH_BITS_PREFIX = 16,
-        LOW_BITS_TYPE = 16,
-    };
-};