blob: cc8a1361a394cdf3e8889a1e9b2ac381c61b2d4e [file] [log] [blame]
Derek Lamberti84da38b2019-06-13 11:40:08 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
Matteo Martincighe5b8eb92019-11-28 15:45:42 +00006#include <backendsCommon/TensorHandleFactoryRegistry.hpp>
7#include <armnn/backends/IMemoryManager.hpp>
Derek Lamberti84da38b2019-06-13 11:40:08 +01008
9namespace armnn
10{
11
12void TensorHandleFactoryRegistry::RegisterFactory(std::unique_ptr <ITensorHandleFactory> newFactory)
13{
14 if (!newFactory)
15 {
16 return;
17 }
18
19 ITensorHandleFactory::FactoryId id = newFactory->GetId();
20
21 // Don't register duplicates
22 for (auto& registeredFactory : m_Factories)
23 {
24 if (id == registeredFactory->GetId())
25 {
26 return;
27 }
28 }
29
30 // Take ownership of the new allocator
31 m_Factories.push_back(std::move(newFactory));
32}
33
34void TensorHandleFactoryRegistry::RegisterMemoryManager(std::shared_ptr<armnn::IMemoryManager> memoryManger)
35{
36 m_MemoryManagers.push_back(memoryManger);
37}
38
39ITensorHandleFactory* TensorHandleFactoryRegistry::GetFactory(ITensorHandleFactory::FactoryId id) const
40{
41 for (auto& factory : m_Factories)
42 {
43 if (factory->GetId() == id)
44 {
45 return factory.get();
46 }
47 }
48
49 return nullptr;
50}
51
Francis Murtagh73d3e2e2021-04-29 14:23:04 +010052ITensorHandleFactory* TensorHandleFactoryRegistry::GetFactory(ITensorHandleFactory::FactoryId id,
53 MemorySource memSource) const
54{
55 for (auto& factory : m_Factories)
56 {
57 if (factory->GetId() == id && factory->GetImportFlags() == static_cast<MemorySourceFlags>(memSource))
58 {
59 return factory.get();
60 }
61 }
62
63 return nullptr;
64}
65
Derek Lamberti84da38b2019-06-13 11:40:08 +010066void TensorHandleFactoryRegistry::AquireMemory()
67{
68 for (auto& mgr : m_MemoryManagers)
69 {
70 mgr->Acquire();
71 }
72}
73
74void TensorHandleFactoryRegistry::ReleaseMemory()
75{
76 for (auto& mgr : m_MemoryManagers)
77 {
78 mgr->Release();
79 }
80}
81
82} // namespace armnn