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];
185 std::vector<uint32_t> eventRecordsOffsets(eventCount);
187 eventPointerTableOffset += categoryRecordOffset;
189 for (uint32_t eventIndex = 0; eventIndex < eventCount; ++eventIndex)
191 eventRecordsOffsets[eventIndex] =
195 const std::vector<CounterDirectoryEventRecord>& eventRecords =
196 ReadEventRecords(data, categoryRecordOffset, eventRecordsOffsets);
200 GetStringNameFromBuffer(data, categoryRecordOffset + nameOffset), deviceUid, counterSetUid);
201 for (
auto& counter : eventRecords)
204 counter.m_CounterUid,
206 counter.m_CounterClass,
207 counter.m_CounterInterpolation,
208 counter.m_CounterMultiplier,
209 counter.m_CounterName,
210 counter.m_CounterDescription,
211 counter.m_CounterUnits);
212 m_UidTranslation[registeredCounter->
m_Uid] = counter.m_CounterUid;
217 std::vector<CounterDirectoryEventRecord> DirectoryCaptureCommandHandler::ReadEventRecords(
218 const unsigned char* data, uint32_t offset, std::vector<uint32_t> eventRecordsOffsets)
220 uint32_t eventCount =
static_cast<uint32_t
>(eventRecordsOffsets.size());
222 std::vector<CounterDirectoryEventRecord> eventRecords(eventCount);
223 for (
unsigned long i = 0; i < eventCount; ++i)
225 uint32_t eventRecordOffset = eventRecordsOffsets[i] + offset;
262 uint32_t multiplier[2] = { 0u, 0u };
269 std::memcpy(&eventRecords[i].m_CounterMultiplier, &multiplier,
sizeof(multiplier));
292 eventRecords[i].m_CounterName = GetStringNameFromBuffer(data, eventRecordOffset);
294 eventRecords[i].m_CounterDescription = GetStringNameFromBuffer(data, eventRecordOffset + descriptionOffset);
296 eventRecords[i].m_CounterUnits = GetStringNameFromBuffer(data, eventRecordOffset + unitsOffset);
304 if (!m_QuietOperation)
306 std::cout <<
"Counter directory packet received." << std::endl;
313 m_AlreadyParsed =
true;
316 if (!m_QuietOperation)
324 return m_CounterDirectory;
327 std::string DirectoryCaptureCommandHandler::GetStringNameFromBuffer(
const unsigned char*
const data, uint32_t offset)
329 std::string deviceName;
332 while (isprint(nextChar))
334 deviceName +=
static_cast<char>(nextChar);
void PrintCounterDirectory(ICounterDirectory &counterDirectory)
const Category * RegisterCategory(const std::string &categoryName, const Optional< uint16_t > &deviceUid=EmptyOptional(), const Optional< uint16_t > &counterSetUid=EmptyOptional()) override
uint16_t ReadUint16(const IPacketBufferPtr &packetBuffer, unsigned int offset)
void operator()(const armnn::profiling::Packet &packet) override
const Device * RegisterDevice(const std::string &deviceName, uint16_t cores=0, const Optional< std::string > &parentCategoryName=EmptyOptional()) 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
bool ParsedCounterDirectory()
uint32_t GetLength() const
const ICounterDirectory & GetCounterDirectory() const
uint32_t ReadUint32(const IPacketBufferPtr &packetBuffer, unsigned int offset)
uint8_t ReadUint8(const IPacketBufferPtr &packetBuffer, unsigned int offset)
const unsigned char * GetData() const
const CounterSet * RegisterCounterSet(const std::string &counterSetName, uint16_t count=0, const Optional< std::string > &parentCategoryName=EmptyOptional()) override