xref: /aosp_15_r20/external/armnn/src/dynamic/sample/SampleMemoryManager.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/IMemoryManager.hpp>
8 
9 #include <forward_list>
10 #include <vector>
11 
12 namespace sdb // sample dynamic backend
13 {
14 
15 // An implementation of IMemoryManager to be used with SampleTensorHandle
16 class SampleMemoryManager : public armnn::IMemoryManager
17 {
18 public:
19     SampleMemoryManager();
20     virtual ~SampleMemoryManager();
21 
22     class Pool;
23 
24     Pool* Manage(unsigned int numBytes);
25 
26     void Allocate(Pool *pool);
27 
28     void* GetPointer(Pool *pool);
29 
30     void Acquire() override;
31     void Release() override;
32 
33     class Pool
34     {
35     public:
36         Pool(unsigned int numBytes);
37         ~Pool();
38 
39         void Acquire();
40         void Release();
41 
42         void* GetPointer();
43 
44         void Reserve(unsigned int numBytes);
45 
46     private:
47         unsigned int m_Size;
48         void* m_Pointer;
49     };
50 
51 private:
52     SampleMemoryManager(const SampleMemoryManager&) = delete; // Noncopyable
53     SampleMemoryManager& operator=(const SampleMemoryManager&) = delete; // Noncopyable
54 
55     std::forward_list<Pool> m_Pools;
56     std::vector<Pool*> m_FreePools;
57 };
58 
59 } // namespace sdb
60