From 7388217c07ccbd387d3bcfbde76cca744c4fd6fe Mon Sep 17 00:00:00 2001 From: Ferran Balaguer Date: Mon, 2 Sep 2019 16:39:42 +0100 Subject: IVGCVSW-3693 Implement SendCounterPacket.SendPeriodicCounterSelectionPacket() function Signed-off-by: Ferran Balaguer Change-Id: Ib034a4f5ca589759d925e3dd0ca50e5a3dfa74c5 --- src/profiling/test/SendCounterPacketTests.cpp | 87 ++++++++++++++++++++++++--- 1 file changed, 77 insertions(+), 10 deletions(-) (limited to 'src/profiling/test') diff --git a/src/profiling/test/SendCounterPacketTests.cpp b/src/profiling/test/SendCounterPacketTests.cpp index 9a314c1fdc..42a261bafb 100644 --- a/src/profiling/test/SendCounterPacketTests.cpp +++ b/src/profiling/test/SendCounterPacketTests.cpp @@ -3,12 +3,14 @@ // SPDX-License-Identifier: MIT // -#include "../IBufferWrapper.hpp" -#include "../ISendCounterPacket.hpp" +#include "../SendCounterPacket.hpp" +#include "../ProfilingUtils.hpp" + +#include -#include #include +#include BOOST_AUTO_TEST_SUITE(SendCounterPacketTests) @@ -17,7 +19,9 @@ using namespace armnn::profiling; class MockBuffer : public IBufferWrapper { public: - MockBuffer() : m_Buffer() {} + MockBuffer(unsigned int size) + : m_BufferSize(size), + m_Buffer(std::make_unique(size)) {} unsigned char* Reserve(unsigned int requestedSize, unsigned int& reservedSize) override { @@ -30,22 +34,22 @@ public: reservedSize = requestedSize; } - return m_Buffer; + return m_Buffer.get(); } void Commit(unsigned int size) override {} const unsigned char* GetReadBuffer(unsigned int& size) override { - size = static_cast(strlen(reinterpret_cast(m_Buffer)) + 1); - return m_Buffer; + size = static_cast(strlen(reinterpret_cast(m_Buffer.get())) + 1); + return m_Buffer.get(); } void Release( unsigned int size) override {} private: - static const unsigned int m_BufferSize = 512; - unsigned char m_Buffer[m_BufferSize]; + unsigned int m_BufferSize; + std::unique_ptr m_Buffer; }; class MockSendCounterPacket : public ISendCounterPacket @@ -99,7 +103,7 @@ BOOST_AUTO_TEST_CASE(MockSendCounterPacketTest) { unsigned int size = 0; - MockBuffer mockBuffer; + MockBuffer mockBuffer(512); MockSendCounterPacket sendCounterPacket(mockBuffer); sendCounterPacket.SendStreamMetaDataPacket(); @@ -128,4 +132,67 @@ BOOST_AUTO_TEST_CASE(MockSendCounterPacketTest) } +BOOST_AUTO_TEST_CASE(SendPeriodicCounterSelectionPacketTest) +{ + // Error no space left in buffer + MockBuffer mockBuffer1(10); + SendCounterPacket sendPacket1(mockBuffer1); + + uint32_t capturePeriod = 1000; + std::vector selectedCounterIds; + BOOST_CHECK_THROW(sendPacket1.SendPeriodicCounterSelectionPacket(capturePeriod, selectedCounterIds), + armnn::Exception); + + // Packet without any counters + MockBuffer mockBuffer2(512); + SendCounterPacket sendPacket2(mockBuffer2); + + sendPacket2.SendPeriodicCounterSelectionPacket(capturePeriod, selectedCounterIds); + unsigned int sizeRead = 0; + const unsigned char* readBuffer2 = mockBuffer2.GetReadBuffer(sizeRead); + + uint32_t headerWord0 = ReadUint32(readBuffer2, 0); + uint32_t headerWord1 = ReadUint32(readBuffer2, 4); + uint32_t period = ReadUint32(readBuffer2, 8); + + BOOST_TEST(((headerWord0 >> 26) & 0x3F) == 0); // packet family + BOOST_TEST(((headerWord0 >> 16) & 0x3FF) == 4); // packet id + BOOST_TEST(headerWord1 == 4); // data lenght + BOOST_TEST(period == 1000); // capture period + + // Full packet message + MockBuffer mockBuffer3(512); + SendCounterPacket sendPacket3(mockBuffer3); + + selectedCounterIds.reserve(5); + selectedCounterIds.emplace_back(100); + selectedCounterIds.emplace_back(200); + selectedCounterIds.emplace_back(300); + selectedCounterIds.emplace_back(400); + selectedCounterIds.emplace_back(500); + sendPacket3.SendPeriodicCounterSelectionPacket(capturePeriod, selectedCounterIds); + sizeRead = 0; + const unsigned char* readBuffer3 = mockBuffer3.GetReadBuffer(sizeRead); + + headerWord0 = ReadUint32(readBuffer3, 0); + headerWord1 = ReadUint32(readBuffer3, 4); + period = ReadUint32(readBuffer3, 8); + + BOOST_TEST(((headerWord0 >> 26) & 0x3F) == 0); // packet family + BOOST_TEST(((headerWord0 >> 16) & 0x3FF) == 4); // packet id + BOOST_TEST(headerWord1 == 14); // data lenght + BOOST_TEST(period == 1000); // capture period + + uint16_t counterId = 0; + uint32_t offset = 12; + + // Counter Ids + for(const uint16_t& id : selectedCounterIds) + { + counterId = ReadUint16(readBuffer3, offset); + BOOST_TEST(counterId == id); + offset += 2; + } +} + BOOST_AUTO_TEST_SUITE_END() -- cgit v1.2.1