xref: /aosp_15_r20/external/armnn/src/backends/backendsCommon/test/TestDynamicBackend.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "TestDynamicBackend.hpp"
7 
8 #include <armnn/backends/IBackendInternal.hpp>
9 #include <armnn/backends/WorkloadFactory.hpp>
10 #include <armnn/utility/IgnoreUnused.hpp>
11 
TestDynamicBackendId()12 constexpr const char* TestDynamicBackendId()
13 {
14 #if defined(VALID_TEST_DYNAMIC_BACKEND_1)
15 
16     return "ValidTestDynamicBackend";
17 
18 #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 
33 #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 
48 #else
49 
50     return "InvalidTestDynamicBackend";
51 
52 #endif
53 }
54 
55 class TestDynamicBackend : public armnn::IBackendInternal
56 {
57 public:
TestDynamicBackend()58     TestDynamicBackend()
59         : m_BackendId(TestDynamicBackendId())
60     {}
61 
GetId() const62     const armnn::BackendId& GetId() const override
63     {
64         return m_BackendId;
65     }
CreateWorkloadFactory(const IMemoryManagerSharedPtr & memoryManager) const66     IWorkloadFactoryPtr CreateWorkloadFactory(const IMemoryManagerSharedPtr& memoryManager) const override
67     {
68         IgnoreUnused(memoryManager);
69         return IWorkloadFactoryPtr{};
70     }
GetLayerSupport() const71     ILayerSupportSharedPtr GetLayerSupport() const override
72     {
73         return ILayerSupportSharedPtr{};
74     }
75 
76 private:
77     armnn::BackendId m_BackendId;
78 };
79 
GetBackendId()80 const char* GetBackendId()
81 {
82 #if defined(INVALID_TEST_DYNAMIC_BACKEND_5) || \
83     defined(INVALID_TEST_DYNAMIC_BACKEND_8)
84 
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 
GetVersion(uint32_t * outMajor,uint32_t * outMinor)96 void GetVersion(uint32_t* outMajor, uint32_t* outMinor)
97 {
98     if (!outMajor || !outMinor)
99     {
100         return;
101     }
102 
103 #if defined(INVALID_TEST_DYNAMIC_BACKEND_7) || \
104     defined(INVALID_TEST_DYNAMIC_BACKEND_8)
105 
106     *outMajor = 0;
107     *outMinor = 7;
108 
109 #else
110 
111     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
124 
125 #endif
126 }
127 
BackendFactory()128 void* 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 }
142