1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2020 Arm Ltd and Contributors. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker 6*89c4ff92SAndroid Build Coastguard Worker #pragma once 7*89c4ff92SAndroid Build Coastguard Worker 8*89c4ff92SAndroid Build Coastguard Worker #include <cstdint> 9*89c4ff92SAndroid Build Coastguard Worker #include <string> 10*89c4ff92SAndroid Build Coastguard Worker 11*89c4ff92SAndroid Build Coastguard Worker namespace arm 12*89c4ff92SAndroid Build Coastguard Worker { 13*89c4ff92SAndroid Build Coastguard Worker 14*89c4ff92SAndroid Build Coastguard Worker namespace pipe 15*89c4ff92SAndroid Build Coastguard Worker { 16*89c4ff92SAndroid Build Coastguard Worker 17*89c4ff92SAndroid Build Coastguard Worker class ITimelineDecoder 18*89c4ff92SAndroid Build Coastguard Worker { 19*89c4ff92SAndroid Build Coastguard Worker 20*89c4ff92SAndroid Build Coastguard Worker public: 21*89c4ff92SAndroid Build Coastguard Worker 22*89c4ff92SAndroid Build Coastguard Worker enum class TimelineStatus 23*89c4ff92SAndroid Build Coastguard Worker { 24*89c4ff92SAndroid Build Coastguard Worker TimelineStatus_Success, 25*89c4ff92SAndroid Build Coastguard Worker TimelineStatus_Fail 26*89c4ff92SAndroid Build Coastguard Worker }; 27*89c4ff92SAndroid Build Coastguard Worker 28*89c4ff92SAndroid Build Coastguard Worker enum class RelationshipType 29*89c4ff92SAndroid Build Coastguard Worker { 30*89c4ff92SAndroid Build Coastguard Worker RetentionLink, /// Head retains(parents) Tail 31*89c4ff92SAndroid Build Coastguard Worker ExecutionLink, /// Head execution start depends on Tail execution completion 32*89c4ff92SAndroid Build Coastguard Worker DataLink, /// Head uses data of Tail 33*89c4ff92SAndroid Build Coastguard Worker LabelLink /// Head uses label Tail (Tail MUST be a guid of a label). 34*89c4ff92SAndroid Build Coastguard Worker }; 35*89c4ff92SAndroid Build Coastguard Worker GetRelationshipAsCString(RelationshipType rType)36*89c4ff92SAndroid Build Coastguard Worker static char const* GetRelationshipAsCString(RelationshipType rType) 37*89c4ff92SAndroid Build Coastguard Worker { 38*89c4ff92SAndroid Build Coastguard Worker switch (rType) 39*89c4ff92SAndroid Build Coastguard Worker { 40*89c4ff92SAndroid Build Coastguard Worker case RelationshipType::RetentionLink: return "RetentionLink"; 41*89c4ff92SAndroid Build Coastguard Worker case RelationshipType::ExecutionLink: return "ExecutionLink"; 42*89c4ff92SAndroid Build Coastguard Worker case RelationshipType::DataLink: return "DataLink"; 43*89c4ff92SAndroid Build Coastguard Worker case RelationshipType::LabelLink: return "LabelLink"; 44*89c4ff92SAndroid Build Coastguard Worker default: return "Unknown"; 45*89c4ff92SAndroid Build Coastguard Worker } 46*89c4ff92SAndroid Build Coastguard Worker } 47*89c4ff92SAndroid Build Coastguard Worker 48*89c4ff92SAndroid Build Coastguard Worker struct Entity 49*89c4ff92SAndroid Build Coastguard Worker { 50*89c4ff92SAndroid Build Coastguard Worker uint64_t m_Guid; 51*89c4ff92SAndroid Build Coastguard Worker }; 52*89c4ff92SAndroid Build Coastguard Worker 53*89c4ff92SAndroid Build Coastguard Worker struct EventClass 54*89c4ff92SAndroid Build Coastguard Worker { 55*89c4ff92SAndroid Build Coastguard Worker uint64_t m_Guid; 56*89c4ff92SAndroid Build Coastguard Worker uint64_t m_NameGuid; 57*89c4ff92SAndroid Build Coastguard Worker }; 58*89c4ff92SAndroid Build Coastguard Worker 59*89c4ff92SAndroid Build Coastguard Worker struct Event 60*89c4ff92SAndroid Build Coastguard Worker { 61*89c4ff92SAndroid Build Coastguard Worker uint64_t m_Guid; 62*89c4ff92SAndroid Build Coastguard Worker uint64_t m_TimeStamp; 63*89c4ff92SAndroid Build Coastguard Worker uint64_t m_ThreadId; 64*89c4ff92SAndroid Build Coastguard Worker }; 65*89c4ff92SAndroid Build Coastguard Worker 66*89c4ff92SAndroid Build Coastguard Worker struct Label 67*89c4ff92SAndroid Build Coastguard Worker { 68*89c4ff92SAndroid Build Coastguard Worker uint64_t m_Guid; 69*89c4ff92SAndroid Build Coastguard Worker std::string m_Name; 70*89c4ff92SAndroid Build Coastguard Worker }; 71*89c4ff92SAndroid Build Coastguard Worker 72*89c4ff92SAndroid Build Coastguard Worker struct Relationship 73*89c4ff92SAndroid Build Coastguard Worker { 74*89c4ff92SAndroid Build Coastguard Worker RelationshipType m_RelationshipType; 75*89c4ff92SAndroid Build Coastguard Worker uint64_t m_Guid; 76*89c4ff92SAndroid Build Coastguard Worker uint64_t m_HeadGuid; 77*89c4ff92SAndroid Build Coastguard Worker uint64_t m_TailGuid; 78*89c4ff92SAndroid Build Coastguard Worker uint64_t m_AttributeGuid; 79*89c4ff92SAndroid Build Coastguard Worker }; 80*89c4ff92SAndroid Build Coastguard Worker 81*89c4ff92SAndroid Build Coastguard Worker virtual ~ITimelineDecoder() = default; 82*89c4ff92SAndroid Build Coastguard Worker 83*89c4ff92SAndroid Build Coastguard Worker virtual TimelineStatus CreateEntity(const Entity&) = 0; 84*89c4ff92SAndroid Build Coastguard Worker virtual TimelineStatus CreateEventClass(const EventClass&) = 0; 85*89c4ff92SAndroid Build Coastguard Worker virtual TimelineStatus CreateEvent(const Event&) = 0; 86*89c4ff92SAndroid Build Coastguard Worker virtual TimelineStatus CreateLabel(const Label&) = 0; 87*89c4ff92SAndroid Build Coastguard Worker virtual TimelineStatus CreateRelationship(const Relationship&) = 0; 88*89c4ff92SAndroid Build Coastguard Worker }; 89*89c4ff92SAndroid Build Coastguard Worker 90*89c4ff92SAndroid Build Coastguard Worker } // namespace pipe 91*89c4ff92SAndroid Build Coastguard Worker } // namespace arm 92