blob: a53f1698c237facf860191904efddb123eab2d18 [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>
Matteo Martincighbc2e2102019-07-24 14:56:13 +01009
10constexpr const char* TestDynamicBackendId()
11{
Matteo Martincighe54aa062019-08-05 14:12:11 +010012#if defined(VALID_TEST_DYNAMIC_BACKEND_1)
Matteo Martincighbc2e2102019-07-24 14:56:13 +010013
14 return "ValidTestDynamicBackend";
15
Matteo Martincighe54aa062019-08-05 14:12:11 +010016#elif defined(VALID_TEST_DYNAMIC_BACKEND_2) || \
17 defined(VALID_TEST_DYNAMIC_BACKEND_4) || \
18 defined(INVALID_TEST_DYNAMIC_BACKEND_9)
19
20 // This backend id is shared among different test dynamic backends for testing purposes:
21 // the test dynamic backend 4 is actually a duplicate of the test dynamic backend 2 (with the same version),
22 // the test dynamic backend 9 is actually a duplicate of the test dynamic backend 2 (but with a version
23 // incompatible with the current Backend API)
24 return "TestValid2";
25
26#elif defined(VALID_TEST_DYNAMIC_BACKEND_3)
27
28 // The test dynamic backend 3 is a different backend than the test dynamic backend 2
29 return "TestValid3";
30
Matteo Martincigh0c2b2892019-08-05 14:12:11 +010031#elif defined(VALID_TEST_DYNAMIC_BACKEND_5)
32
33 // The test dynamic backend 5 is a different backend than the test dynamic backend 2
34 return "TestValid5";
35
36#elif defined(INVALID_TEST_DYNAMIC_BACKEND_10)
37
38 // Empty backend id
39 return "";
40
41#elif defined(INVALID_TEST_DYNAMIC_BACKEND_11)
42
43 // "Unknown" backend id, "Unknown" is a reserved id in ArmNN
44 return "Unknown";
45
Matteo Martincighbc2e2102019-07-24 14:56:13 +010046#else
47
48 return "InvalidTestDynamicBackend";
49
50#endif
51}
52
53class TestDynamicBackend : public armnn::IBackendInternal
54{
55public:
56 TestDynamicBackend()
57 : m_BackendId(TestDynamicBackendId())
58 {}
59
60 const armnn::BackendId& GetId() const override
61 {
62 return m_BackendId;
63 }
64 IWorkloadFactoryPtr CreateWorkloadFactory(const IMemoryManagerSharedPtr& memoryManager) const override
65 {
66 return IWorkloadFactoryPtr{};
67 }
68 ILayerSupportSharedPtr GetLayerSupport() const override
69 {
70 return ILayerSupportSharedPtr{};
71 }
72
73private:
74 armnn::BackendId m_BackendId;
75};
76
77const char* GetBackendId()
78{
Matteo Martincighe54aa062019-08-05 14:12:11 +010079#if defined(INVALID_TEST_DYNAMIC_BACKEND_5) || \
80 defined(INVALID_TEST_DYNAMIC_BACKEND_8)
Matteo Martincighbc2e2102019-07-24 14:56:13 +010081
82 // Return an invalid backend id
83 return nullptr;
84
85#else
86
87 // Return a valid backend id
88 return TestDynamicBackendId();
89
90#endif
91}
92
93void GetVersion(uint32_t* outMajor, uint32_t* outMinor)
94{
95 if (!outMajor || !outMinor)
96 {
97 return;
98 }
99
Matteo Martincighe54aa062019-08-05 14:12:11 +0100100#if defined(INVALID_TEST_DYNAMIC_BACKEND_7) || \
101 defined(INVALID_TEST_DYNAMIC_BACKEND_8)
Matteo Martincighbc2e2102019-07-24 14:56:13 +0100102
103 *outMajor = 0;
104 *outMinor = 7;
105
106#else
107
Matteo Martincighe54aa062019-08-05 14:12:11 +0100108 armnn::BackendVersion apiVersion = armnn::IBackendInternal::GetApiVersion();
109
110 *outMajor = apiVersion.m_Major;
111
112#if defined(INVALID_TEST_DYNAMIC_BACKEND_9)
113
114 *outMinor = apiVersion.m_Minor + 1;
115
116#else
117
118 *outMinor = apiVersion.m_Minor;
119
120#endif
Matteo Martincighbc2e2102019-07-24 14:56:13 +0100121
122#endif
123}
124
125void* BackendFactory()
126{
127#if defined(INVALID_TEST_DYNAMIC_BACKEND_6)
128
129 // Return an invalid backend instance
130 return nullptr;
131
132#else
133
134 // Return a non-null backend instance
135 return new TestDynamicBackend();
136
137#endif
138}