blob: a84897995d1ca0533f40a6c271ca519c6bb9d246 [file] [log] [blame]
//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//
#include "CounterDirectory.hpp"
#include <armnn/Exceptions.hpp>
namespace armnn
{
namespace profiling
{
CounterDirectory::CounterDirectory(uint16_t uid,
const std::string& name,
uint16_t deviceCount,
uint16_t counterCount,
uint16_t categoryCount)
: m_Uid(uid)
, m_Name(name)
, m_DeviceCount(deviceCount)
, m_CounterCount(counterCount)
, m_CategoryCount(categoryCount)
, m_DeviceIds(deviceCount)
, m_CounterIds(counterCount)
, m_CategoryIds(categoryCount)
, m_DeviceObjects(deviceCount)
, m_CounterObjects(counterCount)
, m_CategoryObjects(categoryCount)
{}
// Helper methods
void CounterDirectory::CheckDeviceIndex(uint16_t index) const
{
if (index >= m_DeviceCount)
{
throw InvalidArgumentException("Invalid device index");
}
}
void CounterDirectory::CheckCounterIndex(uint16_t index) const
{
if (index >= m_CounterCount)
{
throw InvalidArgumentException("Invalid counter index");
}
}
void CounterDirectory::CheckCategoryIndex(uint16_t index) const
{
if (index >= m_CategoryCount)
{
throw InvalidArgumentException("Invalid category index");
}
}
// Getters for basic attributes
uint16_t CounterDirectory::GetUid() const
{
return m_Uid;
}
const std::string& CounterDirectory::GetName() const
{
return m_Name;
}
// Getters for counts
uint16_t CounterDirectory::GetDeviceCount() const
{
return m_DeviceCount;
}
uint16_t CounterDirectory::GetCounterCount() const
{
return m_CounterCount;
}
uint16_t CounterDirectory::GetCategoryCount() const
{
return m_CategoryCount;
}
// Getters and setters for devices
void CounterDirectory::GetDeviceValue(uint16_t index, uint32_t& value) const
{
CheckDeviceIndex(index);
value = m_DeviceIds[index].load();
}
void CounterDirectory::SetDeviceValue(uint16_t index, uint32_t value)
{
CheckDeviceIndex(index);
m_DeviceIds[index].store(value);
}
void CounterDirectory::GetDeviceObject(uint16_t index, Device* device) const
{
CheckDeviceIndex(index);
device = m_DeviceObjects[index].load();
}
void CounterDirectory::SetDeviceObject(uint16_t index, Device* device)
{
CheckDeviceIndex(index);
m_DeviceObjects[index].store(device);
}
// Getters and setters for counters
void CounterDirectory::GetCounterValue(uint16_t index, uint32_t& value) const
{
CheckCounterIndex(index);
value = m_CounterIds[index].load();
}
void CounterDirectory::SetCounterValue(uint16_t index, uint32_t value)
{
CheckCounterIndex(index);
m_CounterIds[index].store(value);
}
void CounterDirectory::GetCounterObject(uint16_t index, Counter* counter) const
{
CheckCounterIndex(index);
counter = m_CounterObjects[index].load();
}
void CounterDirectory::SetCounterObject(uint16_t index, Counter* counter)
{
CheckCounterIndex(index);
m_CounterObjects[index].store(counter);
}
// Getters and setters for categories
void CounterDirectory::GetCategoryValue(uint16_t index, uint32_t& value) const
{
CheckCategoryIndex(index);
value = m_CategoryIds[index].load();
}
void CounterDirectory::SetCategoryValue(uint16_t index, uint32_t value)
{
CheckCategoryIndex(index);
m_CategoryIds[index].store(value);
}
void CounterDirectory::GetCategoryObject(uint16_t index, Category* category) const
{
CheckCategoryIndex(index);
category = m_CategoryObjects[index].load();
}
void CounterDirectory::SetCategoryObject(uint16_t index, Category* category)
{
CheckCategoryIndex(index);
m_CategoryObjects[index].store(category);
}
} // namespace profiling
} // namespace armnn