diff options
author | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-11-08 11:23:06 +0000 |
---|---|---|
committer | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-11-15 15:34:20 +0000 |
commit | cdfb9417ddce28a5cbd33f8049a147168a26aa9b (patch) | |
tree | 925ebcb589cff2a118cd47dfbaf5d1a5daf058ea /tests/profiling/gatordmock/StreamMetadataCommandHandler.cpp | |
parent | 34a407d4a95830ff9fad05e2bff34dcfc631c931 (diff) | |
download | armnn-cdfb9417ddce28a5cbd33f8049a147168a26aa9b.tar.gz |
IVGCVSW-4073 Send stream info in the ConnectionAcknowledgedCommandHandler
* Added call to ISendTimelinePacket::SendStreamMetaDataPacket
* Added call to ISendTimelinePacket::SendTimelineMessageDirectoryPackage
* Added new StreamMetadataCommandHandler class to the mock Gatord service
* Updated code and unit tests
* Added include paths to the gatord mock target
Signed-off-by: Matteo Martincigh <matteo.martincigh@arm.com>
Change-Id: Ic6d200b513175884607b7c0563cbfa4942ff2fc6
Diffstat (limited to 'tests/profiling/gatordmock/StreamMetadataCommandHandler.cpp')
-rw-r--r-- | tests/profiling/gatordmock/StreamMetadataCommandHandler.cpp | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/tests/profiling/gatordmock/StreamMetadataCommandHandler.cpp b/tests/profiling/gatordmock/StreamMetadataCommandHandler.cpp new file mode 100644 index 0000000000..09255a57a1 --- /dev/null +++ b/tests/profiling/gatordmock/StreamMetadataCommandHandler.cpp @@ -0,0 +1,127 @@ +// +// Copyright © 2019 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "StreamMetadataCommandHandler.hpp" + +#include <ProfilingUtils.hpp> + +#include <boost/cast.hpp> + +#include <sstream> +#include <iostream> + +using namespace armnn::profiling; + +namespace armnn +{ + +namespace gatordmock +{ + +void StreamMetadataCommandHandler::operator()(const Packet& packet) +{ + ParseData(packet); + + if (m_QuietOperation) + { + return; + } + + std::stringstream ss; + + ss << "Stream metadata packet received" << std::endl << std::endl; + + ss << "Pipe magic: " << m_PipeMagic << std::endl; + ss << "Stream metadata version: " << m_StreamMetadataVersion << std::endl; + ss << "Max data len: " << m_MaxDataLen << std::endl; + ss << "Pid: " << m_Pid << std::endl; + ss << "Software info: " << m_SoftwareInfo << std::endl; + ss << "Hardware version: " << m_HardwareVersion << std::endl; + ss << "Software version: " << m_SoftwareVersion << std::endl; + ss << "Process name: " << m_ProcessName << std::endl; + ss << "Packet versions: " << m_PacketVersionTable.size() << std::endl; + + for (const auto& packetVersion : m_PacketVersionTable) + { + ss << "-----------------------" << std::endl; + ss << "Packet family: " << packetVersion.m_PacketFamily << std::endl; + ss << "Packet id: " << packetVersion.m_PacketId << std::endl; + ss << "Packet version: " << packetVersion.m_PacketVersion << std::endl; + } + + std::cout << ss.str() << std::endl; +} + +std::string ReadString(const unsigned char* buffer, unsigned int &offset) +{ + const char* stringPtr = reinterpret_cast<const char*>(&buffer[offset]); + return stringPtr != nullptr ? std::string(stringPtr) : ""; +} + +void StreamMetadataCommandHandler::ParseData(const Packet &packet) +{ + // Check that at least the packet contains the fixed-length fields + if (packet.GetLength() < 80) + { + return; + } + + // Utils + unsigned int uint16_t_size = sizeof(uint16_t); + unsigned int uint32_t_size = sizeof(uint32_t); + + const unsigned char* buffer = packet.GetData(); + unsigned int offset = 0; + + // Get the fixed-length fields + m_PipeMagic = ReadUint32(buffer, offset); + offset += uint32_t_size; + m_StreamMetadataVersion = ReadUint32(buffer, offset); + offset += uint32_t_size; + m_MaxDataLen = ReadUint32(buffer, offset); + offset += uint32_t_size; + m_Pid = ReadUint32(buffer, offset); + offset += uint32_t_size; + m_OffsetInfo = ReadUint32(buffer, offset); + offset += uint32_t_size; + m_OffsetHwVersion = ReadUint32(buffer, offset); + offset += uint32_t_size; + m_OffsetSwVersion = ReadUint32(buffer, offset); + offset += uint32_t_size; + m_OffsetProcessName = ReadUint32(buffer, offset); + offset += uint32_t_size; + m_OffsetPacketVersionTable = ReadUint32(buffer, offset); + offset += uint32_t_size * 2; // Also skipping the reserved word (all zeros) + + // Get the string fields + m_SoftwareInfo = m_OffsetInfo > 0 ? ReadString(buffer, m_OffsetInfo) : ""; + m_HardwareVersion = m_OffsetHwVersion > 0 ? ReadString(buffer, m_OffsetHwVersion) : ""; + m_SoftwareVersion = m_OffsetSwVersion > 0 ? ReadString(buffer, m_OffsetSwVersion) : ""; + m_ProcessName = m_OffsetProcessName > 0 ? ReadString(buffer, m_OffsetProcessName) : ""; + + // Get the packet versions + m_PacketVersionTable.clear(); + if (m_OffsetPacketVersionTable > 0) + { + offset = m_OffsetPacketVersionTable; + uint16_t packetEntries = ReadUint16(buffer, offset + uint16_t_size); + offset += uint32_t_size; // Also skipping the reserved bytes (all zeros) + for (uint16_t i = 0; i < packetEntries; i++) + { + uint16_t packetFamilyAndId = ReadUint16(buffer, offset + uint16_t_size); + uint16_t packetFamily = (packetFamilyAndId >> 10) & 0x003F; + uint16_t packetId = (packetFamilyAndId >> 0) & 0x03FF; + offset += uint32_t_size; // Also skipping the reserved bytes (all zeros) + uint32_t packetVersion = ReadUint32(buffer, offset); + offset += uint32_t_size; + + m_PacketVersionTable.push_back({ packetFamily, packetId, packetVersion }); + } + } +} + +} // namespace gatordmock + +} // namespace armnn |