// // Copyright © 2019 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #include "PeriodicCounterSelectionCommandHandler.hpp" #include "ProfilingUtils.hpp" #include namespace armnn { namespace profiling { using namespace std; using boost::numeric_cast; void PeriodicCounterSelectionCommandHandler::ParseData(const Packet& packet, CaptureData& captureData) { std::vector counterIds; uint32_t sizeOfUint32 = numeric_cast(sizeof(uint32_t)); uint32_t sizeOfUint16 = numeric_cast(sizeof(uint16_t)); uint32_t offset = 0; if (packet.GetLength() > 0) { if (packet.GetLength() >= 4) { captureData.SetCapturePeriod(ReadUint32(reinterpret_cast(packet.GetData()), offset)); unsigned int counters = (packet.GetLength() - 4) / 2; if (counters > 0) { counterIds.reserve(counters); offset += sizeOfUint32; for(unsigned int pos = 0; pos < counters; ++pos) { counterIds.emplace_back(ReadUint16(reinterpret_cast(packet.GetData()), offset)); offset += sizeOfUint16; } } captureData.SetCounterIds(counterIds); } } } void PeriodicCounterSelectionCommandHandler::operator()(const Packet& packet) { CaptureData captureData; ParseData(packet, captureData); vector counterIds = captureData.GetCounterIds(); m_CaptureDataHolder.SetCaptureData(captureData.GetCapturePeriod(), counterIds); m_CaptureThread.Start(); // Write packet to Counter Stream Buffer m_SendCounterPacket.SendPeriodicCounterSelectionPacket(captureData.GetCapturePeriod(), captureData.GetCounterIds()); } } // namespace profiling } // namespace armnn