xref: /aosp_15_r20/external/armnn/src/backends/tosaReference/TosaRefTensorHandle.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6 
7 #include <armnn/backends/TensorHandle.hpp>
8 
9 #include "TosaRefMemoryManager.hpp"
10 
11 namespace armnn
12 {
13 
14 // An implementation of ITensorHandle with simple "bump the pointer" memory-management behaviour
15 class TosaRefTensorHandle : public ITensorHandle
16 {
17 public:
18     TosaRefTensorHandle(const TensorInfo& tensorInfo, std::shared_ptr<TosaRefMemoryManager> &memoryManager);
19 
20     TosaRefTensorHandle(const TensorInfo& tensorInfo, MemorySourceFlags importFlags);
21 
22     ~TosaRefTensorHandle();
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     TensorShape GetStrides() const override
40     {
41         return GetUnpaddedTensorStrides(m_TensorInfo);
42     }
43 
GetShape() const44     TensorShape GetShape() const override
45     {
46         return m_TensorInfo.GetShape();
47     }
48 
GetTensorInfo() const49     const TensorInfo& GetTensorInfo() const
50     {
51         return m_TensorInfo;
52     }
53 
GetImportFlags() const54     virtual MemorySourceFlags GetImportFlags() const override
55     {
56         return m_ImportFlags;
57     }
58 
59     virtual bool Import(void* memory, MemorySource source) override;
60     virtual bool CanBeImported(void* memory, MemorySource source) override;
61 
62 private:
63     // Only used for testing
64     void CopyOutTo(void*) const override;
65     void CopyInFrom(const void*) override;
66 
67     void* GetPointer() const;
68 
69     TosaRefTensorHandle(const TosaRefTensorHandle& other) = delete; // noncopyable
70     TosaRefTensorHandle& operator=(const TosaRefTensorHandle& other) = delete; //noncopyable
71 
72     TensorInfo m_TensorInfo;
73 
74     std::shared_ptr<TosaRefMemoryManager> m_MemoryManager;
75     TosaRefMemoryManager::Pool* m_Pool;
76     mutable void* m_UnmanagedMemory;
77     MemorySourceFlags m_ImportFlags;
78     bool m_Imported;
79     bool m_IsImportEnabled;
80 };
81 
82 }
83