xref: /aosp_15_r20/external/armnn/src/dynamic/sample/SampleMemoryManager.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2020 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "SampleMemoryManager.hpp"
7 
8 #include <algorithm>
9 
10 namespace sdb // sample dynamic backend
11 {
12 
SampleMemoryManager()13 SampleMemoryManager::SampleMemoryManager()
14 {}
15 
~SampleMemoryManager()16 SampleMemoryManager::~SampleMemoryManager()
17 {}
18 
Manage(unsigned int numBytes)19 SampleMemoryManager::Pool* SampleMemoryManager::Manage(unsigned int numBytes)
20 {
21     if (!m_FreePools.empty())
22     {
23         Pool* res = m_FreePools.back();
24         m_FreePools.pop_back();
25         res->Reserve(numBytes);
26         return res;
27     }
28     else
29     {
30         m_Pools.push_front(Pool(numBytes));
31         return &m_Pools.front();
32     }
33 }
34 
Allocate(SampleMemoryManager::Pool * pool)35 void SampleMemoryManager::Allocate(SampleMemoryManager::Pool* pool)
36 {
37     m_FreePools.push_back(pool);
38 }
39 
GetPointer(SampleMemoryManager::Pool * pool)40 void* SampleMemoryManager::GetPointer(SampleMemoryManager::Pool* pool)
41 {
42     return pool->GetPointer();
43 }
44 
Acquire()45 void SampleMemoryManager::Acquire()
46 {
47     for (Pool &pool: m_Pools)
48     {
49          pool.Acquire();
50     }
51 }
52 
Release()53 void SampleMemoryManager::Release()
54 {
55     for (Pool &pool: m_Pools)
56     {
57          pool.Release();
58     }
59 }
60 
Pool(unsigned int numBytes)61 SampleMemoryManager::Pool::Pool(unsigned int numBytes)
62     : m_Size(numBytes),
63       m_Pointer(nullptr)
64 {}
65 
~Pool()66 SampleMemoryManager::Pool::~Pool()
67 {
68     if (m_Pointer)
69     {
70         Release();
71     }
72 }
73 
GetPointer()74 void* SampleMemoryManager::Pool::GetPointer()
75 {
76     return m_Pointer;
77 }
78 
Reserve(unsigned int numBytes)79 void SampleMemoryManager::Pool::Reserve(unsigned int numBytes)
80 {
81     m_Size = std::max(m_Size, numBytes);
82 }
83 
Acquire()84 void SampleMemoryManager::Pool::Acquire()
85 {
86     m_Pointer = ::operator new(size_t(m_Size));
87 }
88 
Release()89 void SampleMemoryManager::Pool::Release()
90 {
91     ::operator delete(m_Pointer);
92     m_Pointer = nullptr;
93 }
94 
95 } // namespace sdb
96