ArmNN
 21.02
BufferManager.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2019 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 #include "IBufferManager.hpp"
9 #include "IConsumer.hpp"
10 
11 #include <condition_variable>
12 #include <mutex>
13 #include <vector>
14 #include <queue>
15 
16 namespace armnn
17 {
18 
19 namespace profiling
20 {
21 
23 {
24 public:
25  BufferManager(unsigned int numberOfBuffers = 5, unsigned int maxPacketSize = 4096);
26 
28 
29  IPacketBufferPtr Reserve(unsigned int requestedSize, unsigned int& reservedSize) override;
30 
31  void Reset();
32 
33  void Commit(IPacketBufferPtr& packetBuffer, unsigned int size, bool notifyConsumer = true) override;
34 
35  void Release(IPacketBufferPtr& packetBuffer) override;
36 
38 
39  void MarkRead(IPacketBufferPtr& packetBuffer) override;
40 
41  /// Set Consumer on the buffer manager to be notified when there is a Commit
42  /// Can only be one consumer
43  void SetConsumer(IConsumer* consumer) override;
44 
45  /// Notify the Consumer buffer can be read
46  void FlushReadList() override;
47 
48 private:
49  void Initialize();
50 
51  // Maximum buffer size
52  unsigned int m_MaxBufferSize;
53  // Number of buffers
54  const unsigned int m_NumberOfBuffers;
55  const unsigned int m_MaxNumberOfBuffers;
56  unsigned int m_CurrentNumberOfBuffers;
57 
58  // List of available packet buffers
59  std::vector<IPacketBufferPtr> m_AvailableList;
60 
61  // List of readable packet buffers
62  std::queue<IPacketBufferPtr> m_ReadableList;
63 
64  // Mutex for available packet buffer list
65  std::mutex m_AvailableMutex;
66 
67  // Mutex for readable packet buffer list
68  std::mutex m_ReadableMutex;
69 
70  // Consumer thread to notify packet is ready to read
71  IConsumer* m_Consumer = nullptr;
72 };
73 
74 } // namespace profiling
75 
76 } // namespace armnn
void SetConsumer(IConsumer *consumer) override
Set Consumer on the buffer manager to be notified when there is a Commit Can only be one consumer...
Copyright (c) 2021 ARM Limited and Contributors.
BufferManager(unsigned int numberOfBuffers=5, unsigned int maxPacketSize=4096)
void FlushReadList() override
Notify the Consumer buffer can be read.
void Commit(IPacketBufferPtr &packetBuffer, unsigned int size, bool notifyConsumer=true) override
IPacketBufferPtr Reserve(unsigned int requestedSize, unsigned int &reservedSize) override
IPacketBufferPtr GetReadableBuffer() override
void MarkRead(IPacketBufferPtr &packetBuffer) override
std::unique_ptr< IPacketBuffer > IPacketBufferPtr
void Release(IPacketBufferPtr &packetBuffer) override