xref: /aosp_15_r20/external/armnn/src/backends/backendsCommon/test/TestDynamicBackend.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 Arm Ltd. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker 
6*89c4ff92SAndroid Build Coastguard Worker #include "TestDynamicBackend.hpp"
7*89c4ff92SAndroid Build Coastguard Worker 
8*89c4ff92SAndroid Build Coastguard Worker #include <armnn/backends/IBackendInternal.hpp>
9*89c4ff92SAndroid Build Coastguard Worker #include <armnn/backends/WorkloadFactory.hpp>
10*89c4ff92SAndroid Build Coastguard Worker #include <armnn/utility/IgnoreUnused.hpp>
11*89c4ff92SAndroid Build Coastguard Worker 
TestDynamicBackendId()12*89c4ff92SAndroid Build Coastguard Worker constexpr const char* TestDynamicBackendId()
13*89c4ff92SAndroid Build Coastguard Worker {
14*89c4ff92SAndroid Build Coastguard Worker #if defined(VALID_TEST_DYNAMIC_BACKEND_1)
15*89c4ff92SAndroid Build Coastguard Worker 
16*89c4ff92SAndroid Build Coastguard Worker     return "ValidTestDynamicBackend";
17*89c4ff92SAndroid Build Coastguard Worker 
18*89c4ff92SAndroid Build Coastguard Worker #elif defined(VALID_TEST_DYNAMIC_BACKEND_2) || \
19*89c4ff92SAndroid Build Coastguard Worker       defined(VALID_TEST_DYNAMIC_BACKEND_4) || \
20*89c4ff92SAndroid Build Coastguard Worker       defined(INVALID_TEST_DYNAMIC_BACKEND_9)
21*89c4ff92SAndroid Build Coastguard Worker 
22*89c4ff92SAndroid Build Coastguard Worker     // This backend id is shared among different test dynamic backends for testing purposes:
23*89c4ff92SAndroid Build Coastguard Worker     // the test dynamic backend 4 is actually a duplicate of the test dynamic backend 2 (with the same version),
24*89c4ff92SAndroid Build Coastguard Worker     // the test dynamic backend 9 is actually a duplicate of the test dynamic backend 2 (but with a version
25*89c4ff92SAndroid Build Coastguard Worker     // incompatible with the current Backend API)
26*89c4ff92SAndroid Build Coastguard Worker     return "TestValid2";
27*89c4ff92SAndroid Build Coastguard Worker 
28*89c4ff92SAndroid Build Coastguard Worker #elif defined(VALID_TEST_DYNAMIC_BACKEND_3)
29*89c4ff92SAndroid Build Coastguard Worker 
30*89c4ff92SAndroid Build Coastguard Worker     // The test dynamic backend 3 is a different backend than the test dynamic backend 2
31*89c4ff92SAndroid Build Coastguard Worker     return "TestValid3";
32*89c4ff92SAndroid Build Coastguard Worker 
33*89c4ff92SAndroid Build Coastguard Worker #elif defined(VALID_TEST_DYNAMIC_BACKEND_5)
34*89c4ff92SAndroid Build Coastguard Worker 
35*89c4ff92SAndroid Build Coastguard Worker     // The test dynamic backend 5 is a different backend than the test dynamic backend 2
36*89c4ff92SAndroid Build Coastguard Worker     return "TestValid5";
37*89c4ff92SAndroid Build Coastguard Worker 
38*89c4ff92SAndroid Build Coastguard Worker #elif defined(INVALID_TEST_DYNAMIC_BACKEND_10)
39*89c4ff92SAndroid Build Coastguard Worker 
40*89c4ff92SAndroid Build Coastguard Worker     // Empty backend id
41*89c4ff92SAndroid Build Coastguard Worker     return "";
42*89c4ff92SAndroid Build Coastguard Worker 
43*89c4ff92SAndroid Build Coastguard Worker #elif defined(INVALID_TEST_DYNAMIC_BACKEND_11)
44*89c4ff92SAndroid Build Coastguard Worker 
45*89c4ff92SAndroid Build Coastguard Worker     // "Unknown" backend id, "Unknown" is a reserved id in ArmNN
46*89c4ff92SAndroid Build Coastguard Worker     return "Unknown";
47*89c4ff92SAndroid Build Coastguard Worker 
48*89c4ff92SAndroid Build Coastguard Worker #else
49*89c4ff92SAndroid Build Coastguard Worker 
50*89c4ff92SAndroid Build Coastguard Worker     return "InvalidTestDynamicBackend";
51*89c4ff92SAndroid Build Coastguard Worker 
52*89c4ff92SAndroid Build Coastguard Worker #endif
53*89c4ff92SAndroid Build Coastguard Worker }
54*89c4ff92SAndroid Build Coastguard Worker 
55*89c4ff92SAndroid Build Coastguard Worker class TestDynamicBackend : public armnn::IBackendInternal
56*89c4ff92SAndroid Build Coastguard Worker {
57*89c4ff92SAndroid Build Coastguard Worker public:
TestDynamicBackend()58*89c4ff92SAndroid Build Coastguard Worker     TestDynamicBackend()
59*89c4ff92SAndroid Build Coastguard Worker         : m_BackendId(TestDynamicBackendId())
60*89c4ff92SAndroid Build Coastguard Worker     {}
61*89c4ff92SAndroid Build Coastguard Worker 
GetId() const62*89c4ff92SAndroid Build Coastguard Worker     const armnn::BackendId& GetId() const override
63*89c4ff92SAndroid Build Coastguard Worker     {
64*89c4ff92SAndroid Build Coastguard Worker         return m_BackendId;
65*89c4ff92SAndroid Build Coastguard Worker     }
CreateWorkloadFactory(const IMemoryManagerSharedPtr & memoryManager) const66*89c4ff92SAndroid Build Coastguard Worker     IWorkloadFactoryPtr CreateWorkloadFactory(const IMemoryManagerSharedPtr& memoryManager) const override
67*89c4ff92SAndroid Build Coastguard Worker     {
68*89c4ff92SAndroid Build Coastguard Worker         IgnoreUnused(memoryManager);
69*89c4ff92SAndroid Build Coastguard Worker         return IWorkloadFactoryPtr{};
70*89c4ff92SAndroid Build Coastguard Worker     }
GetLayerSupport() const71*89c4ff92SAndroid Build Coastguard Worker     ILayerSupportSharedPtr GetLayerSupport() const override
72*89c4ff92SAndroid Build Coastguard Worker     {
73*89c4ff92SAndroid Build Coastguard Worker         return ILayerSupportSharedPtr{};
74*89c4ff92SAndroid Build Coastguard Worker     }
75*89c4ff92SAndroid Build Coastguard Worker 
76*89c4ff92SAndroid Build Coastguard Worker private:
77*89c4ff92SAndroid Build Coastguard Worker     armnn::BackendId m_BackendId;
78*89c4ff92SAndroid Build Coastguard Worker };
79*89c4ff92SAndroid Build Coastguard Worker 
GetBackendId()80*89c4ff92SAndroid Build Coastguard Worker const char* GetBackendId()
81*89c4ff92SAndroid Build Coastguard Worker {
82*89c4ff92SAndroid Build Coastguard Worker #if defined(INVALID_TEST_DYNAMIC_BACKEND_5) || \
83*89c4ff92SAndroid Build Coastguard Worker     defined(INVALID_TEST_DYNAMIC_BACKEND_8)
84*89c4ff92SAndroid Build Coastguard Worker 
85*89c4ff92SAndroid Build Coastguard Worker     // Return an invalid backend id
86*89c4ff92SAndroid Build Coastguard Worker     return nullptr;
87*89c4ff92SAndroid Build Coastguard Worker 
88*89c4ff92SAndroid Build Coastguard Worker #else
89*89c4ff92SAndroid Build Coastguard Worker 
90*89c4ff92SAndroid Build Coastguard Worker     // Return a valid backend id
91*89c4ff92SAndroid Build Coastguard Worker     return TestDynamicBackendId();
92*89c4ff92SAndroid Build Coastguard Worker 
93*89c4ff92SAndroid Build Coastguard Worker #endif
94*89c4ff92SAndroid Build Coastguard Worker }
95*89c4ff92SAndroid Build Coastguard Worker 
GetVersion(uint32_t * outMajor,uint32_t * outMinor)96*89c4ff92SAndroid Build Coastguard Worker void GetVersion(uint32_t* outMajor, uint32_t* outMinor)
97*89c4ff92SAndroid Build Coastguard Worker {
98*89c4ff92SAndroid Build Coastguard Worker     if (!outMajor || !outMinor)
99*89c4ff92SAndroid Build Coastguard Worker     {
100*89c4ff92SAndroid Build Coastguard Worker         return;
101*89c4ff92SAndroid Build Coastguard Worker     }
102*89c4ff92SAndroid Build Coastguard Worker 
103*89c4ff92SAndroid Build Coastguard Worker #if defined(INVALID_TEST_DYNAMIC_BACKEND_7) || \
104*89c4ff92SAndroid Build Coastguard Worker     defined(INVALID_TEST_DYNAMIC_BACKEND_8)
105*89c4ff92SAndroid Build Coastguard Worker 
106*89c4ff92SAndroid Build Coastguard Worker     *outMajor = 0;
107*89c4ff92SAndroid Build Coastguard Worker     *outMinor = 7;
108*89c4ff92SAndroid Build Coastguard Worker 
109*89c4ff92SAndroid Build Coastguard Worker #else
110*89c4ff92SAndroid Build Coastguard Worker 
111*89c4ff92SAndroid Build Coastguard Worker     armnn::BackendVersion apiVersion = armnn::IBackendInternal::GetApiVersion();
112*89c4ff92SAndroid Build Coastguard Worker 
113*89c4ff92SAndroid Build Coastguard Worker     *outMajor = apiVersion.m_Major;
114*89c4ff92SAndroid Build Coastguard Worker 
115*89c4ff92SAndroid Build Coastguard Worker #if defined(INVALID_TEST_DYNAMIC_BACKEND_9)
116*89c4ff92SAndroid Build Coastguard Worker 
117*89c4ff92SAndroid Build Coastguard Worker     *outMinor = apiVersion.m_Minor + 1;
118*89c4ff92SAndroid Build Coastguard Worker 
119*89c4ff92SAndroid Build Coastguard Worker #else
120*89c4ff92SAndroid Build Coastguard Worker 
121*89c4ff92SAndroid Build Coastguard Worker     *outMinor = apiVersion.m_Minor;
122*89c4ff92SAndroid Build Coastguard Worker 
123*89c4ff92SAndroid Build Coastguard Worker #endif
124*89c4ff92SAndroid Build Coastguard Worker 
125*89c4ff92SAndroid Build Coastguard Worker #endif
126*89c4ff92SAndroid Build Coastguard Worker }
127*89c4ff92SAndroid Build Coastguard Worker 
BackendFactory()128*89c4ff92SAndroid Build Coastguard Worker void* BackendFactory()
129*89c4ff92SAndroid Build Coastguard Worker {
130*89c4ff92SAndroid Build Coastguard Worker #if defined(INVALID_TEST_DYNAMIC_BACKEND_6)
131*89c4ff92SAndroid Build Coastguard Worker 
132*89c4ff92SAndroid Build Coastguard Worker     // Return an invalid backend instance
133*89c4ff92SAndroid Build Coastguard Worker     return nullptr;
134*89c4ff92SAndroid Build Coastguard Worker 
135*89c4ff92SAndroid Build Coastguard Worker #else
136*89c4ff92SAndroid Build Coastguard Worker 
137*89c4ff92SAndroid Build Coastguard Worker     // Return a non-null backend instance
138*89c4ff92SAndroid Build Coastguard Worker     return new TestDynamicBackend();
139*89c4ff92SAndroid Build Coastguard Worker 
140*89c4ff92SAndroid Build Coastguard Worker #endif
141*89c4ff92SAndroid Build Coastguard Worker }
142