blob: 18b8cc70061dd2d05b1542280d0fb94a496648e3 [file] [log] [blame]
Finn Williams510f6182020-02-21 11:14:08 +00001//
Jim Flynnbbfe6032020-07-20 16:57:44 +01002// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
Finn Williams510f6182020-02-21 11:14:08 +00003// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include <cstdint>
9#include <string>
10
Jim Flynnbbfe6032020-07-20 16:57:44 +010011namespace arm
12{
13
14namespace pipe
15{
16
Finn Williams510f6182020-02-21 11:14:08 +000017class ITimelineDecoder
18{
19
20public:
21
Keith Davis97da5e22020-03-05 16:25:28 +000022 enum class TimelineStatus
Finn Williams510f6182020-02-21 11:14:08 +000023 {
Keith Davis97da5e22020-03-05 16:25:28 +000024 TimelineStatus_Success,
25 TimelineStatus_Fail
Finn Williams510f6182020-02-21 11:14:08 +000026 };
27
28 enum class RelationshipType
29 {
30 RetentionLink, /// Head retains(parents) Tail
31 ExecutionLink, /// Head execution start depends on Tail execution completion
32 DataLink, /// Head uses data of Tail
33 LabelLink /// Head uses label Tail (Tail MUST be a guid of a label).
34 };
35
Jim Flynn4e755a52020-03-29 17:48:26 +010036 static char const* GetRelationshipAsCString(RelationshipType rType)
37 {
38 switch (rType)
39 {
40 case RelationshipType::RetentionLink: return "RetentionLink";
41 case RelationshipType::ExecutionLink: return "ExecutionLink";
42 case RelationshipType::DataLink: return "DataLink";
43 case RelationshipType::LabelLink: return "LabelLink";
44 default: return "Unknown";
45 }
46 }
47
Finn Williams510f6182020-02-21 11:14:08 +000048 struct Entity
49 {
50 uint64_t m_Guid;
51 };
52
53 struct EventClass
54 {
55 uint64_t m_Guid;
Jim Flynn1892d212020-05-26 21:10:49 +010056 uint64_t m_NameGuid;
Finn Williams510f6182020-02-21 11:14:08 +000057 };
58
59 struct Event
60 {
61 uint64_t m_Guid;
62 uint64_t m_TimeStamp;
63 uint64_t m_ThreadId;
64 };
65
66 struct Label
67 {
68 uint64_t m_Guid;
69 std::string m_Name;
70 };
71
72 struct Relationship
73 {
74 RelationshipType m_RelationshipType;
75 uint64_t m_Guid;
76 uint64_t m_HeadGuid;
77 uint64_t m_TailGuid;
Finn Williams0a336dc2020-05-11 15:39:58 +010078 uint64_t m_AttributeGuid;
Finn Williams510f6182020-02-21 11:14:08 +000079 };
80
81 virtual ~ITimelineDecoder() = default;
82
Keith Davis97da5e22020-03-05 16:25:28 +000083 virtual TimelineStatus CreateEntity(const Entity&) = 0;
84 virtual TimelineStatus CreateEventClass(const EventClass&) = 0;
85 virtual TimelineStatus CreateEvent(const Event&) = 0;
86 virtual TimelineStatus CreateLabel(const Label&) = 0;
87 virtual TimelineStatus CreateRelationship(const Relationship&) = 0;
Jim Flynnbbfe6032020-07-20 16:57:44 +010088};
89
90} // namespace pipe
91} // namespace arm