1 // 2 // Copyright © 2020 Arm Ltd. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 #pragma once 6 7 #include <armnn/backends/TensorHandle.hpp> 8 9 #include "SampleMemoryManager.hpp" 10 11 namespace sdb // sample dynamic backend 12 { 13 14 // An implementation of ITensorHandle with simple "bump the pointer" memory-management behaviour 15 class SampleTensorHandle : public armnn::ITensorHandle 16 { 17 public: 18 SampleTensorHandle(const armnn::TensorInfo& tensorInfo, std::shared_ptr<SampleMemoryManager> &memoryManager); 19 20 SampleTensorHandle(const armnn::TensorInfo& tensorInfo, armnn::MemorySourceFlags importFlags); 21 22 ~SampleTensorHandle(); 23 24 virtual void Manage() override; 25 26 virtual void Allocate() override; 27 GetParent() const28 virtual ITensorHandle* GetParent() const override 29 { 30 return nullptr; 31 } 32 33 virtual const void* Map(bool /* blocking = true */) const override; 34 using ITensorHandle::Map; 35 Unmap() const36 virtual void Unmap() const override 37 {} 38 GetStrides() const39 armnn::TensorShape GetStrides() const override 40 { 41 return GetUnpaddedTensorStrides(m_TensorInfo); 42 } 43 GetShape() const44 armnn::TensorShape GetShape() const override 45 { 46 return m_TensorInfo.GetShape(); 47 } 48 GetTensorInfo() const49 const armnn::TensorInfo& GetTensorInfo() const 50 { 51 return m_TensorInfo; 52 } 53 GetImportFlags() const54 virtual armnn::MemorySourceFlags GetImportFlags() const override 55 { 56 return m_ImportFlags; 57 } 58 59 virtual bool Import(void* memory, armnn::MemorySource source) override; 60 61 private: 62 // Only used for testing 63 void CopyOutTo(void*) const override; 64 void CopyInFrom(const void*) override; 65 66 void* GetPointer() const; 67 68 SampleTensorHandle(const SampleTensorHandle& other) = delete; // noncopyable 69 SampleTensorHandle& operator=(const SampleTensorHandle& other) = delete; //noncopyable 70 71 armnn::TensorInfo m_TensorInfo; 72 73 std::shared_ptr<SampleMemoryManager> m_MemoryManager; 74 SampleMemoryManager::Pool* m_Pool; 75 mutable void *m_UnmanagedMemory; 76 armnn::MemorySourceFlags m_ImportFlags; 77 bool m_Imported; 78 }; 79 80 } // namespace sdb 81