1 // 2 // Copyright © 2020 Arm Ltd and Contributors. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 6 #pragma once 7 8 #include "SampleMemoryManager.hpp" 9 10 #include <armnn/backends/ITensorHandleFactory.hpp> 11 12 namespace sdb // sample dynamic backend 13 { 14 SampleDynamicTensorHandleFactoryId()15constexpr const char * SampleDynamicTensorHandleFactoryId() { return "Arm/SampleDynamic/TensorHandleFactory"; } 16 17 class SampleDynamicTensorHandleFactory : public armnn::ITensorHandleFactory 18 { 19 20 public: SampleDynamicTensorHandleFactory(std::shared_ptr<SampleMemoryManager> mgr)21 SampleDynamicTensorHandleFactory(std::shared_ptr<SampleMemoryManager> mgr) 22 : m_MemoryManager(mgr), 23 m_ImportFlags(static_cast<armnn::MemorySourceFlags>(armnn::MemorySource::Malloc)), 24 m_ExportFlags(static_cast<armnn::MemorySourceFlags>(armnn::MemorySource::Malloc)) 25 {} 26 27 std::unique_ptr<armnn::ITensorHandle> CreateSubTensorHandle(armnn::ITensorHandle& parent, 28 armnn::TensorShape const& subTensorShape, 29 unsigned int const* subTensorOrigin) const override; 30 31 std::unique_ptr<armnn::ITensorHandle> CreateTensorHandle(const armnn::TensorInfo& tensorInfo) const override; 32 33 std::unique_ptr<armnn::ITensorHandle> CreateTensorHandle(const armnn::TensorInfo& tensorInfo, 34 armnn::DataLayout dataLayout) const override; 35 36 std::unique_ptr<armnn::ITensorHandle> CreateTensorHandle(const armnn::TensorInfo& tensorInfo, 37 const bool IsMemoryManaged) const override; 38 39 std::unique_ptr<armnn::ITensorHandle> CreateTensorHandle(const armnn::TensorInfo& tensorInfo, 40 armnn::DataLayout dataLayout, 41 const bool IsMemoryManaged) const override; 42 43 static const FactoryId& GetIdStatic(); 44 45 const FactoryId& GetId() const override; 46 47 bool SupportsSubTensors() const override; 48 49 armnn::MemorySourceFlags GetExportFlags() const override; 50 51 armnn::MemorySourceFlags GetImportFlags() const override; 52 53 private: 54 mutable std::shared_ptr<SampleMemoryManager> m_MemoryManager; 55 armnn::MemorySourceFlags m_ImportFlags; 56 armnn::MemorySourceFlags m_ExportFlags; 57 }; 58 59 } // namespace sdb 60 61