blob: 2924b7a2876ab02dbf90c1ca4b153c7a7086d858 [file] [log] [blame]
//
// Copyright © 2019 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//
#include "TimelineDecoder.hpp"
#include <ProfilingUtils.hpp>
#include <iostream>
namespace armnn
{
TimelineDecoder::ErrorCode TimelineDecoder::CreateEntity(const Entity &entity)
{
if (m_OnNewEntityCallback == nullptr)
{
return ErrorCode::ErrorCode_Fail;
}
m_OnNewEntityCallback(m_Model, entity);
return ErrorCode::ErrorCode_Success;
}
TimelineDecoder::ErrorCode TimelineDecoder::CreateEventClass(const EventClass &eventClass)
{
if (m_OnNewEventClassCallback == nullptr)
{
return ErrorCode::ErrorCode_Fail;
}
m_OnNewEventClassCallback(m_Model, eventClass);
return ErrorCode::ErrorCode_Success;
}
TimelineDecoder::ErrorCode TimelineDecoder::CreateEvent(const Event &event)
{
if (m_OnNewEventCallback == nullptr)
{
return ErrorCode::ErrorCode_Fail;
}
m_OnNewEventCallback(m_Model, event);
return ErrorCode::ErrorCode_Success;
}
TimelineDecoder::ErrorCode TimelineDecoder::CreateLabel(const Label &label)
{
if (m_OnNewLabelCallback == nullptr)
{
return ErrorCode::ErrorCode_Fail;
}
m_OnNewLabelCallback(m_Model, label);
return ErrorCode::ErrorCode_Success;
}
TimelineDecoder::ErrorCode TimelineDecoder::CreateRelationship(const Relationship &relationship)
{
if (m_OnNewRelationshipCallback == nullptr)
{
return ErrorCode::ErrorCode_Fail;
}
m_OnNewRelationshipCallback(m_Model, relationship);
return ErrorCode::ErrorCode_Success;
}
const TimelineDecoder::Model &TimelineDecoder::GetModel()
{
return m_Model;
}
TimelineDecoder::ErrorCode TimelineDecoder::SetEntityCallback(OnNewEntityCallback cb)
{
if (cb == nullptr)
{
return ErrorCode::ErrorCode_Fail;
}
m_OnNewEntityCallback = cb;
return ErrorCode::ErrorCode_Success;
}
TimelineDecoder::ErrorCode TimelineDecoder::SetEventClassCallback(OnNewEventClassCallback cb)
{
if (cb == nullptr)
{
return ErrorCode::ErrorCode_Fail;
}
m_OnNewEventClassCallback = cb;
return ErrorCode::ErrorCode_Success;
}
TimelineDecoder::ErrorCode TimelineDecoder::SetEventCallback(OnNewEventCallback cb)
{
if (cb == nullptr)
{
return ErrorCode::ErrorCode_Fail;
}
m_OnNewEventCallback = cb;
return ErrorCode::ErrorCode_Success;
}
TimelineDecoder::ErrorCode TimelineDecoder::SetLabelCallback(OnNewLabelCallback cb)
{
if (cb == nullptr)
{
return ErrorCode::ErrorCode_Fail;
}
m_OnNewLabelCallback = cb;
return ErrorCode::ErrorCode_Success;
}
TimelineDecoder::ErrorCode TimelineDecoder::SetRelationshipCallback(OnNewRelationshipCallback cb)
{
if (cb == nullptr)
{
return ErrorCode::ErrorCode_Fail;
}
m_OnNewRelationshipCallback = cb;
return ErrorCode::ErrorCode_Success;
}
void TimelineDecoder::print()
{
printLabels();
printEntities();
printEventClasses();
printEvents();
printRelationships();
}
void TimelineDecoder::printLabels()
{
std::string header;
header.append(profiling::CentreAlignFormatting("guid", 12));
header.append(" | ");
header.append(profiling::CentreAlignFormatting("value", 30));
header.append("\n");
std::cout << "\n" << "\n";
std::cout << profiling::CentreAlignFormatting("LABELS", static_cast<int>(header.size()));
std::cout << "\n";
std::cout << std::string(header.size(), '=') << "\n";
std::cout << header;
for (uint32_t i = 0; i < m_Model.m_Labels.size(); ++i)
{
std::string body;
body.append(profiling::CentreAlignFormatting(std::to_string(m_Model.m_Labels[i].m_Guid), 12));
body.append(" | ");
body.append(profiling::CentreAlignFormatting(m_Model.m_Labels[i].m_Name, 30));
body.append("\n");
std::cout << std::string(body.size(), '-') << "\n";
std::cout << body;
}
}
void TimelineDecoder::printEntities()
{
std::string header;
header.append(profiling::CentreAlignFormatting("guid", 12));
header.append("\n");
std::cout << "\n" << "\n";
std::cout << profiling::CentreAlignFormatting("ENTITIES", static_cast<int>(header.size()));
std::cout << "\n";
std::cout << std::string(header.size(), '=') << "\n";
std::cout << header;
for (uint32_t i = 0; i < m_Model.m_Entities.size(); ++i)
{
std::string body;
body.append(profiling::CentreAlignFormatting(std::to_string(m_Model.m_Entities[i].m_Guid), 12));
body.append("\n");
std::cout << std::string(body.size(), '-') << "\n";
std::cout << body;
}
}
void TimelineDecoder::printEventClasses()
{
std::string header;
header.append(profiling::CentreAlignFormatting("guid", 12));
header.append("\n");
std::cout << "\n" << "\n";
std::cout << profiling::CentreAlignFormatting("EVENT CLASSES", static_cast<int>(header.size()));
std::cout << "\n";
std::cout << std::string(header.size(), '=') << "\n";
std::cout << header;
for (uint32_t i = 0; i < m_Model.m_EventClasses.size(); ++i)
{
std::string body;
body.append(profiling::CentreAlignFormatting(std::to_string(m_Model.m_EventClasses[i].m_Guid), 12));
body.append("\n");
std::cout << std::string(body.size(), '-') << "\n";
std::cout << body;
}
}
void TimelineDecoder::printEvents()
{
std::string header;
header.append(profiling::CentreAlignFormatting("timestamp", 12));
header.append(" | ");
header.append(profiling::CentreAlignFormatting("threadId", 12));
header.append(" | ");
header.append(profiling::CentreAlignFormatting("eventGuid", 12));
header.append("\n");
std::cout << "\n" << "\n";
std::cout << profiling::CentreAlignFormatting("EVENTS", static_cast<int>(header.size()));
std::cout << "\n";
std::cout << std::string(header.size(), '=') << "\n";
std::cout << header;
for (uint32_t i = 0; i < m_Model.m_Events.size(); ++i)
{
std::string body;
body.append(profiling::CentreAlignFormatting(std::to_string(m_Model.m_Events[i].m_TimeStamp), 12));
body.append(" | ");
std::stringstream ss;
ss << m_Model.m_Events[i].m_ThreadId;
std::string threadId = ss.str();;
body.append(profiling::CentreAlignFormatting(threadId, 12));
body.append(" | ");
body.append(profiling::CentreAlignFormatting(std::to_string(m_Model.m_Events[i].m_Guid), 12));
body.append("\n");
std::cout << std::string(body.size(), '-') << "\n";
std::cout << body;
}
}
void TimelineDecoder::printRelationships()
{
std::string header;
header.append(profiling::CentreAlignFormatting("relationshipType", 20));
header.append(" | ");
header.append(profiling::CentreAlignFormatting("relationshipGuid", 20));
header.append(" | ");
header.append(profiling::CentreAlignFormatting("headGuid", 12));
header.append(" | ");
header.append(profiling::CentreAlignFormatting("tailGuid", 12));
header.append("\n");
std::cout << "\n" << "\n";
std::cout << profiling::CentreAlignFormatting("RELATIONSHIPS", static_cast<int>(header.size()));
std::cout << "\n";
std::cout << std::string(header.size(), '=') << "\n";
std::cout << header;
for (uint32_t i = 0; i < m_Model.m_Relationships.size(); ++i)
{
std::string body;
body.append(
profiling::CentreAlignFormatting(std::to_string(static_cast<unsigned int>
(m_Model.m_Relationships[i].m_RelationshipType)),
20));
body.append(" | ");
body.append(profiling::CentreAlignFormatting(std::to_string(m_Model.m_Relationships[i].m_Guid), 20));
body.append(" | ");
body.append(profiling::CentreAlignFormatting(std::to_string(m_Model.m_Relationships[i].m_HeadGuid), 12));
body.append(" | ");
body.append(profiling::CentreAlignFormatting(std::to_string(m_Model.m_Relationships[i].m_TailGuid), 12));
body.append(" | ");
body.append("\n");
std::cout << std::string(body.size(), '-') << "\n";
std::cout << body;
}
}
}