blob: 39ecebf9e88b53c4f92615fe64faff357d1c05f2 [file] [log] [blame]
Ferran Balaguer73882172019-09-02 16:39:42 +01001//
Jim Flynn6398a982020-05-27 17:05:21 +01002// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
Ferran Balaguer73882172019-09-02 16:39:42 +01003// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
Jim Flynnf9db3ef2022-03-08 21:23:44 +00008#include <common/include/ProfilingException.hpp>
9
Colm Donelan5ccb33d2020-01-24 16:27:02 +000010#include <armnn/profiling/ISendTimelinePacket.hpp>
Francis Murtagh3a161982019-09-04 15:25:02 +010011
Keith Davis3201eea2019-10-24 17:30:41 +010012#include "ICounterDirectory.hpp"
Narumol Prangnawarat404b2752019-09-24 17:23:16 +010013#include "IPacketBuffer.hpp"
Finn Williams0c8cb992020-05-07 10:38:15 +010014
Jim Flynnbbfe6032020-07-20 16:57:44 +010015#include <common/include/Packet.hpp>
Narumol Prangnawarat404b2752019-09-24 17:23:16 +010016
Matteo Martincigh6db5f202019-09-05 12:02:04 +010017#include <algorithm>
18#include <cstring>
Narumol Prangnawarat404b2752019-09-24 17:23:16 +010019#include <memory>
20#include <string>
Matteo Martincigh378bbfc2019-11-04 14:05:28 +000021#include <thread>
Colm Donelan5ccb33d2020-01-24 16:27:02 +000022#include <vector>
Ferran Balaguer73882172019-09-02 16:39:42 +010023
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000024namespace arm
Ferran Balaguer73882172019-09-02 16:39:42 +010025{
26
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000027namespace pipe
Ferran Balaguer73882172019-09-02 16:39:42 +010028{
29
Jim Flynn1fdeb992020-07-09 07:28:37 +010030constexpr unsigned int ThreadIdSize = sizeof(int); // Is platform dependent
Colm Donelan5bb3d8a2020-05-12 16:36:46 +010031
Matteo Martincigh6db5f202019-09-05 12:02:04 +010032uint16_t GetNextUid(bool peekOnly = false);
33
Keith Davise394bd92019-12-02 15:12:19 +000034std::vector<uint16_t> GetNextCounterUids(uint16_t firstUid, uint16_t cores);
Matteo Martincighab173e92019-09-05 12:02:04 +010035
Matteo Martincigh378bbfc2019-11-04 14:05:28 +000036void WriteBytes(const IPacketBuffer& packetBuffer, unsigned int offset, const void* value, unsigned int valueSize);
37
Keith Davis3201eea2019-10-24 17:30:41 +010038uint32_t ConstructHeader(uint32_t packetFamily, uint32_t packetId);
39
Jim Flynn83d08a92020-07-09 13:48:16 +010040uint32_t ConstructHeader(uint32_t packetFamily, uint32_t packetClass, uint32_t packetType);
41
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000042void WriteUint64(const IPacketBufferPtr& packetBuffer, unsigned int offset, uint64_t value);
Narumol Prangnawarat404b2752019-09-24 17:23:16 +010043
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000044void WriteUint32(const IPacketBufferPtr& packetBuffer, unsigned int offset, uint32_t value);
Narumol Prangnawarat404b2752019-09-24 17:23:16 +010045
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000046void WriteUint16(const IPacketBufferPtr& packetBuffer, unsigned int offset, uint16_t value);
Narumol Prangnawarat404b2752019-09-24 17:23:16 +010047
Matteo Martincigh34a407d2019-11-06 15:30:54 +000048void WriteUint8(const IPacketBufferPtr& packetBuffer, unsigned int offset, uint8_t value);
49
Matteo Martincigh378bbfc2019-11-04 14:05:28 +000050void WriteBytes(unsigned char* buffer, unsigned int offset, const void* value, unsigned int valueSize);
51
Francis Murtagh3a161982019-09-04 15:25:02 +010052void WriteUint64(unsigned char* buffer, unsigned int offset, uint64_t value);
53
Ferran Balaguer73882172019-09-02 16:39:42 +010054void WriteUint32(unsigned char* buffer, unsigned int offset, uint32_t value);
55
56void WriteUint16(unsigned char* buffer, unsigned int offset, uint16_t value);
57
Matteo Martincigh34a407d2019-11-06 15:30:54 +000058void WriteUint8(unsigned char* buffer, unsigned int offset, uint8_t value);
59
Matteo Martincigh378bbfc2019-11-04 14:05:28 +000060void ReadBytes(const IPacketBufferPtr& packetBuffer, unsigned int offset, unsigned int valueSize, uint8_t outValue[]);
61
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000062uint64_t ReadUint64(const IPacketBufferPtr& packetBuffer, unsigned int offset);
Francis Murtagh3a161982019-09-04 15:25:02 +010063
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000064uint32_t ReadUint32(const IPacketBufferPtr& packetBuffer, unsigned int offset);
Ferran Balaguer73882172019-09-02 16:39:42 +010065
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000066uint16_t ReadUint16(const IPacketBufferPtr& packetBuffer, unsigned int offset);
Ferran Balaguer73882172019-09-02 16:39:42 +010067
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000068uint8_t ReadUint8(const IPacketBufferPtr& packetBuffer, unsigned int offset);
Narumol Prangnawarat404b2752019-09-24 17:23:16 +010069
Matteo Martincigh378bbfc2019-11-04 14:05:28 +000070void ReadBytes(const unsigned char* buffer, unsigned int offset, unsigned int valueSize, uint8_t outValue[]);
71
Narumol Prangnawarat404b2752019-09-24 17:23:16 +010072uint64_t ReadUint64(unsigned const char* buffer, unsigned int offset);
73
74uint32_t ReadUint32(unsigned const char* buffer, unsigned int offset);
75
76uint16_t ReadUint16(unsigned const char* buffer, unsigned int offset);
77
78uint8_t ReadUint8(unsigned const char* buffer, unsigned int offset);
Matteo Martincigh42f9d9e2019-09-05 12:02:04 +010079
Keith Davis97da5e22020-03-05 16:25:28 +000080std::pair<uint32_t, uint32_t> CreateTimelinePacketHeader(uint32_t packetFamily,
81 uint32_t packetClass,
82 uint32_t packetType,
83 uint32_t streamId,
84 uint32_t sequenceNumbered,
85 uint32_t dataLength);
86
Ferran Balaguer47d0fe92019-09-04 16:47:34 +010087std::string GetSoftwareInfo();
88
89std::string GetSoftwareVersion();
90
91std::string GetHardwareVersion();
92
93std::string GetProcessName();
94
Matteo Martincigh0aed4f92019-10-01 14:25:34 +010095enum class TimelinePacketStatus
96{
97 Ok,
98 Error,
99 BufferExhaustion
100};
101
102TimelinePacketStatus WriteTimelineLabelBinaryPacket(uint64_t profilingGuid,
103 const std::string& label,
104 unsigned char* buffer,
105 unsigned int bufferSize,
106 unsigned int& numberOfBytesWritten);
107
Keith Davis97da5e22020-03-05 16:25:28 +0000108TimelinePacketStatus WriteTimelineEntityBinary(uint64_t profilingGuid,
109 unsigned char* buffer,
110 unsigned int bufferSize,
111 unsigned int& numberOfBytesWritten);
112
113TimelinePacketStatus WriteTimelineRelationshipBinary(ProfilingRelationshipType relationshipType,
114 uint64_t relationshipGuid,
115 uint64_t headGuid,
116 uint64_t tailGuid,
Finn Williams0a336dc2020-05-11 15:39:58 +0100117 uint64_t attributeGuid,
Matteo Martincigh8844c2f2019-10-16 10:29:17 +0100118 unsigned char* buffer,
119 unsigned int bufferSize,
120 unsigned int& numberOfBytesWritten);
David Monahanf21f6062019-10-07 15:11:15 +0100121
Sadik Armagan784db772019-10-08 15:05:38 +0100122TimelinePacketStatus WriteTimelineMessageDirectoryPackage(unsigned char* buffer,
123 unsigned int bufferSize,
124 unsigned int& numberOfBytesWritten);
125
Keith Davis97da5e22020-03-05 16:25:28 +0000126TimelinePacketStatus WriteTimelineEventClassBinary(uint64_t profilingGuid,
Jim Flynn1892d212020-05-26 21:10:49 +0100127 uint64_t nameGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000128 unsigned char* buffer,
129 unsigned int bufferSize,
130 unsigned int& numberOfBytesWritten);
Jan Eilers92fa15b2019-10-15 15:23:25 +0100131
Keith Davis97da5e22020-03-05 16:25:28 +0000132TimelinePacketStatus WriteTimelineEventBinary(uint64_t timestamp,
Jim Flynn1fdeb992020-07-09 07:28:37 +0100133 int threadId,
Keith Davis97da5e22020-03-05 16:25:28 +0000134 uint64_t profilingGuid,
135 unsigned char* buffer,
136 unsigned int bufferSize,
137 unsigned int& numberOfBytesWritten);
Matteo Martincigh8844c2f2019-10-16 10:29:17 +0100138
Keith Davis3201eea2019-10-24 17:30:41 +0100139std::string CentreAlignFormatting(const std::string& stringToPass, const int spacingWidth);
140
141void PrintCounterDirectory(ICounterDirectory& counterDirectory);
142
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000143uint64_t GetTimestamp();
Ferran Balaguer73882172019-09-02 16:39:42 +0100144
Jim Flynnbbfe6032020-07-20 16:57:44 +0100145arm::pipe::Packet ReceivePacket(const unsigned char* buffer, uint32_t length);
Jim Flynn4e755a52020-03-29 17:48:26 +0100146
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000147} // namespace pipe
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000148
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000149} // namespace arm
Matteo Martincigh378bbfc2019-11-04 14:05:28 +0000150
151namespace std
152{
153
Jim Flynn1fdeb992020-07-09 07:28:37 +0100154bool operator==(const std::vector<uint8_t>& left, int right);
Matteo Martincigh378bbfc2019-11-04 14:05:28 +0000155
156} // namespace std