diff options
author | Sadik Armagan <sadik.armagan@arm.com> | 2020-02-10 12:24:15 +0000 |
---|---|---|
committer | Sadik Armagan <sadik.armagan@arm.com> | 2020-02-10 14:08:54 +0000 |
commit | 3896b47a3532aadcde43a3e7fed760a0f4a29e6b (patch) | |
tree | a22d1b6d5b2df7518c9116dd48a7ca1990b3ae66 /src/profiling/BufferManager.cpp | |
parent | 03181ff73f4b37d2132f15c4bd229a148840cc15 (diff) | |
download | armnn-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.cpp | 21 |
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 |