blob: bbe7bcf6ef14d9dd2451b0a34763bc55a64a051a [file] [log] [blame]
//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//
#pragma once
#include <atomic>
#include <string>
#include <vector>
namespace armnn
{
namespace profiling
{
class Device
{
public:
uint16_t m_Uid;
std::string m_Name;
uint16_t m_Cores;
};
class Counter
{
public:
uint16_t m_Uid;
uint16_t m_MaxCounterUid;
uint16_t m_Class;
uint16_t m_Interpolation;
float m_Multiplier;
std::string m_Name;
std::string m_Description;
std::string m_Units;
};
class Category
{
public:
std::string m_Name;
};
class CounterDirectory final
{
public:
CounterDirectory(uint16_t uid,
const std::string& name,
uint16_t deviceCount,
uint16_t counterCount,
uint16_t categoryCount);
~CounterDirectory() = default;
uint16_t GetUid() const;
const std::string& GetName() const;
uint16_t GetDeviceCount() const;
uint16_t GetCounterCount() const;
uint16_t GetCategoryCount() const;
void GetDeviceValue(uint16_t index, uint32_t& value) const;
void SetDeviceValue(uint16_t index, uint32_t value);
void GetDeviceObject(uint16_t index, Device* counter) const;
void SetDeviceObject(uint16_t index, Device* counter);
void GetCounterValue(uint16_t index, uint32_t& value) const;
void SetCounterValue(uint16_t index, uint32_t value);
void GetCounterObject(uint16_t index, Counter* counter) const;
void SetCounterObject(uint16_t index, Counter* counter);
void GetCategoryValue(uint16_t index, uint32_t& value) const;
void SetCategoryValue(uint16_t index, uint32_t value);
void GetCategoryObject(uint16_t index, Category* counter) const;
void SetCategoryObject(uint16_t index, Category* counter);
private:
uint16_t m_Uid;
std::string m_Name;
uint16_t m_DeviceCount;
uint16_t m_CounterCount;
uint16_t m_CategoryCount;
std::vector<std::atomic<uint32_t>> m_DeviceIds;
std::vector<std::atomic<uint32_t>> m_CounterIds;
std::vector<std::atomic<uint32_t>> m_CategoryIds;
std::vector<std::atomic<Device*>> m_DeviceObjects;
std::vector<std::atomic<Counter*>> m_CounterObjects;
std::vector<std::atomic<Category*>> m_CategoryObjects;
void CheckDeviceIndex(uint16_t index) const;
void CheckCounterIndex(uint16_t index) const;
void CheckCategoryIndex(uint16_t index) const;
};
} // namespace profiling
} // namespace armnn