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 WorkerMockMemoryManager::MockMemoryManager() 12*89c4ff92SAndroid Build Coastguard Worker {} 13*89c4ff92SAndroid Build Coastguard Worker ~MockMemoryManager()14*89c4ff92SAndroid Build Coastguard WorkerMockMemoryManager::~MockMemoryManager() 15*89c4ff92SAndroid Build Coastguard Worker {} 16*89c4ff92SAndroid Build Coastguard Worker Manage(unsigned int numBytes)17*89c4ff92SAndroid Build Coastguard WorkerMockMemoryManager::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 Workervoid 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 Workervoid* 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 Workervoid 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 Workervoid 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 WorkerMockMemoryManager::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 WorkerMockMemoryManager::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 Workervoid* 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 Workervoid 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 Workervoid 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 Workervoid 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