25 uint16_t categoryRecordCount;
26 uint16_t counterSetRecordCount;
27 uint16_t deviceRecordCount;
33 std::cout <<
"Counter directory packet received." << std::endl;
37 const unsigned char* data = packet.
GetData();
74 std::vector<uint32_t> deviceRecordOffsets(deviceRecordCount);
75 std::vector<uint32_t> counterSetOffsets(counterSetRecordCount);
76 std::vector<uint32_t> categoryOffsets(categoryRecordCount);
78 for (uint32_t i = 0; i < deviceRecordCount; ++i)
84 for (uint32_t i = 0; i < counterSetRecordCount; ++i)
90 for (uint32_t i = 0; i < categoryRecordCount; ++i)
96 for (uint32_t deviceIndex = 0; deviceIndex < deviceRecordCount; ++deviceIndex)
98 uint32_t deviceRecordOffset = offset + deviceRecordOffsets[deviceIndex];
113 deviceRecordOffset += nameOffset;
115 const std::string& deviceName = GetStringNameFromBuffer(data, deviceRecordOffset);
117 m_UidTranslation[registeredDevice->
m_Uid] = deviceUid;
120 for (uint32_t counterSetIndex = 0; counterSetIndex < counterSetRecordCount; ++counterSetIndex)
122 uint32_t counterSetOffset = offset + counterSetOffsets[counterSetIndex];
140 m_CounterDirectory.
RegisterCounterSet(GetStringNameFromBuffer(data, counterSetOffset), counterSetCount);
141 m_UidTranslation[counterSet->m_Uid] = counterSetUid;
143 ReadCategoryRecords(data, offset, categoryOffsets);
146 void DirectoryCaptureCommandHandler::ReadCategoryRecords(
const unsigned char*
const data,
148 std::vector<uint32_t> categoryOffsets)
150 uint32_t categoryRecordCount =
static_cast<uint32_t
>(categoryOffsets.size());
152 for (uint32_t categoryIndex = 0; categoryIndex < categoryRecordCount; ++categoryIndex)
154 uint32_t categoryRecordOffset = offset + categoryOffsets[categoryIndex];
173 std::vector<uint32_t> eventRecordsOffsets(eventCount);
175 eventPointerTableOffset += categoryRecordOffset;
177 for (uint32_t eventIndex = 0; eventIndex < eventCount; ++eventIndex)
179 eventRecordsOffsets[eventIndex] =
183 const std::vector<CounterDirectoryEventRecord>& eventRecords =
184 ReadEventRecords(data, categoryRecordOffset, eventRecordsOffsets);
188 GetStringNameFromBuffer(data, categoryRecordOffset + nameOffset));
189 for (
auto& counter : eventRecords)
192 counter.m_CounterUid,
194 counter.m_CounterClass,
195 counter.m_CounterInterpolation,
196 counter.m_CounterMultiplier,
197 counter.m_CounterName,
198 counter.m_CounterDescription,
199 counter.m_CounterUnits);
200 m_UidTranslation[registeredCounter->
m_Uid] = counter.m_CounterUid;
205 std::vector<CounterDirectoryEventRecord> DirectoryCaptureCommandHandler::ReadEventRecords(
206 const unsigned char* data, uint32_t offset, std::vector<uint32_t> eventRecordsOffsets)
208 uint32_t eventCount =
static_cast<uint32_t
>(eventRecordsOffsets.size());
210 std::vector<CounterDirectoryEventRecord> eventRecords(eventCount);
211 for (
unsigned long i = 0; i < eventCount; ++i)
213 uint32_t eventRecordOffset = eventRecordsOffsets[i] + offset;
250 uint32_t multiplier[2] = { 0u, 0u };
257 std::memcpy(&eventRecords[i].m_CounterMultiplier, &multiplier,
sizeof(multiplier));
280 eventRecords[i].m_CounterName = GetStringNameFromBuffer(data, eventRecordOffset);
282 eventRecords[i].m_CounterDescription = GetStringNameFromBuffer(data, eventRecordOffset + descriptionOffset);
284 eventRecords[i].m_CounterUnits = GetStringNameFromBuffer(data, eventRecordOffset + unitsOffset);
292 if (!m_QuietOperation)
294 std::cout <<
"Counter directory packet received." << std::endl;
301 m_AlreadyParsed =
true;
304 if (!m_QuietOperation)
312 return m_CounterDirectory;
315 std::string DirectoryCaptureCommandHandler::GetStringNameFromBuffer(
const unsigned char*
const data, uint32_t offset)
317 std::string deviceName;
320 while (isprint(nextChar))
322 deviceName +=
static_cast<char>(nextChar);
const Category * RegisterCategory(const std::string &categoryName) override
const Counter * RegisterCounter(const BackendId &backendId, const uint16_t uid, const std::string &parentCategoryName, uint16_t counterClass, uint16_t interpolation, double multiplier, const std::string &name, const std::string &description, const Optional< std::string > &units=EmptyOptional(), const Optional< uint16_t > &numberOfCores=EmptyOptional(), const Optional< uint16_t > &deviceUid=EmptyOptional(), const Optional< uint16_t > &counterSetUid=EmptyOptional()) override
void operator()(const armnn::profiling::Packet &packet) override
uint16_t ReadUint16(const IPacketBufferPtr &packetBuffer, unsigned int offset)
uint8_t ReadUint8(const IPacketBufferPtr &packetBuffer, unsigned int offset)
Copyright (c) 2020 ARM Limited.
bool ParsedCounterDirectory()
uint32_t ReadUint32(const IPacketBufferPtr &packetBuffer, unsigned int offset)
uint32_t GetLength() const
const Device * RegisterDevice(const std::string &deviceName, uint16_t cores=0, const Optional< std::string > &parentCategoryName=EmptyOptional()) override
const CounterSet * RegisterCounterSet(const std::string &counterSetName, uint16_t count=0, const Optional< std::string > &parentCategoryName=EmptyOptional()) override
const unsigned char * GetData() const
const ICounterDirectory & GetCounterDirectory() const
void PrintCounterDirectory(ICounterDirectory &counterDirectory)