blob: 04a1507512e7c7feadac4522ee5c97e5b722a6b8 [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
27 std::unique_ptr<IPacketBuffer> Reserve(unsigned int requestedSize, unsigned int& reservedSize) override;
28
29 void Commit(std::unique_ptr<IPacketBuffer>& packetBuffer, unsigned int size) override;
30
31 void Release(std::unique_ptr<IPacketBuffer>& packetBuffer) override;
32
33 std::unique_ptr<IPacketBuffer> GetReadableBuffer() override;
34
35 void MarkRead(std::unique_ptr<IPacketBuffer>& packetBuffer) override;
36
37private:
38 // Maximum buffer size
39 unsigned int m_MaxBufferSize;
40
41 // List of available packet buffers
42 std::vector<std::unique_ptr<IPacketBuffer>> m_AvailableList;
43
44 // List of readable packet buffers
45 std::vector<std::unique_ptr<IPacketBuffer>> m_ReadableList;
46
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