aboutsummaryrefslogtreecommitdiff
path: root/profiling/client/src/BufferManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'profiling/client/src/BufferManager.cpp')
-rw-r--r--profiling/client/src/BufferManager.cpp35
1 files changed, 34 insertions, 1 deletions
diff --git a/profiling/client/src/BufferManager.cpp b/profiling/client/src/BufferManager.cpp
index 42e32009e4..592d374817 100644
--- a/profiling/client/src/BufferManager.cpp
+++ b/profiling/client/src/BufferManager.cpp
@@ -24,19 +24,25 @@ BufferManager::BufferManager(unsigned int numberOfBuffers, unsigned int maxPacke
IPacketBufferPtr BufferManager::Reserve(unsigned int requestedSize, unsigned int& reservedSize)
{
reservedSize = 0;
+#if !defined(ARMNN_DISABLE_THREADS)
std::unique_lock<std::mutex> availableListLock(m_AvailableMutex, std::defer_lock);
+#endif
if (requestedSize > m_MaxBufferSize)
{
return nullptr;
}
+#if !defined(ARMNN_DISABLE_THREADS)
availableListLock.lock();
+#endif
if (m_AvailableList.empty())
{
if (m_CurrentNumberOfBuffers < m_MaxNumberOfBuffers)
{
// create a temporary overflow/surge buffer and hand it back
m_CurrentNumberOfBuffers++;
+#if !defined(ARMNN_DISABLE_THREADS)
availableListLock.unlock();
+#endif
IPacketBufferPtr buffer = std::make_unique<PacketBuffer>(m_MaxBufferSize);
reservedSize = requestedSize;
return buffer;
@@ -44,25 +50,34 @@ IPacketBufferPtr BufferManager::Reserve(unsigned int requestedSize, unsigned int
else
{
// we have totally busted the limit. call a halt to new memory allocations.
+#if !defined(ARMNN_DISABLE_THREADS)
availableListLock.unlock();
+#endif
return nullptr;
}
}
IPacketBufferPtr buffer = std::move(m_AvailableList.back());
m_AvailableList.pop_back();
+#if !defined(ARMNN_DISABLE_THREADS)
availableListLock.unlock();
+#endif
reservedSize = requestedSize;
return buffer;
}
void BufferManager::Commit(IPacketBufferPtr& packetBuffer, unsigned int size, bool notifyConsumer)
{
+#if !defined(ARMNN_DISABLE_THREADS)
std::unique_lock<std::mutex> readableListLock(m_ReadableMutex, std::defer_lock);
+#endif
packetBuffer->Commit(size);
+#if !defined(ARMNN_DISABLE_THREADS)
readableListLock.lock();
+#endif
m_ReadableList.push(std::move(packetBuffer));
+#if !defined(ARMNN_DISABLE_THREADS)
readableListLock.unlock();
-
+#endif
if (notifyConsumer)
{
FlushReadList();
@@ -82,9 +97,13 @@ void BufferManager::Initialize()
void BufferManager::Release(IPacketBufferPtr& packetBuffer)
{
+#if !defined(ARMNN_DISABLE_THREADS)
std::unique_lock<std::mutex> availableListLock(m_AvailableMutex, std::defer_lock);
+#endif
packetBuffer->Release();
+#if !defined(ARMNN_DISABLE_THREADS)
availableListLock.lock();
+#endif
if (m_AvailableList.size() <= m_NumberOfBuffers)
{
m_AvailableList.push_back(std::move(packetBuffer));
@@ -98,14 +117,18 @@ void BufferManager::Release(IPacketBufferPtr& packetBuffer)
--m_CurrentNumberOfBuffers;
}
}
+#if !defined(ARMNN_DISABLE_THREADS)
availableListLock.unlock();
+#endif
}
void BufferManager::Reset()
{
//This method should only be called once all threads have been joined
+#if !defined(ARMNN_DISABLE_THREADS)
std::lock_guard<std::mutex> readableListLock(m_ReadableMutex);
std::lock_guard<std::mutex> availableListLock(m_AvailableMutex);
+#endif
m_AvailableList.clear();
std::queue<IPacketBufferPtr>().swap(m_ReadableList);
@@ -115,12 +138,16 @@ void BufferManager::Reset()
IPacketBufferPtr BufferManager::GetReadableBuffer()
{
+#if !defined(ARMNN_DISABLE_THREADS)
std::unique_lock<std::mutex> readableListLock(m_ReadableMutex);
+#endif
if (!m_ReadableList.empty())
{
IPacketBufferPtr buffer = std::move(m_ReadableList.front());
m_ReadableList.pop();
+#if !defined(ARMNN_DISABLE_THREADS)
readableListLock.unlock();
+#endif
return buffer;
}
return nullptr;
@@ -128,9 +155,13 @@ IPacketBufferPtr BufferManager::GetReadableBuffer()
void BufferManager::MarkRead(IPacketBufferPtr& packetBuffer)
{
+#if !defined(ARMNN_DISABLE_THREADS)
std::unique_lock<std::mutex> availableListLock(m_AvailableMutex, std::defer_lock);
+#endif
packetBuffer->MarkRead();
+#if !defined(ARMNN_DISABLE_THREADS)
availableListLock.lock();
+#endif
if (m_AvailableList.size() <= m_NumberOfBuffers)
{
m_AvailableList.push_back(std::move(packetBuffer));
@@ -144,7 +175,9 @@ void BufferManager::MarkRead(IPacketBufferPtr& packetBuffer)
--m_CurrentNumberOfBuffers;
}
}
+#if !defined(ARMNN_DISABLE_THREADS)
availableListLock.unlock();
+#endif
}
void BufferManager::SetConsumer(IConsumer* consumer)