From 895339092fa9edc0aa59de0309f79bebacc3fa63 Mon Sep 17 00:00:00 2001 From: Matteo Martincigh Date: Thu, 15 Aug 2019 12:08:06 +0100 Subject: IVGCVSW-3545 Update the device specs with the dynamic backend ids * Now the utility function RegisterDynamicBackends returns a list of the backend ids that have been registered * The list of registered ids is added to the list of supported backends in the Runtime * Added unit tests Change-Id: I97bbe1f680920358f5baba5a4666e4983b849cac Signed-off-by: Matteo Martincigh --- .../backendsCommon/DynamicBackendUtils.cpp | 30 +++++++++++++++++----- 1 file changed, 24 insertions(+), 6 deletions(-) (limited to 'src/backends/backendsCommon/DynamicBackendUtils.cpp') diff --git a/src/backends/backendsCommon/DynamicBackendUtils.cpp b/src/backends/backendsCommon/DynamicBackendUtils.cpp index fadec0c389..fc4336f4ac 100644 --- a/src/backends/backendsCommon/DynamicBackendUtils.cpp +++ b/src/backends/backendsCommon/DynamicBackendUtils.cpp @@ -299,21 +299,25 @@ std::vector DynamicBackendUtils::CreateDynamicBackends(const return dynamicBackends; } -void DynamicBackendUtils::RegisterDynamicBackends(const std::vector& dynamicBackends) +BackendIdSet DynamicBackendUtils::RegisterDynamicBackends(const std::vector& dynamicBackends) { // Get a reference of the backend registry BackendRegistry& backendRegistry = BackendRegistryInstance(); - // Register the dynamic backends in the backend registry - RegisterDynamicBackendsImpl(backendRegistry, dynamicBackends); + // Register the dynamic backends in the backend registry, and return a list of registered backend ids + return RegisterDynamicBackendsImpl(backendRegistry, dynamicBackends); } -void DynamicBackendUtils::RegisterDynamicBackendsImpl(BackendRegistry& backendRegistry, - const std::vector& dynamicBackends) +BackendIdSet DynamicBackendUtils::RegisterDynamicBackendsImpl(BackendRegistry& backendRegistry, + const std::vector& dynamicBackends) { + // Initialize the list of registered backend ids + BackendIdSet registeredBackendIds; + // Register the dynamic backends in the backend registry for (const DynamicBackendPtr& dynamicBackend : dynamicBackends) { + // Get the id of the dynamic backend BackendId dynamicBackendId; try { @@ -362,8 +366,22 @@ void DynamicBackendUtils::RegisterDynamicBackendsImpl(BackendRegistry& backendRe } // Register the dynamic backend - backendRegistry.Register(dynamicBackendId, dynamicBackendFactoryFunction); + try + { + backendRegistry.Register(dynamicBackendId, dynamicBackendFactoryFunction); + } + catch (const InvalidArgumentException& e) + { + BOOST_LOG_TRIVIAL(warning) << "An error has occurred when registering the dynamic backend \"" + << dynamicBackendId << "\": " << e.what(); + continue; + } + + // Add the id of the dynamic backend just registered to the list of registered backend ids + registeredBackendIds.insert(dynamicBackendId); } + + return registeredBackendIds; } } // namespace armnn -- cgit v1.2.1