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