ArmNN
 22.02
MockBackend.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6 
10 
11 namespace armnn
12 {
13 
14 // A bare bones Mock backend to enable unit testing of simple tensor manipulation features.
16 {
17 public:
18  MockBackend() = default;
19 
20  ~MockBackend() = default;
21 
22  static const BackendId& GetIdStatic();
23 
24  const BackendId& GetId() const override
25  {
26  return GetIdStatic();
27  }
29  CreateWorkloadFactory(const IBackendInternal::IMemoryManagerSharedPtr& memoryManager = nullptr) const override
30  {
31  IgnoreUnused(memoryManager);
32  return nullptr;
33  }
34 
36  {
37  return nullptr;
38  };
39 };
40 
42 {
43 
44 public:
45  explicit MockWorkloadFactory(const std::shared_ptr<MockMemoryManager>& memoryManager);
47 
49  {}
50 
51  const BackendId& GetBackendId() const override;
52 
53  bool SupportsSubTensors() const override
54  {
55  return false;
56  }
57 
58  ARMNN_DEPRECATED_MSG("Use ITensorHandleFactory::CreateSubTensorHandle instead")
59  std::unique_ptr<ITensorHandle> CreateSubTensorHandle(ITensorHandle&,
60  TensorShape const&,
61  unsigned int const*) const override
62  {
63  return nullptr;
64  }
65 
66  ARMNN_DEPRECATED_MSG("Use ITensorHandleFactory::CreateTensorHandle instead")
67  std::unique_ptr<ITensorHandle> CreateTensorHandle(const TensorInfo& tensorInfo,
68  const bool IsMemoryManaged = true) const override
69  {
70  IgnoreUnused(IsMemoryManaged);
71  return std::make_unique<MockTensorHandle>(tensorInfo, m_MemoryManager);
72  };
73 
74  ARMNN_DEPRECATED_MSG("Use ITensorHandleFactory::CreateTensorHandle instead")
75  std::unique_ptr<ITensorHandle> CreateTensorHandle(const TensorInfo& tensorInfo,
76  DataLayout dataLayout,
77  const bool IsMemoryManaged = true) const override
78  {
79  IgnoreUnused(dataLayout, IsMemoryManaged);
80  return std::make_unique<MockTensorHandle>(tensorInfo, static_cast<unsigned int>(MemorySource::Malloc));
81  };
82 
84  "Use ABI stable "
85  "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.",
86  "22.11")
87  std::unique_ptr<IWorkload> CreateInput(const InputQueueDescriptor& descriptor,
88  const WorkloadInfo& info) const override
89  {
90  if (info.m_InputTensorInfos.empty())
91  {
92  throw InvalidArgumentException("MockWorkloadFactory::CreateInput: Input cannot be zero length");
93  }
94  if (info.m_OutputTensorInfos.empty())
95  {
96  throw InvalidArgumentException("MockWorkloadFactory::CreateInput: Output cannot be zero length");
97  }
98 
99  if (info.m_InputTensorInfos[0].GetNumBytes() != info.m_OutputTensorInfos[0].GetNumBytes())
100  {
102  "MockWorkloadFactory::CreateInput: data input and output differ in byte count.");
103  }
104 
105  return std::make_unique<CopyMemGenericWorkload>(descriptor, info);
106  };
107 
108  std::unique_ptr<IWorkload>
109  CreateWorkload(LayerType type, const QueueDescriptor& descriptor, const WorkloadInfo& info) const override;
110 
111 private:
112  mutable std::shared_ptr<MockMemoryManager> m_MemoryManager;
113 };
114 
115 } // namespace armnn
ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "22.11") std std::unique_ptr< IWorkload > CreateWorkload(LayerType type, const QueueDescriptor &descriptor, const WorkloadInfo &info) const override
std::unique_ptr< IWorkloadFactory > IWorkloadFactoryPtr
~MockBackend()=default
DataLayout
Definition: Types.hpp:49
IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(const IBackendInternal::IMemoryManagerSharedPtr &memoryManager=nullptr) const override
Definition: MockBackend.hpp:29
IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override
Definition: MockBackend.hpp:35
Copyright (c) 2021 ARM Limited and Contributors.
void IgnoreUnused(Ts &&...)
const BackendId & GetId() const override
Definition: MockBackend.hpp:24
std::vector< TensorInfo > m_InputTensorInfos
const char * GetBackendId()
MockBackend()=default
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
static const BackendId & GetIdStatic()
Definition: MockBackend.cpp:18
ARMNN_NO_DEPRECATE_WARN_BEGIN struct ARMNN_DEPRECATED_MSG_REMOVAL_DATE("ResizeBilinearQueueDescriptor is deprecated use ResizeQueueDescriptor instead", "22.08") ResizeBilinearQueueDescriptor
std::vector< TensorInfo > m_OutputTensorInfos
std::shared_ptr< ILayerSupport > ILayerSupportSharedPtr
Contains information about TensorInfos of a layer.
#define ARMNN_DEPRECATED_MSG(message)
Definition: Deprecated.hpp:43
bool SupportsSubTensors() const override
Definition: MockBackend.hpp:53
LayerType
When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below...
Definition: Types.hpp:458