From 6940dd720ebb6b3d1df8ca203ab696daefe58189 Mon Sep 17 00:00:00 2001 From: Jim Flynn Date: Fri, 20 Mar 2020 12:25:56 +0000 Subject: renamed Documentation folder 20.02 and added .nojekyll file Signed-off-by: Jim Flynn --- ...lassarmnn_1_1profiling_1_1_buffer_manager.xhtml | 507 +++++++++++++++++++++ 1 file changed, 507 insertions(+) create mode 100644 20.02/classarmnn_1_1profiling_1_1_buffer_manager.xhtml (limited to '20.02/classarmnn_1_1profiling_1_1_buffer_manager.xhtml') diff --git a/20.02/classarmnn_1_1profiling_1_1_buffer_manager.xhtml b/20.02/classarmnn_1_1profiling_1_1_buffer_manager.xhtml new file mode 100644 index 0000000000..549449def8 --- /dev/null +++ b/20.02/classarmnn_1_1profiling_1_1_buffer_manager.xhtml @@ -0,0 +1,507 @@ + + + + + + + + + + + + + +ArmNN: BufferManager Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + ArmNN + + + +
+
+  20.02 +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
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 21 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 {
19  Initialize();
20 }
bool Initialize()
Performs any required one-time setup.
+
+
+
+ +

◆ ~BufferManager()

+ + +

Member Function Documentation

+ +

◆ Commit()

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

Implements IBufferManager.

+ +

Definition at line 43 of file BufferManager.cpp.

+ +

References BufferManager::FlushReadList().

+ +

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

+
44 {
45  std::unique_lock<std::mutex> readableListLock(m_ReadableMutex, std::defer_lock);
46  packetBuffer->Commit(size);
47  readableListLock.lock();
48  m_ReadableList.push_back(std::move(packetBuffer));
49  readableListLock.unlock();
50 
51  if (notifyConsumer)
52  {
53  FlushReadList();
54  }
55 }
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 116 of file BufferManager.cpp.

+ +

References IConsumer::SetReadyToRead().

+ +

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

+
117 {
118  // notify consumer that packet is ready to read
119  if (m_Consumer != nullptr)
120  {
121  m_Consumer->SetReadyToRead();
122  }
123 }
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 89 of file BufferManager.cpp.

+ +

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

+
90 {
91  std::unique_lock<std::mutex> readableListLock(m_ReadableMutex);
92  if (!m_ReadableList.empty())
93  {
94  IPacketBufferPtr buffer = std::move(m_ReadableList.back());
95  m_ReadableList.pop_back();
96  readableListLock.unlock();
97  return buffer;
98  }
99  return nullptr;
100 }
std::unique_ptr< IPacketBuffer > IPacketBufferPtr
+
+
+
+ +

◆ MarkRead()

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

Implements IBufferManager.

+ +

Definition at line 102 of file BufferManager.cpp.

+ +

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

+
103 {
104  std::unique_lock<std::mutex> availableListLock(m_AvailableMutex, std::defer_lock);
105  packetBuffer->MarkRead();
106  availableListLock.lock();
107  m_AvailableList.push_back(std::move(packetBuffer));
108  availableListLock.unlock();
109 }
+
+
+ +

◆ Release()

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

Implements IBufferManager.

+ +

Definition at line 68 of file BufferManager.cpp.

+ +

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

+
69 {
70  std::unique_lock<std::mutex> availableListLock(m_AvailableMutex, std::defer_lock);
71  packetBuffer->Release();
72  availableListLock.lock();
73  m_AvailableList.push_back(std::move(packetBuffer));
74  availableListLock.unlock();
75 }
+
+
+ +

◆ Reserve()

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

Implements IBufferManager.

+ +

Definition at line 22 of file BufferManager.cpp.

+ +

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

+
23 {
24  reservedSize = 0;
25  std::unique_lock<std::mutex> availableListLock(m_AvailableMutex, std::defer_lock);
26  if (requestedSize > m_MaxBufferSize)
27  {
28  return nullptr;
29  }
30  availableListLock.lock();
31  if (m_AvailableList.empty())
32  {
33  availableListLock.unlock();
34  return nullptr;
35  }
36  IPacketBufferPtr buffer = std::move(m_AvailableList.back());
37  m_AvailableList.pop_back();
38  availableListLock.unlock();
39  reservedSize = requestedSize;
40  return buffer;
41 }
std::unique_ptr< IPacketBuffer > IPacketBufferPtr
+
+
+
+ +

◆ Reset()

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

Definition at line 77 of file BufferManager.cpp.

+ +

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

+
78 {
79  //This method should only be called once all threads have been joined
80  std::lock_guard<std::mutex> readableListLock(m_ReadableMutex);
81  std::lock_guard<std::mutex> availableListLock(m_AvailableMutex);
82 
83  m_AvailableList.clear();
84  m_ReadableList.clear();
85 
86  Initialize();
87 }
bool Initialize()
Performs any required one-time setup.
+
+
+
+ +

◆ 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 111 of file BufferManager.cpp.

+ +

Referenced by BufferManager::~BufferManager().

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