From 6398a98ac273931cc0b3ab33222d255d1edf48b0 Mon Sep 17 00:00:00 2001 From: Jim Flynn Date: Wed, 27 May 2020 17:05:21 +0100 Subject: IVGCVSW-4900 Update Timeline Directory Message with new fields Change-Id: I68097e176f7471a18498492b50339e68004dddd5 Signed-off-by: Jim Flynn --- src/profiling/test/TimelineModel.hpp | 130 +++++++++++++++++++++++++++++++++-- 1 file changed, 126 insertions(+), 4 deletions(-) (limited to 'src/profiling/test/TimelineModel.hpp') diff --git a/src/profiling/test/TimelineModel.hpp b/src/profiling/test/TimelineModel.hpp index 7b88d5fa2c..a6d62ce3e8 100644 --- a/src/profiling/test/TimelineModel.hpp +++ b/src/profiling/test/TimelineModel.hpp @@ -1,13 +1,15 @@ // -// Copyright © 2020 Arm Ltd. All rights reserved. +// Copyright © 2020 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once #include +#include #include +#include #include namespace armnn @@ -18,11 +20,76 @@ namespace profiling using LabelMap = std::map; using Attribute = std::pair; using Attributes = std::map; +class Entity; +class Connection +{ +public: + Connection(uint64_t guid, Entity* head, Entity* tail) : + m_Guid(guid), m_HeadEntity(head), m_TailEntity(tail) + { + if (head == nullptr) + { + std::stringstream ss; + ss << "connection [" << guid << "] head cannot be null"; + throw armnnProfiling::ProfilingException(ss.str()); + } + if (tail == nullptr) + { + std::stringstream ss; + ss << "connection [" << guid << "] tail cannot be null"; + throw armnnProfiling::ProfilingException(ss.str()); + } + } + + uint64_t GetGuid() const {return m_Guid;} + const Entity* GetHead() const {return m_HeadEntity;} + const Entity* GetTail() const {return m_TailEntity;} +private: + uint64_t m_Guid; + Entity* m_HeadEntity; + Entity* m_TailEntity; +}; +class EventClassObj +{ +public: + EventClassObj(uint64_t guid, const std::string& name) : m_Guid(guid), m_Name(name) {} + uint64_t GetGuid() const {return m_Guid;} + const std::string& GetName() const {return m_Name;} +private: + uint64_t m_Guid; + std::string m_Name; +}; +class EventObj +{ +public: + EventObj(uint64_t guid, uint64_t timestamp, uint64_t threadId) : + m_Guid(guid), m_TimeStamp(timestamp), m_ThreadId(threadId) {} + uint64_t GetGuid() const {return m_Guid;} + uint64_t GetTimeStamp() const {return m_TimeStamp;} + uint64_t GetThreadId() const {return m_ThreadId;} + void SetEventClass(EventClassObj* evtClass) {m_EventClass = evtClass;} + std::string GetEventClass() + { + if (m_EventClass == nullptr) + { + return ""; + } + else + { + return m_EventClass->GetName(); + } + } +private: + uint64_t m_Guid; + uint64_t m_TimeStamp; + uint64_t m_ThreadId; + EventClassObj* m_EventClass; +}; class Entity { public: Entity(uint64_t guid) : m_Guid(guid) {} - uint64_t GetGuid() {return m_Guid;} + uint64_t GetGuid() const {return m_Guid;} void AddChild(Entity* child) { if (child != nullptr) @@ -35,10 +102,36 @@ public: Attribute attr(type, value); m_Attributes.emplace(type, attr); } + void AddConnection(const Connection& connection) + { + m_Connections.push_back(connection); + } + void AddExecution(Entity* execution) + { + if (execution != nullptr) + { + m_Executions.push_back(execution); + } + } + void AddEvent(EventObj* event) + { + if (event != nullptr) + { + m_Events.push_back(event); + } + } + const Attributes& GetAttributes() const {return m_Attributes;} + const std::vector& GetChildren() const {return m_Children;} + const std::vector& GetConnections() const {return m_Connections;} + const std::vector& GetExecutions() const {return m_Executions;} + const std::vector& GetEvents() const {return m_Events;} private: uint64_t m_Guid; Attributes m_Attributes; std::vector m_Children; + std::vector m_Connections; + std::vector m_Executions; + std::vector m_Events; }; using Entities = std::map; struct ModelRelationship @@ -48,20 +141,49 @@ struct ModelRelationship std::vector m_RelatedEntities; }; using Relationships = std::map; +using EventClasses = std::map; +using Events = std::map; class TimelineModel { public: void AddLabel(const ITimelineDecoder::Label& label); + std::string* FindLabel(uint64_t guid); void AddEntity(uint64_t guid); - Entity* findEntity(uint64_t id); + Entity* FindEntity(uint64_t id); void AddRelationship(const ITimelineDecoder::Relationship& relationship); - ModelRelationship* findRelationship(uint64_t id); + ModelRelationship* FindRelationship(uint64_t id); + const LabelMap& GetLabelMap() const {return m_LabelMap;} + const Entities& GetEntities() const {return m_Entities;} + const std::vector& GetErrors() const {return m_Errors;} + bool IsInferenceGuid(uint64_t guid) const; + void AddEventClass(const ITimelineDecoder::EventClass& eventClass); + const EventClasses& GetEventClasses() const {return m_EventClasses;} + EventClassObj* FindEventClass(uint64_t id); + void AddEvent(const ITimelineDecoder::Event& event); + EventObj* FindEvent(uint64_t id); private: LabelMap m_LabelMap; Entities m_Entities; Relationships m_Relationships; + std::vector m_Errors; + std::vector m_InferenceGuids; + EventClasses m_EventClasses; + Events m_Events; + + void HandleLabelLink(const ITimelineDecoder::Relationship& relationship); + void HandleConnection(const ITimelineDecoder::Relationship& relationship); + void HandleChild(const ITimelineDecoder::Relationship& relationship); + void HandleExecutionOf(const ITimelineDecoder::Relationship& relationship); + void HandleExecutionLink(const ITimelineDecoder::Relationship& relationship); }; +std::vector GetModelDescription(const TimelineModel& model); +std::string GetEntityDescription(const Entity& entity); +std::string GetChildDescription(Entity* entity); +std::string GetConnectionDescription(const Connection& connection); +std::string GetExecutionDescription(Entity* execution); +std::string GetEventDescription(EventObj* event); + } // namespace profiling } // namespace armnn \ No newline at end of file -- cgit v1.2.1