xref: /aosp_15_r20/external/armnn/src/dynamic/sample/SampleTensorHandle.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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