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()12constexpr 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()80const 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)96void 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()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 } 142