aboutsummaryrefslogtreecommitdiff
path: root/src/backends/backendsCommon/test/TestDynamicBackend.cpp
blob: 72307029840d36a9c205836a36faf05886d2ee46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//

#include "TestDynamicBackend.hpp"

#include <backendsCommon/IBackendInternal.hpp>

constexpr const char* TestDynamicBackendId()
{
#if defined(VALID_TEST_DYNAMIC_BACKEND_1)

    return "ValidTestDynamicBackend";

#elif defined(VALID_TEST_DYNAMIC_BACKEND_2) || \
      defined(VALID_TEST_DYNAMIC_BACKEND_4) || \
      defined(INVALID_TEST_DYNAMIC_BACKEND_9)

    // This backend id is shared among different test dynamic backends for testing purposes:
    // the test dynamic backend 4 is actually a duplicate of the test dynamic backend 2 (with the same version),
    // the test dynamic backend 9 is actually a duplicate of the test dynamic backend 2 (but with a version
    // incompatible with the current Backend API)
    return "TestValid2";

#elif defined(VALID_TEST_DYNAMIC_BACKEND_3)

    // The test dynamic backend 3 is a different backend than the test dynamic backend 2
    return "TestValid3";

#elif defined(VALID_TEST_DYNAMIC_BACKEND_5)

    // The test dynamic backend 5 is a different backend than the test dynamic backend 2
    return "TestValid5";

#elif defined(INVALID_TEST_DYNAMIC_BACKEND_10)

    // Empty backend id
    return "";

#elif defined(INVALID_TEST_DYNAMIC_BACKEND_11)

    // "Unknown" backend id, "Unknown" is a reserved id in ArmNN
    return "Unknown";

#else

    return "InvalidTestDynamicBackend";

#endif
}

class TestDynamicBackend : public armnn::IBackendInternal
{
public:
    TestDynamicBackend()
        : m_BackendId(TestDynamicBackendId())
    {}

    const armnn::BackendId& GetId() const override
    {
        return m_BackendId;
    }
    IWorkloadFactoryPtr CreateWorkloadFactory(const IMemoryManagerSharedPtr& memoryManager) const override
    {
        return IWorkloadFactoryPtr{};
    }
    ILayerSupportSharedPtr GetLayerSupport() const override
    {
        return ILayerSupportSharedPtr{};
    }

private:
    armnn::BackendId m_BackendId;
};

const char* GetBackendId()
{
#if defined(INVALID_TEST_DYNAMIC_BACKEND_5) || \
    defined(INVALID_TEST_DYNAMIC_BACKEND_8)

    // Return an invalid backend id
    return nullptr;

#else

    // Return a valid backend id
    return TestDynamicBackendId();

#endif
}

void GetVersion(uint32_t* outMajor, uint32_t* outMinor)
{
    if (!outMajor || !outMinor)
    {
        return;
    }

#if defined(INVALID_TEST_DYNAMIC_BACKEND_7) || \
    defined(INVALID_TEST_DYNAMIC_BACKEND_8)

    *outMajor = 0;
    *outMinor = 7;

#else

    armnn::BackendVersion apiVersion = armnn::IBackendInternal::GetApiVersion();

    *outMajor = apiVersion.m_Major;

#if defined(INVALID_TEST_DYNAMIC_BACKEND_9)

    *outMinor = apiVersion.m_Minor + 1;

#else

    *outMinor = apiVersion.m_Minor;

#endif

#endif
}

void* BackendFactory()
{
#if defined(INVALID_TEST_DYNAMIC_BACKEND_6)

    // Return an invalid backend instance
    return nullptr;

#else

    // Return a non-null backend instance
    return new TestDynamicBackend();

#endif
}