aboutsummaryrefslogtreecommitdiff
path: root/src/profiling/BufferManager.cpp
diff options
context:
space:
mode:
authorSadik Armagan <sadik.armagan@arm.com>2020-02-10 12:24:15 +0000
committerSadik Armagan <sadik.armagan@arm.com>2020-02-10 14:08:54 +0000
commit3896b47a3532aadcde43a3e7fed760a0f4a29e6b (patch)
treea22d1b6d5b2df7518c9116dd48a7ca1990b3ae66 /src/profiling/BufferManager.cpp
parent03181ff73f4b37d2132f15c4bd229a148840cc15 (diff)
downloadarmnn-3896b47a3532aadcde43a3e7fed760a0f4a29e6b.tar.gz
IVGCVSW-4328 BufferManager running out of buffers crashes application
* Refactored SendCounterPacket classes, separated SendCounterPacket from Send thread * Created ISendThread.hpp, IConsumer, SendThread.hpp and SendThread.cpp * Injected IConsumer to BufferManager to notify SendThread when packet is ready to read Signed-off-by: Sadik Armagan <sadik.armagan@arm.com> Change-Id: I80f0bb8b8401c6bfd1611f7760217c6fe35d7ad8
Diffstat (limited to 'src/profiling/BufferManager.cpp')
-rw-r--r--src/profiling/BufferManager.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/profiling/BufferManager.cpp b/src/profiling/BufferManager.cpp
index b24bf4b5b0..f5ab729259 100644
--- a/src/profiling/BufferManager.cpp
+++ b/src/profiling/BufferManager.cpp
@@ -40,13 +40,18 @@ IPacketBufferPtr BufferManager::Reserve(unsigned int requestedSize, unsigned int
return buffer;
}
-void BufferManager::Commit(IPacketBufferPtr& packetBuffer, unsigned int size)
+void BufferManager::Commit(IPacketBufferPtr& packetBuffer, unsigned int size, bool notifyConsumer)
{
std::unique_lock<std::mutex> readableListLock(m_ReadableMutex, std::defer_lock);
packetBuffer->Commit(size);
readableListLock.lock();
m_ReadableList.push_back(std::move(packetBuffer));
readableListLock.unlock();
+
+ if (notifyConsumer)
+ {
+ FlushReadList();
+ }
}
void BufferManager::Initialize()
@@ -103,6 +108,20 @@ void BufferManager::MarkRead(IPacketBufferPtr& packetBuffer)
availableListLock.unlock();
}
+void BufferManager::SetConsumer(IConsumer* consumer)
+{
+ m_Consumer = consumer;
+}
+
+void BufferManager::FlushReadList()
+{
+ // notify consumer that packet is ready to read
+ if (m_Consumer != nullptr)
+ {
+ m_Consumer->SetReadyToRead();
+ }
+}
+
} // namespace profiling
} // namespace armnn