diff options
Diffstat (limited to 'profiling/client/src/BufferManager.cpp')
-rw-r--r-- | profiling/client/src/BufferManager.cpp | 35 |
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) |