aboutsummaryrefslogtreecommitdiff
path: root/src/profiling/BufferManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/profiling/BufferManager.cpp')
-rw-r--r--src/profiling/BufferManager.cpp38
1 files changed, 26 insertions, 12 deletions
diff --git a/src/profiling/BufferManager.cpp b/src/profiling/BufferManager.cpp
index 6481c5e9cb..b24bf4b5b0 100644
--- a/src/profiling/BufferManager.cpp
+++ b/src/profiling/BufferManager.cpp
@@ -5,9 +5,6 @@
#include "BufferManager.hpp"
#include "PacketBuffer.hpp"
-#include "ProfilingUtils.hpp"
-
-#include <armnn/Exceptions.hpp>
namespace armnn
{
@@ -16,15 +13,10 @@ namespace profiling
{
BufferManager::BufferManager(unsigned int numberOfBuffers, unsigned int maxPacketSize)
- : m_MaxBufferSize(maxPacketSize)
+ : m_MaxBufferSize(maxPacketSize),
+ m_NumberOfBuffers(numberOfBuffers)
{
- m_AvailableList.reserve(numberOfBuffers);
- for (unsigned int i = 0; i < numberOfBuffers; ++i)
- {
- IPacketBufferPtr buffer = std::make_unique<PacketBuffer>(maxPacketSize);
- m_AvailableList.emplace_back(std::move(buffer));
- }
- m_ReadableList.reserve(numberOfBuffers);
+ Initialize();
}
IPacketBufferPtr BufferManager::Reserve(unsigned int requestedSize, unsigned int& reservedSize)
@@ -55,7 +47,17 @@ void BufferManager::Commit(IPacketBufferPtr& packetBuffer, unsigned int size)
readableListLock.lock();
m_ReadableList.push_back(std::move(packetBuffer));
readableListLock.unlock();
- m_ReadDataAvailable.notify_one();
+}
+
+void BufferManager::Initialize()
+{
+ m_AvailableList.reserve(m_NumberOfBuffers);
+ for (unsigned int i = 0; i < m_NumberOfBuffers; ++i)
+ {
+ IPacketBufferPtr buffer = std::make_unique<PacketBuffer>(m_MaxBufferSize);
+ m_AvailableList.emplace_back(std::move(buffer));
+ }
+ m_ReadableList.reserve(m_NumberOfBuffers);
}
void BufferManager::Release(IPacketBufferPtr& packetBuffer)
@@ -67,6 +69,18 @@ void BufferManager::Release(IPacketBufferPtr& packetBuffer)
availableListLock.unlock();
}
+void BufferManager::Reset()
+{
+ //This method should only be called once all threads have been joined
+ std::lock_guard<std::mutex> readableListLock(m_ReadableMutex);
+ std::lock_guard<std::mutex> availableListLock(m_AvailableMutex);
+
+ m_AvailableList.clear();
+ m_ReadableList.clear();
+
+ Initialize();
+}
+
IPacketBufferPtr BufferManager::GetReadableBuffer()
{
std::unique_lock<std::mutex> readableListLock(m_ReadableMutex);