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