diff --git a/current.txt b/current.txt index ba86bb655e..e88af0a1d2 100644 --- a/current.txt +++ b/current.txt @@ -676,7 +676,7 @@ a3eddd9bbdc87e8c22764070037dd1154f1cf006e6fba93364c4f85d4c134a19 android.hardwar 2fa3679ad7c94b5e88724adcd560c561041068a4ca565c63830e68101988746a android.hardware.neuralnetworks@1.3::IFencedExecutionCallback 237b23b126a66f3432658020fed78cdd06ba6297459436fe6bae0ba753370833 android.hardware.neuralnetworks@1.3::IPreparedModel 0439a1fbbec7f16e5e4c653d85ac685d51bfafbae15b8f8cca530acdd7d6a8ce android.hardware.neuralnetworks@1.3::IPreparedModelCallback -2fabd246f985d94a0172dacefb0d6cf19e2aeb2d5f17752653988ef39570a52d android.hardware.neuralnetworks@1.3::types +5e2a14b40dc11da9d478185838f4401b652739922d14cecea0a0ce4c1359fe21 android.hardware.neuralnetworks@1.3::types 3e01d4446cd69fd1c48f8572efd97487bc179564b32bd795800b97bbe10be37b android.hardware.wifi@1.4::IWifi c67aaf26a7a40d14ea61e70e20afacbd0bb906df1704d585ac8599fbb69dd44b android.hardware.wifi.hostapd@1.2::IHostapd 2b5a7ea572b736030c64a3b4043af244425477c4672301780fe15aba5ed393d9 android.hardware.wifi.hostapd@1.2::types diff --git a/neuralnetworks/1.3/types.hal b/neuralnetworks/1.3/types.hal index 530f9849fa..8ee867c676 100644 --- a/neuralnetworks/1.3/types.hal +++ b/neuralnetworks/1.3/types.hal @@ -5176,8 +5176,10 @@ enum Priority : int32_t { /** * 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. + * This represents performance of non-extension operations. + * + * Performance of an operation other than {@link OperationType::IF} and + * {@link OperationType::WHILE} comes from the type of its first operand. */ struct Capabilities { /** @@ -5200,11 +5202,32 @@ struct Capabilities { /** * Performance by operand type. Must be sorted by OperandType. - * If a particular OperandType is not present in operandPerformance, + * + * If a particular {@link OperandType} is not present in operandPerformance, * its performance is treated as * { .execTime = FLT_MAX, .powerUsage = FLT_MAX }. + * + * Performance does not apply to {@link OperandType::SUBGRAPH}, and a driver + * must not report operand performance for {@link OperandType::SUBGRAPH}. */ vec operandPerformance; + + /** + * Performance of an {@link OperationType::IF} operation is the sum of + * {@link Capabilities::ifPerformance} and the mean of performance for the + * two branch subgraphs, where performance for a subgraph is the sum of the + * performance of all operations within the subgraph. + */ + PerformanceInfo ifPerformance; + + /** + * Performance of a {@link OperationType::WHILE} operation is the sum of + * {@link Capabilities::whilePerformance}, performance for the condition + * subgraph and performance for the body subgraph, where performance for a + * subgraph is the sum of the performance of all operations within the + * subgraph. + */ + PerformanceInfo whilePerformance; }; /** diff --git a/neuralnetworks/1.3/types.t b/neuralnetworks/1.3/types.t index 3d0d02df46..c663a60dee 100644 --- a/neuralnetworks/1.3/types.t +++ b/neuralnetworks/1.3/types.t @@ -103,8 +103,10 @@ enum Priority : int32_t { /** * 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. + * This represents performance of non-extension operations. + * + * Performance of an operation other than {@link OperationType::IF} and + * {@link OperationType::WHILE} comes from the type of its first operand. */ struct Capabilities { /** @@ -127,11 +129,32 @@ struct Capabilities { /** * Performance by operand type. Must be sorted by OperandType. - * If a particular OperandType is not present in operandPerformance, + * + * If a particular {@link OperandType} is not present in operandPerformance, * its performance is treated as * { .execTime = FLT_MAX, .powerUsage = FLT_MAX }. + * + * Performance does not apply to {@link OperandType::SUBGRAPH}, and a driver + * must not report operand performance for {@link OperandType::SUBGRAPH}. */ vec operandPerformance; + + /** + * Performance of an {@link OperationType::IF} operation is the sum of + * {@link Capabilities::ifPerformance} and the mean of performance for the + * two branch subgraphs, where performance for a subgraph is the sum of the + * performance of all operations within the subgraph. + */ + PerformanceInfo ifPerformance; + + /** + * Performance of a {@link OperationType::WHILE} operation is the sum of + * {@link Capabilities::whilePerformance}, performance for the condition + * subgraph and performance for the body subgraph, where performance for a + * subgraph is the sum of the performance of all operations within the + * subgraph. + */ + PerformanceInfo whilePerformance; }; /** diff --git a/neuralnetworks/1.3/vts/functional/BasicTests.cpp b/neuralnetworks/1.3/vts/functional/BasicTests.cpp index 891850cfa4..1c2536983e 100644 --- a/neuralnetworks/1.3/vts/functional/BasicTests.cpp +++ b/neuralnetworks/1.3/vts/functional/BasicTests.cpp @@ -57,6 +57,11 @@ TEST_P(NeuralnetworksHidlTest, GetCapabilitiesTest) { [](const OperandPerformance& a, const OperandPerformance& b) { return a.type < b.type; })); + EXPECT_TRUE(std::all_of(opPerf.begin(), opPerf.end(), [](const OperandPerformance& a) { + return a.type != OperandType::SUBGRAPH; + })); + EXPECT_TRUE(isPositive(capabilities.ifPerformance)); + EXPECT_TRUE(isPositive(capabilities.whilePerformance)); }); EXPECT_TRUE(ret.isOk()); }