From 1c52a3863b0bdc9b474a7bc6caf8428ca0dec91a Mon Sep 17 00:00:00 2001 From: Narumol Prangnawarat Date: Thu, 13 Jan 2022 11:47:35 +0000 Subject: IVGCVSW-6676 Register CopyAndImportFactoryPairs to RefBackend and unit tests Signed-off-by: Narumol Prangnawarat Change-Id: I9d695418fe240b7115a1c624abcd459f1459301b --- src/armnn/test/TensorHandleStrategyTest.cpp | 2 +- src/backends/reference/RefBackend.cpp | 15 ++++++++-- src/backends/reference/backend.mk | 1 + src/backends/reference/test/CMakeLists.txt | 1 + src/backends/reference/test/RefBackendTests.cpp | 38 +++++++++++++++++++++++++ 5 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 src/backends/reference/test/RefBackendTests.cpp diff --git a/src/armnn/test/TensorHandleStrategyTest.cpp b/src/armnn/test/TensorHandleStrategyTest.cpp index 374479b941..c591fffa43 100644 --- a/src/armnn/test/TensorHandleStrategyTest.cpp +++ b/src/armnn/test/TensorHandleStrategyTest.cpp @@ -402,7 +402,7 @@ TEST_CASE("RegisterCopyAndImportFactoryPairTest") // Get mathing import factory id correctly CHECK((registry.GetMatchingImportFactoryId(copyId) == importId)); - // Return empty id when Invailid Id is given + // Return empty id when Invalid Id is given CHECK((registry.GetMatchingImportFactoryId("InvalidFactoryId") == "")); } diff --git a/src/backends/reference/RefBackend.cpp b/src/backends/reference/RefBackend.cpp index ad52434ef8..c38d6b6710 100644 --- a/src/backends/reference/RefBackend.cpp +++ b/src/backends/reference/RefBackend.cpp @@ -38,7 +38,12 @@ IBackendInternal::IWorkloadFactoryPtr RefBackend::CreateWorkloadFactory( auto memoryManager = std::make_shared(); tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager); - tensorHandleFactoryRegistry.RegisterFactory(std::make_unique(memoryManager)); + + std::unique_ptr factory = std::make_unique(memoryManager); + // Register copy and import factory pair + tensorHandleFactoryRegistry.RegisterCopyAndImportFactoryPair(factory->GetId(), factory->GetId()); + // Register the factory + tensorHandleFactoryRegistry.RegisterFactory(std::move(factory)); return std::make_unique(PolymorphicPointerDowncast(memoryManager)); } @@ -84,7 +89,13 @@ void RefBackend::RegisterTensorHandleFactories(class TensorHandleFactoryRegistry auto memoryManager = std::make_shared(); registry.RegisterMemoryManager(memoryManager); - registry.RegisterFactory(std::make_unique(memoryManager)); + + std::unique_ptr factory = std::make_unique(memoryManager); + + // Register copy and import factory pair + registry.RegisterCopyAndImportFactoryPair(factory->GetId(), factory->GetId()); + // Register the factory + registry.RegisterFactory(std::move(factory)); } std::unique_ptr RefBackend::GetDefaultAllocator() const diff --git a/src/backends/reference/backend.mk b/src/backends/reference/backend.mk index 0ddb16a23b..33e161c6d8 100644 --- a/src/backends/reference/backend.mk +++ b/src/backends/reference/backend.mk @@ -133,6 +133,7 @@ ifeq ($(ARMNN_REF_ENABLED),1) BACKEND_TEST_SOURCES := \ test/ArgMinMaxTests.cpp \ + test/RefBackendTests.cpp \ test/RefCreateWorkloadTests.cpp \ test/RefDetectionPostProcessTests.cpp \ test/RefEndToEndTests.cpp \ diff --git a/src/backends/reference/test/CMakeLists.txt b/src/backends/reference/test/CMakeLists.txt index d5ce3553f1..9d6572a4af 100644 --- a/src/backends/reference/test/CMakeLists.txt +++ b/src/backends/reference/test/CMakeLists.txt @@ -5,6 +5,7 @@ list(APPEND armnnRefBackendUnitTests_sources ArgMinMaxTests.cpp + RefBackendTests.cpp RefCreateWorkloadTests.cpp RefDetectionPostProcessTests.cpp RefEndToEndTests.cpp diff --git a/src/backends/reference/test/RefBackendTests.cpp b/src/backends/reference/test/RefBackendTests.cpp new file mode 100644 index 0000000000..5154ea4c8f --- /dev/null +++ b/src/backends/reference/test/RefBackendTests.cpp @@ -0,0 +1,38 @@ +// +// Copyright © 2022 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include +#include + +#include + +using namespace armnn; + +TEST_SUITE("RefBackendTests") +{ +TEST_CASE("RefRegisterTensorHandleFactoriesMatchingImportFactoryId") +{ + auto refBackend = std::make_unique(); + TensorHandleFactoryRegistry registry; + refBackend->RegisterTensorHandleFactories(registry); + + // When calling RegisterTensorHandleFactories, CopyAndImportFactoryPair is registered + // Get matching import factory id correctly + CHECK((registry.GetMatchingImportFactoryId(RefTensorHandleFactory::GetIdStatic()) == + RefTensorHandleFactory::GetIdStatic())); +} + +TEST_CASE("RefCreateWorkloadFactoryMatchingImportFactoryId") +{ + auto refBackend = std::make_unique(); + TensorHandleFactoryRegistry registry; + refBackend->CreateWorkloadFactory(registry); + + // When calling CreateWorkloadFactory, CopyAndImportFactoryPair is registered + // Get matching import factory id correctly + CHECK((registry.GetMatchingImportFactoryId(RefTensorHandleFactory::GetIdStatic()) == + RefTensorHandleFactory::GetIdStatic())); +} +} -- cgit v1.2.1