blob: b102d1a1f97da66b730851ac375a75af36a8f722 [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>
David Beck263e3492018-11-09 14:46:40 +00009#include <vector>
David Becke97c6e02018-10-03 13:09:28 +010010
11namespace armnn
12{
David Beck29c75de2018-10-23 13:35:58 +010013class IWorkloadFactory;
David Beck1b61be52018-11-08 09:19:14 +000014class IBackendContext;
Aron Virginas-Tar56055192018-11-12 18:10:43 +000015class IMemoryManager;
David Beck263e3492018-11-09 14:46:40 +000016class Optimization;
David Beck111b5d92018-11-12 14:59:37 +000017class ILayerSupport;
David Becke97c6e02018-10-03 13:09:28 +010018
19class IBackendInternal : public IBackend
20{
21protected:
David Beck9efb57d2018-11-05 13:40:33 +000022 // Creation must be done through a specific
23 // backend interface.
David Beck6b779f02018-10-09 17:20:21 +010024 IBackendInternal() = default;
David Becke97c6e02018-10-03 13:09:28 +010025
26public:
David Beck29c75de2018-10-23 13:35:58 +010027 // Allow backends created by the factory function
28 // to be destroyed through IBackendInternal.
29 ~IBackendInternal() override = default;
30
31 using IWorkloadFactoryPtr = std::unique_ptr<IWorkloadFactory>;
David Beck1b61be52018-11-08 09:19:14 +000032 using IBackendContextPtr = std::unique_ptr<IBackendContext>;
David Beck263e3492018-11-09 14:46:40 +000033 using OptimizationPtr = std::unique_ptr<Optimization>;
34 using Optimizations = std::vector<OptimizationPtr>;
David Beck111b5d92018-11-12 14:59:37 +000035 using ILayerSupportSharedPtr = std::shared_ptr<ILayerSupport>;
David Beck1b61be52018-11-08 09:19:14 +000036
Aron Virginas-Tar56055192018-11-12 18:10:43 +000037 using IMemoryManagerUniquePtr = std::unique_ptr<IMemoryManager>;
38 using IMemoryManagerSharedPtr = std::shared_ptr<IMemoryManager>;
39
40 virtual IMemoryManagerUniquePtr CreateMemoryManager() const = 0;
41
42 virtual IWorkloadFactoryPtr CreateWorkloadFactory(
43 const IMemoryManagerSharedPtr& memoryManager = nullptr) const = 0;
44
David Beck1b61be52018-11-08 09:19:14 +000045 virtual IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const = 0;
Aron Virginas-Tar56055192018-11-12 18:10:43 +000046
David Beck263e3492018-11-09 14:46:40 +000047 virtual Optimizations GetOptimizations() const = 0;
David Beck111b5d92018-11-12 14:59:37 +000048 virtual ILayerSupportSharedPtr GetLayerSupport() const = 0;
David Becke97c6e02018-10-03 13:09:28 +010049};
50
David Beck29c75de2018-10-23 13:35:58 +010051using IBackendInternalUniquePtr = std::unique_ptr<IBackendInternal>;
52
David Becke97c6e02018-10-03 13:09:28 +010053} // namespace armnn