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 Workerconstexpr 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 Workerconst 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 Workervoid 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 Workervoid* 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