blob: b7c9b4fd885d78a2dd3c38ec53f103dcedd1c5c1 [file] [log] [blame]
Matteo Martincighbc2e2102019-07-24 14:56:13 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "TestDynamicBackend.hpp"
7
Matteo Martincighe5b8eb92019-11-28 15:45:42 +00008#include <armnn/backends/IBackendInternal.hpp>
Matthew Benthamc1c5f2a2023-03-30 14:24:46 +00009#include <armnn/backends/WorkloadFactory.hpp>
Jan Eilers8eb25602020-03-09 12:13:48 +000010#include <armnn/utility/IgnoreUnused.hpp>
Derek Lamberti901ea112019-12-10 22:07:09 +000011
Matteo Martincighbc2e2102019-07-24 14:56:13 +010012constexpr const char* TestDynamicBackendId()
13{
Matteo Martincighe54aa062019-08-05 14:12:11 +010014#if defined(VALID_TEST_DYNAMIC_BACKEND_1)
Matteo Martincighbc2e2102019-07-24 14:56:13 +010015
16 return "ValidTestDynamicBackend";
17
Matteo Martincighe54aa062019-08-05 14:12:11 +010018#elif defined(VALID_TEST_DYNAMIC_BACKEND_2) || \
19 defined(VALID_TEST_DYNAMIC_BACKEND_4) || \
20 defined(INVALID_TEST_DYNAMIC_BACKEND_9)
21
22 // This backend id is shared among different test dynamic backends for testing purposes:
23 // the test dynamic backend 4 is actually a duplicate of the test dynamic backend 2 (with the same version),
24 // the test dynamic backend 9 is actually a duplicate of the test dynamic backend 2 (but with a version
25 // incompatible with the current Backend API)
26 return "TestValid2";
27
28#elif defined(VALID_TEST_DYNAMIC_BACKEND_3)
29
30 // The test dynamic backend 3 is a different backend than the test dynamic backend 2
31 return "TestValid3";
32
Matteo Martincigh0c2b2892019-08-05 14:12:11 +010033#elif defined(VALID_TEST_DYNAMIC_BACKEND_5)
34
35 // The test dynamic backend 5 is a different backend than the test dynamic backend 2
36 return "TestValid5";
37
38#elif defined(INVALID_TEST_DYNAMIC_BACKEND_10)
39
40 // Empty backend id
41 return "";
42
43#elif defined(INVALID_TEST_DYNAMIC_BACKEND_11)
44
45 // "Unknown" backend id, "Unknown" is a reserved id in ArmNN
46 return "Unknown";
47
Matteo Martincighbc2e2102019-07-24 14:56:13 +010048#else
49
50 return "InvalidTestDynamicBackend";
51
52#endif
53}
54
55class TestDynamicBackend : public armnn::IBackendInternal
56{
57public:
58 TestDynamicBackend()
59 : m_BackendId(TestDynamicBackendId())
60 {}
61
62 const armnn::BackendId& GetId() const override
63 {
64 return m_BackendId;
65 }
66 IWorkloadFactoryPtr CreateWorkloadFactory(const IMemoryManagerSharedPtr& memoryManager) const override
67 {
Jan Eilers8eb25602020-03-09 12:13:48 +000068 IgnoreUnused(memoryManager);
Matteo Martincighbc2e2102019-07-24 14:56:13 +010069 return IWorkloadFactoryPtr{};
70 }
71 ILayerSupportSharedPtr GetLayerSupport() const override
72 {
73 return ILayerSupportSharedPtr{};
74 }
75
76private:
77 armnn::BackendId m_BackendId;
78};
79
80const char* GetBackendId()
81{
Matteo Martincighe54aa062019-08-05 14:12:11 +010082#if defined(INVALID_TEST_DYNAMIC_BACKEND_5) || \
83 defined(INVALID_TEST_DYNAMIC_BACKEND_8)
Matteo Martincighbc2e2102019-07-24 14:56:13 +010084
85 // Return an invalid backend id
86 return nullptr;
87
88#else
89
90 // Return a valid backend id
91 return TestDynamicBackendId();
92
93#endif
94}
95
96void GetVersion(uint32_t* outMajor, uint32_t* outMinor)
97{
98 if (!outMajor || !outMinor)
99 {
100 return;
101 }
102
Matteo Martincighe54aa062019-08-05 14:12:11 +0100103#if defined(INVALID_TEST_DYNAMIC_BACKEND_7) || \
104 defined(INVALID_TEST_DYNAMIC_BACKEND_8)
Matteo Martincighbc2e2102019-07-24 14:56:13 +0100105
106 *outMajor = 0;
107 *outMinor = 7;
108
109#else
110
Matteo Martincighe54aa062019-08-05 14:12:11 +0100111 armnn::BackendVersion apiVersion = armnn::IBackendInternal::GetApiVersion();
112
113 *outMajor = apiVersion.m_Major;
114
115#if defined(INVALID_TEST_DYNAMIC_BACKEND_9)
116
117 *outMinor = apiVersion.m_Minor + 1;
118
119#else
120
121 *outMinor = apiVersion.m_Minor;
122
123#endif
Matteo Martincighbc2e2102019-07-24 14:56:13 +0100124
125#endif
126}
127
128void* BackendFactory()
129{
130#if defined(INVALID_TEST_DYNAMIC_BACKEND_6)
131
132 // Return an invalid backend instance
133 return nullptr;
134
135#else
136
137 // Return a non-null backend instance
138 return new TestDynamicBackend();
139
140#endif
141}