xref: /aosp_15_r20/external/armnn/profiling/client/src/ProfilingUtils.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2019 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 "IPacketBuffer.hpp"
9*89c4ff92SAndroid Build Coastguard Worker 
10*89c4ff92SAndroid Build Coastguard Worker #include <client/include/ISendTimelinePacket.hpp>
11*89c4ff92SAndroid Build Coastguard Worker 
12*89c4ff92SAndroid Build Coastguard Worker #include <common/include/ICounterDirectory.hpp>
13*89c4ff92SAndroid Build Coastguard Worker #include <common/include/Packet.hpp>
14*89c4ff92SAndroid Build Coastguard Worker #include <common/include/ProfilingException.hpp>
15*89c4ff92SAndroid Build Coastguard Worker 
16*89c4ff92SAndroid Build Coastguard Worker #include <algorithm>
17*89c4ff92SAndroid Build Coastguard Worker #include <cstring>
18*89c4ff92SAndroid Build Coastguard Worker #include <memory>
19*89c4ff92SAndroid Build Coastguard Worker #include <string>
20*89c4ff92SAndroid Build Coastguard Worker #include <thread>
21*89c4ff92SAndroid Build Coastguard Worker #include <vector>
22*89c4ff92SAndroid Build Coastguard Worker 
23*89c4ff92SAndroid Build Coastguard Worker namespace arm
24*89c4ff92SAndroid Build Coastguard Worker {
25*89c4ff92SAndroid Build Coastguard Worker 
26*89c4ff92SAndroid Build Coastguard Worker namespace pipe
27*89c4ff92SAndroid Build Coastguard Worker {
28*89c4ff92SAndroid Build Coastguard Worker 
29*89c4ff92SAndroid Build Coastguard Worker constexpr unsigned int ThreadIdSize = sizeof(int); // Is platform dependent
30*89c4ff92SAndroid Build Coastguard Worker 
31*89c4ff92SAndroid Build Coastguard Worker void WriteBytes(const IPacketBuffer& packetBuffer, unsigned int offset, const void* value, unsigned int valueSize);
32*89c4ff92SAndroid Build Coastguard Worker 
33*89c4ff92SAndroid Build Coastguard Worker uint32_t ConstructHeader(uint32_t packetFamily, uint32_t packetId);
34*89c4ff92SAndroid Build Coastguard Worker 
35*89c4ff92SAndroid Build Coastguard Worker uint32_t ConstructHeader(uint32_t packetFamily, uint32_t packetClass, uint32_t packetType);
36*89c4ff92SAndroid Build Coastguard Worker 
37*89c4ff92SAndroid Build Coastguard Worker void WriteUint64(const IPacketBufferPtr& packetBuffer, unsigned int offset, uint64_t value);
38*89c4ff92SAndroid Build Coastguard Worker 
39*89c4ff92SAndroid Build Coastguard Worker void WriteUint32(const IPacketBufferPtr& packetBuffer, unsigned int offset, uint32_t value);
40*89c4ff92SAndroid Build Coastguard Worker 
41*89c4ff92SAndroid Build Coastguard Worker void WriteUint16(const IPacketBufferPtr& packetBuffer, unsigned int offset, uint16_t value);
42*89c4ff92SAndroid Build Coastguard Worker 
43*89c4ff92SAndroid Build Coastguard Worker void WriteUint8(const IPacketBufferPtr& packetBuffer, unsigned int offset, uint8_t value);
44*89c4ff92SAndroid Build Coastguard Worker 
45*89c4ff92SAndroid Build Coastguard Worker void WriteBytes(unsigned char* buffer, unsigned int offset, const void* value, unsigned int valueSize);
46*89c4ff92SAndroid Build Coastguard Worker 
47*89c4ff92SAndroid Build Coastguard Worker void WriteUint64(unsigned char* buffer, unsigned int offset, uint64_t value);
48*89c4ff92SAndroid Build Coastguard Worker 
49*89c4ff92SAndroid Build Coastguard Worker void WriteUint32(unsigned char* buffer, unsigned int offset, uint32_t value);
50*89c4ff92SAndroid Build Coastguard Worker 
51*89c4ff92SAndroid Build Coastguard Worker void WriteUint16(unsigned char* buffer, unsigned int offset, uint16_t value);
52*89c4ff92SAndroid Build Coastguard Worker 
53*89c4ff92SAndroid Build Coastguard Worker void WriteUint8(unsigned char* buffer, unsigned int offset, uint8_t value);
54*89c4ff92SAndroid Build Coastguard Worker 
55*89c4ff92SAndroid Build Coastguard Worker void ReadBytes(const IPacketBufferPtr& packetBuffer, unsigned int offset, unsigned int valueSize, uint8_t outValue[]);
56*89c4ff92SAndroid Build Coastguard Worker 
57*89c4ff92SAndroid Build Coastguard Worker uint64_t ReadUint64(const IPacketBufferPtr& packetBuffer, unsigned int offset);
58*89c4ff92SAndroid Build Coastguard Worker 
59*89c4ff92SAndroid Build Coastguard Worker uint32_t ReadUint32(const IPacketBufferPtr& packetBuffer, unsigned int offset);
60*89c4ff92SAndroid Build Coastguard Worker 
61*89c4ff92SAndroid Build Coastguard Worker uint16_t ReadUint16(const IPacketBufferPtr& packetBuffer, unsigned int offset);
62*89c4ff92SAndroid Build Coastguard Worker 
63*89c4ff92SAndroid Build Coastguard Worker uint8_t ReadUint8(const IPacketBufferPtr& packetBuffer, unsigned int offset);
64*89c4ff92SAndroid Build Coastguard Worker 
65*89c4ff92SAndroid Build Coastguard Worker void ReadBytes(const unsigned char* buffer, unsigned int offset, unsigned int valueSize, uint8_t outValue[]);
66*89c4ff92SAndroid Build Coastguard Worker 
67*89c4ff92SAndroid Build Coastguard Worker uint64_t ReadUint64(unsigned const char* buffer, unsigned int offset);
68*89c4ff92SAndroid Build Coastguard Worker 
69*89c4ff92SAndroid Build Coastguard Worker uint32_t ReadUint32(unsigned const char* buffer, unsigned int offset);
70*89c4ff92SAndroid Build Coastguard Worker 
71*89c4ff92SAndroid Build Coastguard Worker uint16_t ReadUint16(unsigned const char* buffer, unsigned int offset);
72*89c4ff92SAndroid Build Coastguard Worker 
73*89c4ff92SAndroid Build Coastguard Worker uint8_t ReadUint8(unsigned const char* buffer, unsigned int offset);
74*89c4ff92SAndroid Build Coastguard Worker 
75*89c4ff92SAndroid Build Coastguard Worker std::pair<uint32_t, uint32_t> CreateTimelinePacketHeader(uint32_t packetFamily,
76*89c4ff92SAndroid Build Coastguard Worker                                                          uint32_t packetClass,
77*89c4ff92SAndroid Build Coastguard Worker                                                          uint32_t packetType,
78*89c4ff92SAndroid Build Coastguard Worker                                                          uint32_t streamId,
79*89c4ff92SAndroid Build Coastguard Worker                                                          uint32_t sequenceNumbered,
80*89c4ff92SAndroid Build Coastguard Worker                                                          uint32_t dataLength);
81*89c4ff92SAndroid Build Coastguard Worker 
82*89c4ff92SAndroid Build Coastguard Worker std::string GetProcessName();
83*89c4ff92SAndroid Build Coastguard Worker 
84*89c4ff92SAndroid Build Coastguard Worker enum class TimelinePacketStatus
85*89c4ff92SAndroid Build Coastguard Worker {
86*89c4ff92SAndroid Build Coastguard Worker     Ok,
87*89c4ff92SAndroid Build Coastguard Worker     Error,
88*89c4ff92SAndroid Build Coastguard Worker     BufferExhaustion
89*89c4ff92SAndroid Build Coastguard Worker };
90*89c4ff92SAndroid Build Coastguard Worker 
91*89c4ff92SAndroid Build Coastguard Worker TimelinePacketStatus WriteTimelineLabelBinaryPacket(uint64_t profilingGuid,
92*89c4ff92SAndroid Build Coastguard Worker                                                     const std::string& label,
93*89c4ff92SAndroid Build Coastguard Worker                                                     unsigned char* buffer,
94*89c4ff92SAndroid Build Coastguard Worker                                                     unsigned int bufferSize,
95*89c4ff92SAndroid Build Coastguard Worker                                                     unsigned int& numberOfBytesWritten);
96*89c4ff92SAndroid Build Coastguard Worker 
97*89c4ff92SAndroid Build Coastguard Worker TimelinePacketStatus WriteTimelineEntityBinary(uint64_t profilingGuid,
98*89c4ff92SAndroid Build Coastguard Worker                                                unsigned char* buffer,
99*89c4ff92SAndroid Build Coastguard Worker                                                unsigned int bufferSize,
100*89c4ff92SAndroid Build Coastguard Worker                                                unsigned int& numberOfBytesWritten);
101*89c4ff92SAndroid Build Coastguard Worker 
102*89c4ff92SAndroid Build Coastguard Worker TimelinePacketStatus WriteTimelineRelationshipBinary(ProfilingRelationshipType relationshipType,
103*89c4ff92SAndroid Build Coastguard Worker                                                      uint64_t relationshipGuid,
104*89c4ff92SAndroid Build Coastguard Worker                                                      uint64_t headGuid,
105*89c4ff92SAndroid Build Coastguard Worker                                                      uint64_t tailGuid,
106*89c4ff92SAndroid Build Coastguard Worker                                                      uint64_t attributeGuid,
107*89c4ff92SAndroid Build Coastguard Worker                                                      unsigned char* buffer,
108*89c4ff92SAndroid Build Coastguard Worker                                                      unsigned int bufferSize,
109*89c4ff92SAndroid Build Coastguard Worker                                                      unsigned int& numberOfBytesWritten);
110*89c4ff92SAndroid Build Coastguard Worker 
111*89c4ff92SAndroid Build Coastguard Worker TimelinePacketStatus WriteTimelineMessageDirectoryPackage(unsigned char* buffer,
112*89c4ff92SAndroid Build Coastguard Worker                                                           unsigned int bufferSize,
113*89c4ff92SAndroid Build Coastguard Worker                                                           unsigned int& numberOfBytesWritten);
114*89c4ff92SAndroid Build Coastguard Worker 
115*89c4ff92SAndroid Build Coastguard Worker TimelinePacketStatus WriteTimelineEventClassBinary(uint64_t profilingGuid,
116*89c4ff92SAndroid Build Coastguard Worker                                                    uint64_t nameGuid,
117*89c4ff92SAndroid Build Coastguard Worker                                                    unsigned char* buffer,
118*89c4ff92SAndroid Build Coastguard Worker                                                    unsigned int bufferSize,
119*89c4ff92SAndroid Build Coastguard Worker                                                    unsigned int& numberOfBytesWritten);
120*89c4ff92SAndroid Build Coastguard Worker 
121*89c4ff92SAndroid Build Coastguard Worker TimelinePacketStatus WriteTimelineEventBinary(uint64_t timestamp,
122*89c4ff92SAndroid Build Coastguard Worker                                               int threadId,
123*89c4ff92SAndroid Build Coastguard Worker                                               uint64_t profilingGuid,
124*89c4ff92SAndroid Build Coastguard Worker                                               unsigned char* buffer,
125*89c4ff92SAndroid Build Coastguard Worker                                               unsigned int bufferSize,
126*89c4ff92SAndroid Build Coastguard Worker                                               unsigned int& numberOfBytesWritten);
127*89c4ff92SAndroid Build Coastguard Worker 
128*89c4ff92SAndroid Build Coastguard Worker std::string CentreAlignFormatting(const std::string& stringToPass, const int spacingWidth);
129*89c4ff92SAndroid Build Coastguard Worker 
130*89c4ff92SAndroid Build Coastguard Worker uint64_t GetTimestamp();
131*89c4ff92SAndroid Build Coastguard Worker 
132*89c4ff92SAndroid Build Coastguard Worker arm::pipe::Packet ReceivePacket(const unsigned char* buffer, uint32_t length);
133*89c4ff92SAndroid Build Coastguard Worker 
134*89c4ff92SAndroid Build Coastguard Worker } // namespace pipe
135*89c4ff92SAndroid Build Coastguard Worker 
136*89c4ff92SAndroid Build Coastguard Worker } // namespace arm
137*89c4ff92SAndroid Build Coastguard Worker 
138*89c4ff92SAndroid Build Coastguard Worker namespace std
139*89c4ff92SAndroid Build Coastguard Worker {
140*89c4ff92SAndroid Build Coastguard Worker 
141*89c4ff92SAndroid Build Coastguard Worker bool operator==(const std::vector<uint8_t>& left, int right);
142*89c4ff92SAndroid Build Coastguard Worker 
143*89c4ff92SAndroid Build Coastguard Worker } // namespace std
144