Add Quality of Service to the NNAPI

This CL introduces new enumerations and functions to enable
prioritization and task deadlines in the NNAPI. This CL does not
implement the new functions; instead, this is done in a
subsequent CL in this topic.

New ResultCodes values:
* ANEURALNETWORKS_MISSED_DEADLINE_TRANSIENT
* ANEURALNETWORKS_MISSED_DEADLINE_PERSISTENT
* ANEURALNETWORKS_RESOURCE_EXHAUSTED_TRANSIENT
* ANEURALNETWORKS_RESOURCE_EXHAUSTED_PERSISTENT
* ANEURALNETWORKS_DEAD_OBJECT

New Priority enumeration:
* PriorityCode
* ANEURALNETWORKS_PRIORITY_*

New functions:
* ANeuralNetworksDevice_supportsCompilationTimeout
* ANeuralNetworksDevice_supportsExecutionTimeout
* ANeuralNetworksDevice_wait
* ANeuralNetworksCompilation_setPriority
* ANeuralNetworksCompilation_setTimeout
* ANeuralNetworksExecution_setTimeout

The CTS tests are added in a subsequent CL in this topic
titled "Create CTS tests for QoS in NNAPI".

Bug: 136739795
Bug: 142902514
Bug: 145300530
Test: mma
Change-Id: I39d63aa54b1c6606e5820e0f65c8e9ccb83bae45
Merged-In: I39d63aa54b1c6606e5820e0f65c8e9ccb83bae45
(cherry picked from commit 2f2d89b6ceb901041b8c978c840effe112635ffd)
diff --git a/runtime/NeuralNetworks.cpp b/runtime/NeuralNetworks.cpp
index 8bef344..ad84844 100644
--- a/runtime/NeuralNetworks.cpp
+++ b/runtime/NeuralNetworks.cpp
@@ -217,6 +217,15 @@
               "ANEURALNETWORKS_OUTPUT_INSUFFICIENT_SIZE has changed");
 static_assert(ANEURALNETWORKS_UNAVAILABLE_DEVICE == 9,
               "ANEURALNETWORKS_UNAVAILABLE_DEVICE has changed");
+static_assert(ANEURALNETWORKS_MISSED_DEADLINE_TRANSIENT == 10,
+              "ANEURALNETWORKS_MISSED_DEADLINE_TRANSIENT has changed");
+static_assert(ANEURALNETWORKS_MISSED_DEADLINE_PERSISTENT == 11,
+              "ANEURALNETWORKS_MISSED_DEADLINE_PERSISTENT has changed");
+static_assert(ANEURALNETWORKS_RESOURCE_EXHAUSTED_TRANSIENT == 12,
+              "ANEURALNETWORKS_RESOURCE_EXHAUSTED_TRANSIENT has changed");
+static_assert(ANEURALNETWORKS_RESOURCE_EXHAUSTED_PERSISTENT == 13,
+              "ANEURALNETWORKS_RESOURCE_EXHAUSTED_PERSISTENT has changed");
+static_assert(ANEURALNETWORKS_DEAD_OBJECT == 14, "ANEURALNETWORKS_DEAD_OBJECT has changed");
 
 static_assert(ANEURALNETWORKS_MAX_SIZE_OF_IMMEDIATELY_COPIED_VALUES == 128,
               "ANEURALNETWORKS_MAX_SIZE_OF_IMMEDIATELY_COPIED_VALUES has changed");
@@ -553,6 +562,13 @@
                       ANEURALNETWORKS_BYTE_SIZE_OF_CACHE_TOKEN,
               "Constant::BYTE_SIZE_OF_CACHE_TOKEN != ANEURALNETWORKS_BYTE_SIZE_OF_CACHE_TOKEN");
 
+// Asserts for compilation priority
+static_assert(ANEURALNETWORKS_PRIORITY_LOW == 0, "ANEURALNETWORKS_PRIORITY_LOW has changed");
+static_assert(ANEURALNETWORKS_PRIORITY_MEDIUM == 1, "ANEURALNETWORKS_PRIORITY_MEDIUM has changed");
+static_assert(ANEURALNETWORKS_PRIORITY_HIGH == 2, "ANEURALNETWORKS_PRIORITY_HIGH has changed");
+static_assert(ANEURALNETWORKS_PRIORITY_DEFAULT == ANEURALNETWORKS_PRIORITY_MEDIUM,
+              "ANEURALNETWORKS_PRIORITY_DEFAULT has changed");
+
 using namespace android::nn;
 
 int ANeuralNetworks_getDeviceCount(uint32_t* numDevices) {
@@ -627,6 +643,21 @@
     return ANEURALNETWORKS_NO_ERROR;
 }
 
+bool ANeuralNetworksDevice_supportsCompilationTimeout(const ANeuralNetworksDevice* device) {
+    (void)device;
+    return false;
+}
+
+bool ANeuralNetworksDevice_supportsExecutionTimeout(const ANeuralNetworksDevice* device) {
+    (void)device;
+    return false;
+}
+
+int ANeuralNetworksDevice_wait(const ANeuralNetworksDevice* device) {
+    (void)device;
+    return ANEURALNETWORKS_OP_FAILED;
+}
+
 int ANeuralNetworksModel_getSupportedOperationsForDevices(
         const ANeuralNetworksModel* model, const ANeuralNetworksDevice* const* devices,
         uint32_t numDevices, bool* supportedOps) {
@@ -1131,6 +1162,21 @@
     return c->finish();
 }
 
+int ANeuralNetworksCompilation_setPriority(ANeuralNetworksCompilation* compilation, int priority) {
+    NNTRACE_RT(NNTRACE_PHASE_COMPILATION, "ANeuralNetworksCompilation_setPriority");
+    (void)compilation;
+    (void)priority;
+    return ANEURALNETWORKS_OP_FAILED;
+}
+
+int ANeuralNetworksCompilation_setTimeout(ANeuralNetworksCompilation* compilation,
+                                          uint64_t duration) {
+    NNTRACE_RT(NNTRACE_PHASE_COMPILATION, "ANeuralNetworksCompilation_setTimeout");
+    (void)compilation;
+    (void)duration;
+    return ANEURALNETWORKS_OP_FAILED;
+}
+
 int ANeuralNetworksExecution_create(ANeuralNetworksCompilation* compilation,
                                     ANeuralNetworksExecution** execution) {
     NNTRACE_RT(NNTRACE_PHASE_EXECUTION, "ANeuralNetworksExecution_create");
@@ -1262,6 +1308,13 @@
     return ANEURALNETWORKS_NO_ERROR;
 }
 
+int ANeuralNetworksExecution_setTimeout(ANeuralNetworksExecution* execution, uint64_t duration) {
+    NNTRACE_RT(NNTRACE_PHASE_EXECUTION, "ANeuralNetworksExecution_setTimeout");
+    (void)execution;
+    (void)duration;
+    return ANEURALNETWORKS_OP_FAILED;
+}
+
 int ANeuralNetworksEvent_wait(ANeuralNetworksEvent* event) {
     NNTRACE_RT(NNTRACE_PHASE_EXECUTION, "ANeuralNetworksEvent_wait");
     if (event == nullptr) {