blob: 14e7a94383b7dcde621fd7dda36e64cbbb2c8a46 [file] [log] [blame]
//
// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
#pragma once
#include "GatordMockService.hpp"
#include "MockUtils.hpp"
#include <common/include/Packet.hpp>
#include <common/include/CommandHandlerFunctor.hpp>
#include "SendCounterPacket.hpp"
#include "IPeriodicCounterCapture.hpp"
#include <vector>
#include <thread>
#include <atomic>
#include <iostream>
#include <functional>
namespace armnn
{
namespace gatordmock
{
struct EventRecord
{
uint16_t m_CounterUid;
uint16_t m_MaxCounterUid;
uint16_t m_DeviceUid;
uint16_t m_CounterSetUid;
uint16_t m_CounterClass;
uint16_t m_CounterInterpolation;
double m_CounterMultiplier;
std::string m_CounterName;
std::string m_CounterDescription;
std::string m_CounterUnits;
static void printHeader(std::string categoryName)
{
std::string header;
header.append(gatordmock::CentreAlignFormatting("Counter Name", 20));
header.append(" | ");
header.append(gatordmock::CentreAlignFormatting("Description", 50));
header.append(" | ");
header.append(gatordmock::CentreAlignFormatting("Units", 14));
header.append(" | ");
header.append(gatordmock::CentreAlignFormatting("UID", 6));
header.append(" | ");
header.append(gatordmock::CentreAlignFormatting("Max UID",10));
header.append(" | ");
header.append(gatordmock::CentreAlignFormatting("Class", 8));
header.append(" | ");
header.append(gatordmock::CentreAlignFormatting("Interpolation", 14));
header.append(" | ");
header.append(gatordmock::CentreAlignFormatting("Multiplier", 20));
header.append(" | ");
header.append(gatordmock::CentreAlignFormatting("Counter set UID", 16));
header.append(" | ");
header.append(gatordmock::CentreAlignFormatting("Device UID", 14));
header.append("\n");
std::cout << "\n" << "\n";
std::cout << gatordmock::CentreAlignFormatting("EVENTS IN CATEGORY: " + categoryName,
static_cast<int>(header.size()));
std::cout << "\n";
std::cout << std::string(header.size(), '=') << "\n";
std::cout << header;
}
void printContents() const
{
std::string body;
body.append(gatordmock::CentreAlignFormatting(m_CounterName, 20));
body.append(" | ");
body.append(gatordmock::CentreAlignFormatting(m_CounterDescription, 50));
body.append(" | ");
body.append(gatordmock::CentreAlignFormatting(m_CounterUnits, 14));
body.append(" | ");
body.append(gatordmock::CentreAlignFormatting(std::to_string(m_CounterUid), 6));
body.append(" | ");
body.append(gatordmock::CentreAlignFormatting(std::to_string(m_MaxCounterUid), 10));
body.append(" | ");
body.append(gatordmock::CentreAlignFormatting(std::to_string(m_CounterClass), 8));
body.append(" | ");
body.append(gatordmock::CentreAlignFormatting(std::to_string(m_CounterInterpolation), 14));
body.append(" | ");
body.append(gatordmock::CentreAlignFormatting(std::to_string(m_CounterMultiplier), 20));
body.append(" | ");
body.append(gatordmock::CentreAlignFormatting(std::to_string(m_CounterSetUid), 16));
body.append(" | ");
body.append(gatordmock::CentreAlignFormatting(std::to_string(m_DeviceUid), 14));
body.append("\n");
std::cout << std::string(body.size(), '-') << "\n";
std::cout << body;
}
};
struct CategoryRecord
{
uint16_t m_EventCount;
std::string m_CategoryName;
std::vector<EventRecord> m_EventRecords;
void print() const
{
std::string body;
std::string header;
header.append(gatordmock::CentreAlignFormatting("Name", 20));
header.append(" | ");
header.append(gatordmock::CentreAlignFormatting("Event Count", 14));
header.append("\n");
body.append(gatordmock::CentreAlignFormatting(m_CategoryName, 20));
body.append(" | ");
body.append(gatordmock::CentreAlignFormatting(std::to_string(m_EventCount), 14));
std::cout << "\n" << "\n";
std::cout << gatordmock::CentreAlignFormatting("CATEGORY", static_cast<int>(header.size()));
std::cout << "\n";
std::cout << std::string(header.size(), '=') << "\n";
std::cout<< header;
std::cout << std::string(body.size(), '-') << "\n";
std::cout<< body;
if(m_EventRecords.size() > 0)
{
EventRecord::printHeader(m_CategoryName);
std::for_each(m_EventRecords.begin(), m_EventRecords.end(), std::mem_fun_ref(&EventRecord::printContents));
}
}
};
struct CounterSetRecord
{
uint16_t m_CounterSetUid;
uint16_t m_CounterSetCount;
std::string m_CounterSetName;
static void printHeader()
{
std::string header;
header.append(gatordmock::CentreAlignFormatting("Counter set name", 20));
header.append(" | ");
header.append(gatordmock::CentreAlignFormatting("UID",13));
header.append(" | ");
header.append(gatordmock::CentreAlignFormatting("Count",10));
header.append("\n");
std::cout << "\n" << "\n";
std::cout << gatordmock::CentreAlignFormatting("COUNTER SETS", static_cast<int>(header.size()));
std::cout << "\n";
std::cout << std::string(header.size(), '=') << "\n";
std::cout<< header;
}
void printContents() const
{
std::string body;
body.append(gatordmock::CentreAlignFormatting(m_CounterSetName, 20));
body.append(" | ");
body.append(gatordmock::CentreAlignFormatting(std::to_string(m_CounterSetUid), 13));
body.append(" | ");
body.append(gatordmock::CentreAlignFormatting(std::to_string(m_CounterSetCount), 10));
body.append("\n");
std::cout << std::string(body.size(), '-') << "\n";
std::cout<< body;
}
};
struct DeviceRecord
{
uint16_t m_DeviceUid;
uint16_t m_DeviceCores;
std::string m_DeviceName;
static void printHeader()
{
std::string header;
header.append(gatordmock::CentreAlignFormatting("Device name", 20));
header.append(" | ");
header.append(gatordmock::CentreAlignFormatting("UID",13));
header.append(" | ");
header.append(gatordmock::CentreAlignFormatting("Cores",10));
header.append("\n");
std::cout << "\n" << "\n";
std::cout << gatordmock::CentreAlignFormatting("DEVICES", static_cast<int>(header.size()));
std::cout << "\n";
std::cout << std::string(header.size(), '=') << "\n";
std::cout<< header;
}
void printContents() const
{
std::string body;
body.append(gatordmock::CentreAlignFormatting(m_DeviceName, 20));
body.append(" | ");
body.append(gatordmock::CentreAlignFormatting(std::to_string(m_DeviceUid), 13));
body.append(" | ");
body.append(gatordmock::CentreAlignFormatting(std::to_string(m_DeviceCores), 10));
body.append("\n");
std::cout << std::string(body.size(), '-') << "\n";
std::cout<< body;
}
};
struct CounterDirectory
{
std::vector<CategoryRecord> m_Categories;
std::vector<CounterSetRecord> m_CounterSets;
std::vector<DeviceRecord> m_DeviceRecords;
void print() const
{
DeviceRecord::printHeader();
std::for_each(m_DeviceRecords.begin(), m_DeviceRecords.end(),
std::mem_fun_ref(&DeviceRecord::printContents));
CounterSetRecord::printHeader();
std::for_each(m_CounterSets.begin(), m_CounterSets.end(),
std::mem_fun_ref(&CounterSetRecord::printContents));
std::for_each(m_Categories.begin(), m_Categories.end(),
std::mem_fun_ref(&CategoryRecord::print));
std::cout << "\n";
}
};
} // namespace gatordmock
} // namespace armnn