blob: 495b11386718c12b918d9b391892a1321c5efb92 [file] [log] [blame]
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +01001//
2// Copyright © 2019 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include "IBufferManager.hpp"
9
10#include <condition_variable>
11#include <mutex>
12#include <vector>
13
14namespace armnn
15{
16
17namespace profiling
18{
19
20class BufferManager : public IBufferManager
21{
22public:
23 BufferManager(unsigned int numberOfBuffers = 5, unsigned int maxPacketSize = 4096);
24
25 ~BufferManager() {}
26
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000027 IPacketBufferPtr Reserve(unsigned int requestedSize, unsigned int& reservedSize) override;
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +010028
Finn Williams09ad6f92019-12-19 17:05:18 +000029 void Reset();
30
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000031 void Commit(IPacketBufferPtr& packetBuffer, unsigned int size) override;
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +010032
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000033 void Release(IPacketBufferPtr& packetBuffer) override;
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +010034
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000035 IPacketBufferPtr GetReadableBuffer() override;
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +010036
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000037 void MarkRead(IPacketBufferPtr& packetBuffer) override;
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +010038
39private:
Finn Williams09ad6f92019-12-19 17:05:18 +000040 void Initialize();
41
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +010042 // Maximum buffer size
43 unsigned int m_MaxBufferSize;
Finn Williams09ad6f92019-12-19 17:05:18 +000044 // Number of buffers
45 unsigned int m_NumberOfBuffers;
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +010046
47 // List of available packet buffers
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000048 std::vector<IPacketBufferPtr> m_AvailableList;
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +010049
50 // List of readable packet buffers
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000051 std::vector<IPacketBufferPtr> m_ReadableList;
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +010052
53 // Mutex for available packet buffer list
54 std::mutex m_AvailableMutex;
55
56 // Mutex for readable packet buffer list
57 std::mutex m_ReadableMutex;
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +010058};
59
60} // namespace profiling
61
62} // namespace armnn