blob: afa4240f143c96a74b7189c2018beacfa4ab4322 [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
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000029 void Commit(IPacketBufferPtr& packetBuffer, unsigned int size) override;
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +010030
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000031 void Release(IPacketBufferPtr& packetBuffer) override;
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +010032
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000033 IPacketBufferPtr GetReadableBuffer() override;
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +010034
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000035 void MarkRead(IPacketBufferPtr& packetBuffer) override;
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +010036
37private:
38 // Maximum buffer size
39 unsigned int m_MaxBufferSize;
40
41 // List of available packet buffers
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000042 std::vector<IPacketBufferPtr> m_AvailableList;
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +010043
44 // List of readable packet buffers
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000045 std::vector<IPacketBufferPtr> m_ReadableList;
Narumol Prangnawarat7be47ef2019-09-27 18:00:11 +010046
47 // Mutex for available packet buffer list
48 std::mutex m_AvailableMutex;
49
50 // Mutex for readable packet buffer list
51 std::mutex m_ReadableMutex;
52
53 // Condition to notify when data is availabe to be read
54 std::condition_variable m_ReadDataAvailable;
55};
56
57} // namespace profiling
58
59} // namespace armnn