blob: 2e6b056798e27e14ee4fe9920482675c0fcdd188 [file] [log] [blame]
David Becke97c6e02018-10-03 13:09:28 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5#pragma once
6
David Beck9efb57d2018-11-05 13:40:33 +00007#include <armnn/Types.hpp>
David Beck1b61be52018-11-08 09:19:14 +00008#include <armnn/IRuntime.hpp>
Matteo Martincigh49124022019-01-11 13:25:59 +00009
10#include <ISubGraphConverter.hpp>
11#include <SubGraph.hpp>
12
David Beck263e3492018-11-09 14:46:40 +000013#include <vector>
David Becke97c6e02018-10-03 13:09:28 +010014
15namespace armnn
16{
David Beck29c75de2018-10-23 13:35:58 +010017class IWorkloadFactory;
David Beck1b61be52018-11-08 09:19:14 +000018class IBackendContext;
Aron Virginas-Tar56055192018-11-12 18:10:43 +000019class IMemoryManager;
David Beck263e3492018-11-09 14:46:40 +000020class Optimization;
David Beck111b5d92018-11-12 14:59:37 +000021class ILayerSupport;
David Becke97c6e02018-10-03 13:09:28 +010022
23class IBackendInternal : public IBackend
24{
25protected:
David Beck9efb57d2018-11-05 13:40:33 +000026 // Creation must be done through a specific
27 // backend interface.
David Beck6b779f02018-10-09 17:20:21 +010028 IBackendInternal() = default;
David Becke97c6e02018-10-03 13:09:28 +010029
30public:
David Beck29c75de2018-10-23 13:35:58 +010031 // Allow backends created by the factory function
32 // to be destroyed through IBackendInternal.
33 ~IBackendInternal() override = default;
34
35 using IWorkloadFactoryPtr = std::unique_ptr<IWorkloadFactory>;
David Beck1b61be52018-11-08 09:19:14 +000036 using IBackendContextPtr = std::unique_ptr<IBackendContext>;
David Beck263e3492018-11-09 14:46:40 +000037 using OptimizationPtr = std::unique_ptr<Optimization>;
38 using Optimizations = std::vector<OptimizationPtr>;
David Beck111b5d92018-11-12 14:59:37 +000039 using ILayerSupportSharedPtr = std::shared_ptr<ILayerSupport>;
David Beck1b61be52018-11-08 09:19:14 +000040
Aron Virginas-Tar56055192018-11-12 18:10:43 +000041 using IMemoryManagerUniquePtr = std::unique_ptr<IMemoryManager>;
42 using IMemoryManagerSharedPtr = std::shared_ptr<IMemoryManager>;
43
Matteo Martincigh49124022019-01-11 13:25:59 +000044 using ISubGraphConverterPtr = std::unique_ptr<ISubGraphConverter>;
45
Aron Virginas-Tar56055192018-11-12 18:10:43 +000046 virtual IMemoryManagerUniquePtr CreateMemoryManager() const = 0;
47
48 virtual IWorkloadFactoryPtr CreateWorkloadFactory(
49 const IMemoryManagerSharedPtr& memoryManager = nullptr) const = 0;
50
David Beck1b61be52018-11-08 09:19:14 +000051 virtual IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const = 0;
Aron Virginas-Tar56055192018-11-12 18:10:43 +000052
Matteo Martincigh49124022019-01-11 13:25:59 +000053 virtual ISubGraphConverterPtr CreateSubGraphConverter(const std::shared_ptr<SubGraph>& subGraph) const = 0;
54
David Beck263e3492018-11-09 14:46:40 +000055 virtual Optimizations GetOptimizations() const = 0;
David Beck111b5d92018-11-12 14:59:37 +000056 virtual ILayerSupportSharedPtr GetLayerSupport() const = 0;
David Becke97c6e02018-10-03 13:09:28 +010057};
58
David Beck29c75de2018-10-23 13:35:58 +010059using IBackendInternalUniquePtr = std::unique_ptr<IBackendInternal>;
60
David Becke97c6e02018-10-03 13:09:28 +010061} // namespace armnn