From f86be93b7492b381370cae7bf71eca8572a0cbae Mon Sep 17 00:00:00 2001 From: Matthew Sloyan Date: Tue, 24 Aug 2021 16:27:15 +0100 Subject: IVGCVSW-5924 Update 21.08 Doxygen Documents * Also updated latest symlink. Signed-off-by: Matthew Sloyan Change-Id: If9b4e0e52464abdf797b9eb858ae19bcc64c2aea --- ...lassarmnn_1_1profiling_1_1_buffer_manager.xhtml | 508 +++++++++++++++++++++ 1 file changed, 508 insertions(+) create mode 100644 21.08/classarmnn_1_1profiling_1_1_buffer_manager.xhtml (limited to '21.08/classarmnn_1_1profiling_1_1_buffer_manager.xhtml') diff --git a/21.08/classarmnn_1_1profiling_1_1_buffer_manager.xhtml b/21.08/classarmnn_1_1profiling_1_1_buffer_manager.xhtml new file mode 100644 index 0000000000..9f9ab97d26 --- /dev/null +++ b/21.08/classarmnn_1_1profiling_1_1_buffer_manager.xhtml @@ -0,0 +1,508 @@ + + + + + + + + + + + + + +ArmNN: BufferManager Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + ArmNN + + + +
+
+  21.08 +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
BufferManager Class Reference
+
+
+ +

#include <BufferManager.hpp>

+
+Inheritance diagram for BufferManager:
+
+
+ + +IBufferManager + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 BufferManager (unsigned int numberOfBuffers=5, unsigned int maxPacketSize=4096)
 
 ~BufferManager ()
 
IPacketBufferPtr Reserve (unsigned int requestedSize, unsigned int &reservedSize) override
 
void Reset ()
 
void Commit (IPacketBufferPtr &packetBuffer, unsigned int size, bool notifyConsumer=true) override
 
void Release (IPacketBufferPtr &packetBuffer) override
 
IPacketBufferPtr GetReadableBuffer () override
 
void MarkRead (IPacketBufferPtr &packetBuffer) override
 
void SetConsumer (IConsumer *consumer) override
 Set Consumer on the buffer manager to be notified when there is a Commit Can only be one consumer. More...
 
void FlushReadList () override
 Notify the Consumer buffer can be read. More...
 
- Public Member Functions inherited from IBufferManager
virtual ~IBufferManager ()
 
+

Detailed Description

+
+

Definition at line 22 of file BufferManager.hpp.

+

Constructor & Destructor Documentation

+ +

◆ BufferManager()

+ +
+
+ + + + + + + + + + + + + + + + + + +
BufferManager (unsigned int numberOfBuffers = 5,
unsigned int maxPacketSize = 4096 
)
+
+ +

Definition at line 15 of file BufferManager.cpp.

+
16  : m_MaxBufferSize(maxPacketSize),
17  m_NumberOfBuffers(numberOfBuffers),
18  m_MaxNumberOfBuffers(numberOfBuffers * 3),
19  m_CurrentNumberOfBuffers(numberOfBuffers)
20 {
21  Initialize();
22 }
+
+
+ +

◆ ~BufferManager()

+ + +

Member Function Documentation

+ +

◆ Commit()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Commit (IPacketBufferPtrpacketBuffer,
unsigned int size,
bool notifyConsumer = true 
)
+
+overridevirtual
+
+ +

Implements IBufferManager.

+ +

Definition at line 58 of file BufferManager.cpp.

+ +

References BufferManager::FlushReadList().

+ +

Referenced by TEST_SUITE(), and BufferManager::~BufferManager().

+
59 {
60  std::unique_lock<std::mutex> readableListLock(m_ReadableMutex, std::defer_lock);
61  packetBuffer->Commit(size);
62  readableListLock.lock();
63  m_ReadableList.push(std::move(packetBuffer));
64  readableListLock.unlock();
65 
66  if (notifyConsumer)
67  {
68  FlushReadList();
69  }
70 }
void FlushReadList() override
Notify the Consumer buffer can be read.
+
+
+
+ +

◆ FlushReadList()

+ +
+
+ + + + + +
+ + + + + + + +
void FlushReadList ()
+
+overridevirtual
+
+ +

Notify the Consumer buffer can be read.

+ +

Implements IBufferManager.

+ +

Definition at line 155 of file BufferManager.cpp.

+ +

References IConsumer::SetReadyToRead().

+ +

Referenced by BufferManager::Commit(), and BufferManager::~BufferManager().

+
156 {
157  // notify consumer that packet is ready to read
158  if (m_Consumer != nullptr)
159  {
160  m_Consumer->SetReadyToRead();
161  }
162 }
virtual void SetReadyToRead()=0
Set a "ready to read" flag in the buffer to notify the reading thread to start reading it...
+
+
+
+ +

◆ GetReadableBuffer()

+ +
+
+ + + + + +
+ + + + + + + +
IPacketBufferPtr GetReadableBuffer ()
+
+overridevirtual
+
+ +

Implements IBufferManager.

+ +

Definition at line 116 of file BufferManager.cpp.

+ +

Referenced by TEST_SUITE(), VerifyPostOptimisationStructureTestImpl(), and BufferManager::~BufferManager().

+
117 {
118  std::unique_lock<std::mutex> readableListLock(m_ReadableMutex);
119  if (!m_ReadableList.empty())
120  {
121  IPacketBufferPtr buffer = std::move(m_ReadableList.front());
122  m_ReadableList.pop();
123  readableListLock.unlock();
124  return buffer;
125  }
126  return nullptr;
127 }
std::unique_ptr< IPacketBuffer > IPacketBufferPtr
+
+
+
+ +

◆ MarkRead()

+ +
+
+ + + + + +
+ + + + + + + + +
void MarkRead (IPacketBufferPtrpacketBuffer)
+
+overridevirtual
+
+ +

Implements IBufferManager.

+ +

Definition at line 129 of file BufferManager.cpp.

+ +

Referenced by TEST_SUITE(), and BufferManager::~BufferManager().

+
130 {
131  std::unique_lock<std::mutex> availableListLock(m_AvailableMutex, std::defer_lock);
132  packetBuffer->MarkRead();
133  availableListLock.lock();
134  if (m_AvailableList.size() <= m_NumberOfBuffers)
135  {
136  m_AvailableList.push_back(std::move(packetBuffer));
137  }
138  else
139  {
140  // we have been handed a temporary overflow/surge buffer get rid of it
141  packetBuffer->Destroy();
142  if (m_CurrentNumberOfBuffers > m_NumberOfBuffers)
143  {
144  --m_CurrentNumberOfBuffers;
145  }
146  }
147  availableListLock.unlock();
148 }
+
+
+ +

◆ Release()

+ +
+
+ + + + + +
+ + + + + + + + +
void Release (IPacketBufferPtrpacketBuffer)
+
+overridevirtual
+
+ +

Implements IBufferManager.

+ +

Definition at line 83 of file BufferManager.cpp.

+ +

Referenced by TEST_SUITE(), and BufferManager::~BufferManager().

+
84 {
85  std::unique_lock<std::mutex> availableListLock(m_AvailableMutex, std::defer_lock);
86  packetBuffer->Release();
87  availableListLock.lock();
88  if (m_AvailableList.size() <= m_NumberOfBuffers)
89  {
90  m_AvailableList.push_back(std::move(packetBuffer));
91  }
92  else
93  {
94  // we have been handed a temporary overflow/surge buffer get rid of it
95  packetBuffer->Destroy();
96  if (m_CurrentNumberOfBuffers > m_NumberOfBuffers)
97  {
98  --m_CurrentNumberOfBuffers;
99  }
100  }
101  availableListLock.unlock();
102 }
+
+
+ +

◆ Reserve()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
IPacketBufferPtr Reserve (unsigned int requestedSize,
unsigned int & reservedSize 
)
+
+overridevirtual
+
+ +

Implements IBufferManager.

+ +

Definition at line 24 of file BufferManager.cpp.

+ +

Referenced by TEST_SUITE(), and BufferManager::~BufferManager().

+
25 {
26  reservedSize = 0;
27  std::unique_lock<std::mutex> availableListLock(m_AvailableMutex, std::defer_lock);
28  if (requestedSize > m_MaxBufferSize)
29  {
30  return nullptr;
31  }
32  availableListLock.lock();
33  if (m_AvailableList.empty())
34  {
35  if (m_CurrentNumberOfBuffers < m_MaxNumberOfBuffers)
36  {
37  // create a temporary overflow/surge buffer and hand it back
38  m_CurrentNumberOfBuffers++;
39  availableListLock.unlock();
40  IPacketBufferPtr buffer = std::make_unique<PacketBuffer>(m_MaxBufferSize);
41  reservedSize = requestedSize;
42  return buffer;
43  }
44  else
45  {
46  // we have totally busted the limit. call a halt to new memory allocations.
47  availableListLock.unlock();
48  return nullptr;
49  }
50  }
51  IPacketBufferPtr buffer = std::move(m_AvailableList.back());
52  m_AvailableList.pop_back();
53  availableListLock.unlock();
54  reservedSize = requestedSize;
55  return buffer;
56 }
std::unique_ptr< IPacketBuffer > IPacketBufferPtr
+
+
+
+ +

◆ Reset()

+ +
+
+ + + + + + + +
void Reset ()
+
+ +

Definition at line 104 of file BufferManager.cpp.

+ +

References armnn::swap().

+ +

Referenced by ProfilingService::GetSendTimelinePacket(), and BufferManager::~BufferManager().

+
105 {
106  //This method should only be called once all threads have been joined
107  std::lock_guard<std::mutex> readableListLock(m_ReadableMutex);
108  std::lock_guard<std::mutex> availableListLock(m_AvailableMutex);
109 
110  m_AvailableList.clear();
111  std::queue<IPacketBufferPtr>().swap(m_ReadableList);
112 
113  Initialize();
114 }
void swap(OriginsDescriptor &first, OriginsDescriptor &second)
+
+
+
+ +

◆ SetConsumer()

+ +
+
+ + + + + +
+ + + + + + + + +
void SetConsumer (IConsumerconsumer)
+
+overridevirtual
+
+ +

Set Consumer on the buffer manager to be notified when there is a Commit Can only be one consumer.

+ +

Implements IBufferManager.

+ +

Definition at line 150 of file BufferManager.cpp.

+ +

Referenced by BufferManager::~BufferManager().

+
151 {
152  m_Consumer = consumer;
153 }
+
+
+
The documentation for this class was generated from the following files: +
+
+ + + + -- cgit v1.2.1