• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 #include <armnn/Exceptions.hpp>
9 #include <armnn/profiling/ISendTimelinePacket.hpp>
10 
11 #include <armnn/utility/NumericCast.hpp>
12 
13 #include "ICounterDirectory.hpp"
14 #include "IPacketBuffer.hpp"
15 
16 #include <common/include/Packet.hpp>
17 
18 #include <algorithm>
19 #include <cstring>
20 #include <memory>
21 #include <string>
22 #include <thread>
23 #include <vector>
24 
25 namespace armnn
26 {
27 
28 namespace profiling
29 {
30 
31 constexpr unsigned int ThreadIdSize = sizeof(int); // Is platform dependent
32 
33 uint16_t GetNextUid(bool peekOnly = false);
34 
35 std::vector<uint16_t> GetNextCounterUids(uint16_t firstUid, uint16_t cores);
36 
37 void WriteBytes(const IPacketBuffer& packetBuffer, unsigned int offset, const void* value, unsigned int valueSize);
38 
39 uint32_t ConstructHeader(uint32_t packetFamily, uint32_t packetId);
40 
41 uint32_t ConstructHeader(uint32_t packetFamily, uint32_t packetClass, uint32_t packetType);
42 
43 void WriteUint64(const IPacketBufferPtr& packetBuffer, unsigned int offset, uint64_t value);
44 
45 void WriteUint32(const IPacketBufferPtr& packetBuffer, unsigned int offset, uint32_t value);
46 
47 void WriteUint16(const IPacketBufferPtr& packetBuffer, unsigned int offset, uint16_t value);
48 
49 void WriteUint8(const IPacketBufferPtr& packetBuffer, unsigned int offset, uint8_t value);
50 
51 void WriteBytes(unsigned char* buffer, unsigned int offset, const void* value, unsigned int valueSize);
52 
53 void WriteUint64(unsigned char* buffer, unsigned int offset, uint64_t value);
54 
55 void WriteUint32(unsigned char* buffer, unsigned int offset, uint32_t value);
56 
57 void WriteUint16(unsigned char* buffer, unsigned int offset, uint16_t value);
58 
59 void WriteUint8(unsigned char* buffer, unsigned int offset, uint8_t value);
60 
61 void ReadBytes(const IPacketBufferPtr& packetBuffer, unsigned int offset, unsigned int valueSize, uint8_t outValue[]);
62 
63 uint64_t ReadUint64(const IPacketBufferPtr& packetBuffer, unsigned int offset);
64 
65 uint32_t ReadUint32(const IPacketBufferPtr& packetBuffer, unsigned int offset);
66 
67 uint16_t ReadUint16(const IPacketBufferPtr& packetBuffer, unsigned int offset);
68 
69 uint8_t ReadUint8(const IPacketBufferPtr& packetBuffer, unsigned int offset);
70 
71 void ReadBytes(const unsigned char* buffer, unsigned int offset, unsigned int valueSize, uint8_t outValue[]);
72 
73 uint64_t ReadUint64(unsigned const char* buffer, unsigned int offset);
74 
75 uint32_t ReadUint32(unsigned const char* buffer, unsigned int offset);
76 
77 uint16_t ReadUint16(unsigned const char* buffer, unsigned int offset);
78 
79 uint8_t ReadUint8(unsigned const char* buffer, unsigned int offset);
80 
81 std::pair<uint32_t, uint32_t> CreateTimelinePacketHeader(uint32_t packetFamily,
82                                                          uint32_t packetClass,
83                                                          uint32_t packetType,
84                                                          uint32_t streamId,
85                                                          uint32_t sequenceNumbered,
86                                                          uint32_t dataLength);
87 
88 std::string GetSoftwareInfo();
89 
90 std::string GetSoftwareVersion();
91 
92 std::string GetHardwareVersion();
93 
94 std::string GetProcessName();
95 
96 enum class TimelinePacketStatus
97 {
98     Ok,
99     Error,
100     BufferExhaustion
101 };
102 
103 TimelinePacketStatus WriteTimelineLabelBinaryPacket(uint64_t profilingGuid,
104                                                     const std::string& label,
105                                                     unsigned char* buffer,
106                                                     unsigned int bufferSize,
107                                                     unsigned int& numberOfBytesWritten);
108 
109 TimelinePacketStatus WriteTimelineEntityBinary(uint64_t profilingGuid,
110                                                unsigned char* buffer,
111                                                unsigned int bufferSize,
112                                                unsigned int& numberOfBytesWritten);
113 
114 TimelinePacketStatus WriteTimelineRelationshipBinary(ProfilingRelationshipType relationshipType,
115                                                      uint64_t relationshipGuid,
116                                                      uint64_t headGuid,
117                                                      uint64_t tailGuid,
118                                                      uint64_t attributeGuid,
119                                                      unsigned char* buffer,
120                                                      unsigned int bufferSize,
121                                                      unsigned int& numberOfBytesWritten);
122 
123 TimelinePacketStatus WriteTimelineMessageDirectoryPackage(unsigned char* buffer,
124                                                           unsigned int bufferSize,
125                                                           unsigned int& numberOfBytesWritten);
126 
127 TimelinePacketStatus WriteTimelineEventClassBinary(uint64_t profilingGuid,
128                                                    uint64_t nameGuid,
129                                                    unsigned char* buffer,
130                                                    unsigned int bufferSize,
131                                                    unsigned int& numberOfBytesWritten);
132 
133 TimelinePacketStatus WriteTimelineEventBinary(uint64_t timestamp,
134                                               int threadId,
135                                               uint64_t profilingGuid,
136                                               unsigned char* buffer,
137                                               unsigned int bufferSize,
138                                               unsigned int& numberOfBytesWritten);
139 
140 std::string CentreAlignFormatting(const std::string& stringToPass, const int spacingWidth);
141 
142 void PrintCounterDirectory(ICounterDirectory& counterDirectory);
143 
144 class BufferExhaustion : public armnn::Exception
145 {
146     using Exception::Exception;
147 };
148 
149 uint64_t GetTimestamp();
150 
151 arm::pipe::Packet ReceivePacket(const unsigned char* buffer, uint32_t length);
152 
153 } // namespace profiling
154 
155 } // namespace armnn
156 
157 namespace std
158 {
159 
160 bool operator==(const std::vector<uint8_t>& left, int right);
161 
162 } // namespace std
163