diff options
author | Finn Williams <Finn.Williams@arm.com> | 2019-12-19 17:05:18 +0000 |
---|---|---|
committer | Finn Williams <Finn.Williams@arm.com> | 2020-01-14 12:39:05 +0000 |
commit | 09ad6f909f25aef02b7f53bba320b534b9260786 (patch) | |
tree | e69f6d9d4b15b0c7e106c5f6749dd77586247a75 /src/profiling/BufferManager.cpp | |
parent | f90c56d72de4848a2dc5844a97458aaf09df07c2 (diff) | |
download | armnn-09ad6f909f25aef02b7f53bba320b534b9260786.tar.gz |
IVGCVSW-4229 Fix Intermittent failures in ExternalProfiling
* Added a BufferManager.Reset() method to prevent packets being retained after a test
* Fixed a bug causing the send thread to wait needlessly before moving to active state
* Refactored SendCoundPacketTests and ProfilingTests test helper classes
* Fixed issue where WaitForPacketSent could miss a notification and timeout
Signed-off-by: Finn Williams <Finn.Williams@arm.com>
Change-Id: I353a652260c2f7dd465baa9e979e22f50f3ca6a7
Diffstat (limited to 'src/profiling/BufferManager.cpp')
-rw-r--r-- | src/profiling/BufferManager.cpp | 38 |
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); |