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