From 2812484ffa1d0ef8f9456d297d05202bea3dac38 Mon Sep 17 00:00:00 2001 From: Colm Donelan Date: Tue, 1 Aug 2023 14:57:25 +0100 Subject: Fixing ambiguous method name in BackendHelper. !android-nn-driver:10035 * Two of the 4 HasCapability methods in BackendHelper were checking the value of the capability not just the existence of the capability. Signed-off-by: Colm Donelan Change-Id: I63bc1671dfb088a947de70a21c86d2502f92f008 --- include/armnn/BackendHelper.hpp | 8 ++++++++ src/armnn/BackendHelper.cpp | 14 ++++++++++++-- src/armnn/LoadedNetwork.cpp | 13 ++++++++----- src/armnn/Runtime.cpp | 4 ++-- src/armnn/test/OptimizerTests.cpp | 4 ++-- src/backends/backendsCommon/test/CompatibilityTests.cpp | 14 +++++++------- 6 files changed, 39 insertions(+), 18 deletions(-) diff --git a/include/armnn/BackendHelper.hpp b/include/armnn/BackendHelper.hpp index b550f9f68e..59cbbfced3 100644 --- a/include/armnn/BackendHelper.hpp +++ b/include/armnn/BackendHelper.hpp @@ -466,11 +466,19 @@ bool HasCapability(const std::string& name,const BackendCapabilities& capabiliti bool HasCapability(const std::string& name, const armnn::BackendId& backend); /// Convenience function to check if a given capability matches a capability in a BackendCapabilities struct +ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use HasMatchingCapability instead.", "24.05") bool HasCapability(const BackendOptions::BackendOption& capability, const BackendCapabilities& capabilities); /// Convenience function to check if a given capability matches a capability in a backend +ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use HasMatchingCapability instead.", "24.05") bool HasCapability(const BackendOptions::BackendOption& backendOption, const armnn::BackendId& backend); +/// Convenience function to check if a given capability matches a capability in a BackendCapabilities struct +bool HasMatchingCapability(const BackendOptions::BackendOption& capability, const BackendCapabilities& capabilities); + +/// Convenience function to check if a given capability matches a capability in a backend +bool HasMatchingCapability(const BackendOptions::BackendOption& backendOption, const armnn::BackendId& backend); + /// Returns a BackendCapability if the backend lists the capability /// The BackendCapability must then be inspected to check whether or not that BackendCapability is supported /// Otherwise returns an EmptyOptional if the BackendCapability is unlisted diff --git a/src/armnn/BackendHelper.cpp b/src/armnn/BackendHelper.cpp index 0a55a08087..f025193006 100644 --- a/src/armnn/BackendHelper.cpp +++ b/src/armnn/BackendHelper.cpp @@ -73,6 +73,16 @@ bool HasCapability(const std::string& name, const armnn::BackendId& backend) } bool HasCapability(const BackendOptions::BackendOption& capability, const BackendCapabilities& capabilities) +{ + return HasMatchingCapability(capability, capabilities); +} + +bool HasCapability(const BackendOptions::BackendOption& backendOption, const armnn::BackendId& backend) +{ + return HasMatchingCapability(backendOption, backend); +} + +bool HasMatchingCapability(const BackendOptions::BackendOption& capability, const BackendCapabilities& capabilities) { for (size_t i=0; i < capabilities.GetOptionCount(); i++) { @@ -104,7 +114,7 @@ bool HasCapability(const BackendOptions::BackendOption& capability, const Backen return false; } -bool HasCapability(const BackendOptions::BackendOption& backendOption, const armnn::BackendId& backend) +bool HasMatchingCapability(const BackendOptions::BackendOption& backendOption, const armnn::BackendId& backend) { auto const& backendRegistry = armnn::BackendRegistryInstance(); if (backendRegistry.IsBackendRegistered(backend)) @@ -112,7 +122,7 @@ bool HasCapability(const BackendOptions::BackendOption& backendOption, const arm auto factoryFunc = backendRegistry.GetFactory(backend); auto backendObject = factoryFunc(); auto capabilities = backendObject->GetCapabilities(); - return HasCapability(backendOption, capabilities); + return HasMatchingCapability(backendOption, capabilities); } return false; } diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp index 3d84054b69..7150261ddd 100644 --- a/src/armnn/LoadedNetwork.cpp +++ b/src/armnn/LoadedNetwork.cpp @@ -255,14 +255,15 @@ LoadedNetwork::LoadedNetwork(std::unique_ptr net, // If we're doing async execution verify that the backend supports it and ExternallyManagedMemory. if (networkProperties.m_AsyncEnabled) { - if (!HasCapability(BackendOptions::BackendOption{"AsyncExecution", true}, backend->GetCapabilities())) + if (!HasMatchingCapability(BackendOptions::BackendOption{"AsyncExecution", true}, + backend->GetCapabilities())) { std::string er = backend->GetId(); er += " does not support AsyncExecution"; throw BackendCapabilityException(er); } - if (!HasCapability(BackendOptions::BackendOption{"ExternallyManagedMemory", true}, - backend->GetCapabilities())) + if (!HasMatchingCapability(BackendOptions::BackendOption{"ExternallyManagedMemory", true}, + backend->GetCapabilities())) { std::string er = backend->GetId(); er += " does not support ExternallyManagedMemory\n"; @@ -1508,7 +1509,8 @@ std::vector LoadedNetwork::ImportInputs(const InputTensors& inp } auto& backend = m_Backends.at(layer->GetBackendId()); - if (!HasCapability(BackendOptions::BackendOption{"PreImportIOTensors", true}, backend->GetCapabilities())) + if (!HasMatchingCapability(BackendOptions::BackendOption{"PreImportIOTensors", true}, + backend->GetCapabilities())) { std::string er = backend->GetId(); er += " does not have PreImportIOTensors capability"; @@ -1641,7 +1643,8 @@ std::vector LoadedNetwork::ImportOutputs(const OutputTensors& } auto& backend = m_Backends.at(layer->GetBackendId()); - if (!HasCapability(BackendOptions::BackendOption{"PreImportIOTensors", true}, backend->GetCapabilities())) + if (!HasMatchingCapability(BackendOptions::BackendOption{"PreImportIOTensors", true}, + backend->GetCapabilities())) { std::string er = backend->GetId(); er += " does not have PreImportIOTensors capability"; diff --git a/src/armnn/Runtime.cpp b/src/armnn/Runtime.cpp index f71fad1f35..b0fc55010d 100644 --- a/src/armnn/Runtime.cpp +++ b/src/armnn/Runtime.cpp @@ -371,7 +371,7 @@ RuntimeImpl::RuntimeImpl(const IRuntime::CreationOptions& options) // check if backend supports ProtectedMode using BackendCapability = BackendOptions::BackendOption; BackendCapability protectedContentCapability {"ProtectedContentAllocation", true}; - if (!HasCapability(protectedContentCapability, id)) + if (!HasMatchingCapability(protectedContentCapability, id)) { // Protected Content Allocation is not supported by the backend // backend should not be registered @@ -480,7 +480,7 @@ RuntimeImpl::RuntimeImpl(const IRuntime::CreationOptions& options) using BackendCapability = BackendOptions::BackendOption; auto strategyType = GetMemBlockStrategyTypeName(strategy->GetMemBlockStrategyType()); BackendCapability memOptimizeStrategyCapability {strategyType, true}; - if (HasCapability(memOptimizeStrategyCapability, id)) + if (HasMatchingCapability(memOptimizeStrategyCapability, id)) { BackendRegistryInstance().RegisterMemoryOptimizerStrategy(id, strategy); diff --git a/src/armnn/test/OptimizerTests.cpp b/src/armnn/test/OptimizerTests.cpp index f83900404b..de077c19f0 100644 --- a/src/armnn/test/OptimizerTests.cpp +++ b/src/armnn/test/OptimizerTests.cpp @@ -1,5 +1,5 @@ // -// Copyright © 2017,2022 Arm Ltd and Contributors. All rights reserved. +// Copyright © 2017,2022-2023 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // @@ -724,7 +724,7 @@ TEST_CASE("BackendCapabilityTest") armnn::BackendOptions::BackendOption nonConstWeights{"NonConstWeights", true}; // MockBackend does not support the NonConstWeights capability - CHECK(!armnn::HasCapability(nonConstWeights, backendId)); + CHECK(!armnn::HasMatchingCapability(nonConstWeights, backendId)); CHECK(!armnn::HasCapability("NonConstWeights", backendId)); // MockBackend does not support the AsyncExecution capability diff --git a/src/backends/backendsCommon/test/CompatibilityTests.cpp b/src/backends/backendsCommon/test/CompatibilityTests.cpp index a0e5a1e402..2be99498bb 100644 --- a/src/backends/backendsCommon/test/CompatibilityTests.cpp +++ b/src/backends/backendsCommon/test/CompatibilityTests.cpp @@ -139,8 +139,8 @@ void CapabilityTestHelper(BackendCapabilities &capabilities, { CHECK_MESSAGE(armnn::HasCapability(pair.first, capabilities), pair.first << " capability was not been found"); - CHECK_MESSAGE(armnn::HasCapability(BackendOptions::BackendOption{pair.first, pair.second}, capabilities), - pair.first << " capability set incorrectly"); + CHECK_MESSAGE(armnn::HasMatchingCapability(BackendOptions::BackendOption{pair.first, pair.second}, + capabilities), pair.first << " capability set incorrectly"); } } #endif @@ -153,20 +153,20 @@ TEST_CASE("Ref_Backends_Unknown_Capability_Test") auto refCapabilities = refBackend->GetCapabilities(); armnn::BackendOptions::BackendOption AsyncExecutionFalse{"AsyncExecution", false}; - CHECK(!armnn::HasCapability(AsyncExecutionFalse, refCapabilities)); + CHECK(!armnn::HasMatchingCapability(AsyncExecutionFalse, refCapabilities)); armnn::BackendOptions::BackendOption AsyncExecutionInt{"AsyncExecution", 50}; - CHECK(!armnn::HasCapability(AsyncExecutionFalse, refCapabilities)); + CHECK(!armnn::HasMatchingCapability(AsyncExecutionFalse, refCapabilities)); armnn::BackendOptions::BackendOption AsyncExecutionFloat{"AsyncExecution", 0.0f}; - CHECK(!armnn::HasCapability(AsyncExecutionFloat, refCapabilities)); + CHECK(!armnn::HasMatchingCapability(AsyncExecutionFloat, refCapabilities)); armnn::BackendOptions::BackendOption AsyncExecutionString{"AsyncExecution", "true"}; - CHECK(!armnn::HasCapability(AsyncExecutionString, refCapabilities)); + CHECK(!armnn::HasMatchingCapability(AsyncExecutionString, refCapabilities)); CHECK(!armnn::HasCapability("Telekinesis", refCapabilities)); armnn::BackendOptions::BackendOption unknownCapability{"Telekinesis", true}; - CHECK(!armnn::HasCapability(unknownCapability, refCapabilities)); + CHECK(!armnn::HasMatchingCapability(unknownCapability, refCapabilities)); } TEST_CASE ("Ref_Backends_Capability_Test") -- cgit v1.2.1