diff options
author | Narumol Prangnawarat <narumol.prangnawarat@arm.com> | 2019-09-24 17:23:16 +0100 |
---|---|---|
committer | Narumol Prangnawarat <narumol.prangnawarat@arm.com> | 2019-09-26 22:52:32 +0100 |
commit | 404b27569523f4cdd49752e7ae1633e359ba2190 (patch) | |
tree | b2acd65aae6b285cbacfafe7a83b8873a1a5e79e /src/profiling/SendCounterPacket.cpp | |
parent | e4ffe399de3445a1ecaf0ea8da7ff4f06ec878d3 (diff) | |
download | armnn-404b27569523f4cdd49752e7ae1633e359ba2190.tar.gz |
IVGCVSW-3902 Create IReadOnlyPacketBuffer, IPacketBuffer and IBufferManager interfaces
* Create IReadOnlyPacketBuffer, IPacketBuffer and IBufferManager interfaces
* Add Read and Write util functions that use IPacketBuffer
* Add MockBufferManager using IBufferManager for testing
* Modify SendCounterPacket to use IBufferManager
* Modify MockStreamCounterBuffer to use IBufferManager
* Remove IBufferWrapper and MockBuffer
* Add MockPacketBuffer for testing
* Modify unit tests to use the new interfaces
Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com>
Change-Id: Ib86768187e032f07169aa39367a418b7665c9f03
Diffstat (limited to 'src/profiling/SendCounterPacket.cpp')
-rw-r--r-- | src/profiling/SendCounterPacket.cpp | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/src/profiling/SendCounterPacket.cpp b/src/profiling/SendCounterPacket.cpp index b222270546..33eaeabc3e 100644 --- a/src/profiling/SendCounterPacket.cpp +++ b/src/profiling/SendCounterPacket.cpp @@ -65,11 +65,12 @@ void SendCounterPacket::SendStreamMetaDataPacket() uint32_t offset = 0; uint32_t reserved = 0; - unsigned char *writeBuffer = m_Buffer.Reserve(totalSize, reserved); + std::unique_ptr<IPacketBuffer> writeBuffer = m_BufferManager.Reserve(totalSize, reserved); if (reserved < totalSize) { CancelOperationAndThrow<BufferExhaustion>( + writeBuffer, boost::str(boost::format("No space left in buffer. Unable to reserve (%1%) bytes.") % totalSize)); } @@ -120,25 +121,25 @@ void SendCounterPacket::SendStreamMetaDataPacket() if (infoSize) { - memcpy(&writeBuffer[offset], info.c_str(), infoSize); + memcpy(&writeBuffer->GetWritableData()[offset], info.c_str(), infoSize); offset += infoSize; } if (hardwareVersionSize) { - memcpy(&writeBuffer[offset], hardwareVersion.c_str(), hardwareVersionSize); + memcpy(&writeBuffer->GetWritableData()[offset], hardwareVersion.c_str(), hardwareVersionSize); offset += hardwareVersionSize; } if (softwareVersionSize) { - memcpy(&writeBuffer[offset], softwareVersion.c_str(), softwareVersionSize); + memcpy(&writeBuffer->GetWritableData()[offset], softwareVersion.c_str(), softwareVersionSize); offset += softwareVersionSize; } if (processNameSize) { - memcpy(&writeBuffer[offset], processName.c_str(), processNameSize); + memcpy(&writeBuffer->GetWritableData()[offset], processName.c_str(), processNameSize); offset += processNameSize; } @@ -170,10 +171,10 @@ void SendCounterPacket::SendStreamMetaDataPacket() } catch(...) { - CancelOperationAndThrow<RuntimeException>("Error processing packet."); + CancelOperationAndThrow<RuntimeException>(writeBuffer, "Error processing packet."); } - m_Buffer.Commit(totalSize); + m_BufferManager.Commit(writeBuffer, totalSize); } bool SendCounterPacket::CreateCategoryRecord(const CategoryPtr& category, @@ -792,12 +793,13 @@ void SendCounterPacket::SendCounterDirectoryPacket(const ICounterDirectory& coun // Reserve space in the buffer for the packet uint32_t reserved = 0; - unsigned char* writeBuffer = m_Buffer.Reserve(totalSize, reserved); + std::unique_ptr<IPacketBuffer> writeBuffer = m_BufferManager.Reserve(totalSize, reserved); // Check that the reserved buffer size is enough to hold the counter directory packet if (reserved < totalSize) { CancelOperationAndThrow<BufferExhaustion>( + writeBuffer, boost::str(boost::format("No space left in buffer. Unable to reserve (%1%) bytes") % totalSize)); } @@ -818,7 +820,7 @@ void SendCounterPacket::SendCounterDirectoryPacket(const ICounterDirectory& coun offset += numeric_cast<uint32_t>(uint32_t_size); } - m_Buffer.Commit(totalSize); + m_BufferManager.Commit(writeBuffer, totalSize); } void SendCounterPacket::SendPeriodicCounterCapturePacket(uint64_t timestamp, const IndexValuePairsVector& values) @@ -833,11 +835,12 @@ void SendCounterPacket::SendPeriodicCounterCapturePacket(uint64_t timestamp, con uint32_t offset = 0; uint32_t reserved = 0; - unsigned char* writeBuffer = m_Buffer.Reserve(totalSize, reserved); + std::unique_ptr<IPacketBuffer> writeBuffer = m_BufferManager.Reserve(totalSize, reserved); if (reserved < totalSize) { CancelOperationAndThrow<BufferExhaustion>( + writeBuffer, boost::str(boost::format("No space left in buffer. Unable to reserve (%1%) bytes.") % totalSize)); } @@ -868,7 +871,7 @@ void SendCounterPacket::SendPeriodicCounterCapturePacket(uint64_t timestamp, con offset += numeric_cast<uint32_t>(sizeof(uint32_t)); } - m_Buffer.Commit(totalSize); + m_BufferManager.Commit(writeBuffer, totalSize); } void SendCounterPacket::SendPeriodicCounterSelectionPacket(uint32_t capturePeriod, @@ -883,11 +886,12 @@ void SendCounterPacket::SendPeriodicCounterSelectionPacket(uint32_t capturePerio uint32_t offset = 0; uint32_t reserved = 0; - unsigned char* writeBuffer = m_Buffer.Reserve(totalSize, reserved); + std::unique_ptr<IPacketBuffer> writeBuffer = m_BufferManager.Reserve(totalSize, reserved); if (reserved < totalSize) { CancelOperationAndThrow<BufferExhaustion>( + writeBuffer, boost::str(boost::format("No space left in buffer. Unable to reserve (%1%) bytes.") % totalSize)); } @@ -914,7 +918,7 @@ void SendCounterPacket::SendPeriodicCounterSelectionPacket(uint32_t capturePerio offset += numeric_cast<uint32_t>(sizeof(uint16_t)); } - m_Buffer.Commit(totalSize); + m_BufferManager.Commit(writeBuffer, totalSize); } void SendCounterPacket::SetReadyToRead() @@ -973,9 +977,17 @@ void SendCounterPacket::Send() } // Wait condition lock scope - End + + + std::unique_ptr<IPacketBuffer> packetBuffer = m_BufferManager.GetReadableBuffer(); + if (packetBuffer == nullptr) + { + continue; + } + const unsigned char* readBuffer = packetBuffer->GetReadableData(); // Get the data to send from the buffer - unsigned int readBufferSize = 0; - const unsigned char* readBuffer = m_Buffer.GetReadBuffer(readBufferSize); + unsigned int readBufferSize = packetBuffer->GetSize(); + if (readBuffer == nullptr || readBufferSize == 0) { // Nothing to send, ignore and continue @@ -988,6 +1000,8 @@ void SendCounterPacket::Send() // Write a packet to the profiling connection. Silently ignore any write error and continue m_ProfilingConnection.WritePacket(readBuffer, boost::numeric_cast<uint32_t>(readBufferSize)); } + + m_BufferManager.MarkRead(packetBuffer); } // Mark the send thread as not running |