blob: 39bc6654156748864ddfe5ab069992520286945d [file] [log] [blame]
telsoa01c577f2c2018-08-31 09:22:23 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa01c577f2c2018-08-31 09:22:23 +01004//
5#pragma once
6
7#include "IPoolManager.hpp"
8
Aron Virginas-Tarf9aeef02018-10-12 15:18:03 +01009#include <arm_compute/runtime/IMemoryPool.h>
10#include <arm_compute/core/Error.h>
11
12#include <support/Mutex.h>
13#include <support/Semaphore.h>
telsoa01c577f2c2018-08-31 09:22:23 +010014
15#include <cstddef>
16#include <list>
17#include <memory>
18
19namespace armnn
20{
21
22class PoolManager : public IPoolManager
23{
24public:
25 PoolManager();
26
27 PoolManager(const PoolManager &) = delete;
28
29 PoolManager &operator=(const PoolManager &) = delete;
30
31 PoolManager(PoolManager &&) = default;
32
33 PoolManager &operator=(PoolManager &&) = default;
34
35 arm_compute::IMemoryPool *lock_pool() override;
36 void unlock_pool(arm_compute::IMemoryPool *pool) override;
37 void register_pool(std::unique_ptr<arm_compute::IMemoryPool> pool) override;
38 size_t num_pools() const override;
39
40 void AllocatePools() override;
41 void ReleasePools() override;
42
43private:
44 /// List of free pools
45 std::list<std::unique_ptr<arm_compute::IMemoryPool>> m_FreePools;
46
47 /// List of occupied pools
48 std::list<std::unique_ptr<arm_compute::IMemoryPool>> m_OccupiedPools;
49
50 /// Semaphore to control the queues
51 std::unique_ptr<arm_compute::Semaphore> m_Semaphore;
52
53 /// Mutex to control access to the queues
54 mutable arm_compute::Mutex m_Mutex;
55};
56
57} // namespace armnn