blob: 593dd6b924790dc2b5a1386761dfacb365663b07 [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 Flynnc454ac92022-03-16 18:43:18 +00008#include <common/include/ICounterDirectory.hpp>
Jim Flynnf9db3ef2022-03-08 21:23:44 +00009#include <common/include/ProfilingException.hpp>
10
Colm Donelan5ccb33d2020-01-24 16:27:02 +000011#include <armnn/profiling/ISendTimelinePacket.hpp>
Francis Murtagh3a161982019-09-04 15:25:02 +010012
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 Martincigh378bbfc2019-11-04 14:05:28 +000032void WriteBytes(const IPacketBuffer& packetBuffer, unsigned int offset, const void* value, unsigned int valueSize);
33
Keith Davis3201eea2019-10-24 17:30:41 +010034uint32_t ConstructHeader(uint32_t packetFamily, uint32_t packetId);
35
Jim Flynn83d08a92020-07-09 13:48:16 +010036uint32_t ConstructHeader(uint32_t packetFamily, uint32_t packetClass, uint32_t packetType);
37
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000038void WriteUint64(const IPacketBufferPtr& packetBuffer, unsigned int offset, uint64_t value);
Narumol Prangnawarat404b2752019-09-24 17:23:16 +010039
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000040void WriteUint32(const IPacketBufferPtr& packetBuffer, unsigned int offset, uint32_t value);
Narumol Prangnawarat404b2752019-09-24 17:23:16 +010041
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000042void WriteUint16(const IPacketBufferPtr& packetBuffer, unsigned int offset, uint16_t value);
Narumol Prangnawarat404b2752019-09-24 17:23:16 +010043
Matteo Martincigh34a407d2019-11-06 15:30:54 +000044void WriteUint8(const IPacketBufferPtr& packetBuffer, unsigned int offset, uint8_t value);
45
Matteo Martincigh378bbfc2019-11-04 14:05:28 +000046void WriteBytes(unsigned char* buffer, unsigned int offset, const void* value, unsigned int valueSize);
47
Francis Murtagh3a161982019-09-04 15:25:02 +010048void WriteUint64(unsigned char* buffer, unsigned int offset, uint64_t value);
49
Ferran Balaguer73882172019-09-02 16:39:42 +010050void WriteUint32(unsigned char* buffer, unsigned int offset, uint32_t value);
51
52void WriteUint16(unsigned char* buffer, unsigned int offset, uint16_t value);
53
Matteo Martincigh34a407d2019-11-06 15:30:54 +000054void WriteUint8(unsigned char* buffer, unsigned int offset, uint8_t value);
55
Matteo Martincigh378bbfc2019-11-04 14:05:28 +000056void ReadBytes(const IPacketBufferPtr& packetBuffer, unsigned int offset, unsigned int valueSize, uint8_t outValue[]);
57
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000058uint64_t ReadUint64(const IPacketBufferPtr& packetBuffer, unsigned int offset);
Francis Murtagh3a161982019-09-04 15:25:02 +010059
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000060uint32_t ReadUint32(const IPacketBufferPtr& packetBuffer, unsigned int offset);
Ferran Balaguer73882172019-09-02 16:39:42 +010061
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000062uint16_t ReadUint16(const IPacketBufferPtr& packetBuffer, unsigned int offset);
Ferran Balaguer73882172019-09-02 16:39:42 +010063
Matteo Martincigh2ffcc412019-11-05 11:47:40 +000064uint8_t ReadUint8(const IPacketBufferPtr& packetBuffer, unsigned int offset);
Narumol Prangnawarat404b2752019-09-24 17:23:16 +010065
Matteo Martincigh378bbfc2019-11-04 14:05:28 +000066void ReadBytes(const unsigned char* buffer, unsigned int offset, unsigned int valueSize, uint8_t outValue[]);
67
Narumol Prangnawarat404b2752019-09-24 17:23:16 +010068uint64_t ReadUint64(unsigned const char* buffer, unsigned int offset);
69
70uint32_t ReadUint32(unsigned const char* buffer, unsigned int offset);
71
72uint16_t ReadUint16(unsigned const char* buffer, unsigned int offset);
73
74uint8_t ReadUint8(unsigned const char* buffer, unsigned int offset);
Matteo Martincigh42f9d9e2019-09-05 12:02:04 +010075
Keith Davis97da5e22020-03-05 16:25:28 +000076std::pair<uint32_t, uint32_t> CreateTimelinePacketHeader(uint32_t packetFamily,
77 uint32_t packetClass,
78 uint32_t packetType,
79 uint32_t streamId,
80 uint32_t sequenceNumbered,
81 uint32_t dataLength);
82
Ferran Balaguer47d0fe92019-09-04 16:47:34 +010083std::string GetProcessName();
84
Matteo Martincigh0aed4f92019-10-01 14:25:34 +010085enum class TimelinePacketStatus
86{
87 Ok,
88 Error,
89 BufferExhaustion
90};
91
92TimelinePacketStatus WriteTimelineLabelBinaryPacket(uint64_t profilingGuid,
93 const std::string& label,
94 unsigned char* buffer,
95 unsigned int bufferSize,
96 unsigned int& numberOfBytesWritten);
97
Keith Davis97da5e22020-03-05 16:25:28 +000098TimelinePacketStatus WriteTimelineEntityBinary(uint64_t profilingGuid,
99 unsigned char* buffer,
100 unsigned int bufferSize,
101 unsigned int& numberOfBytesWritten);
102
103TimelinePacketStatus WriteTimelineRelationshipBinary(ProfilingRelationshipType relationshipType,
104 uint64_t relationshipGuid,
105 uint64_t headGuid,
106 uint64_t tailGuid,
Finn Williams0a336dc2020-05-11 15:39:58 +0100107 uint64_t attributeGuid,
Matteo Martincigh8844c2f2019-10-16 10:29:17 +0100108 unsigned char* buffer,
109 unsigned int bufferSize,
110 unsigned int& numberOfBytesWritten);
David Monahanf21f6062019-10-07 15:11:15 +0100111
Sadik Armagan784db772019-10-08 15:05:38 +0100112TimelinePacketStatus WriteTimelineMessageDirectoryPackage(unsigned char* buffer,
113 unsigned int bufferSize,
114 unsigned int& numberOfBytesWritten);
115
Keith Davis97da5e22020-03-05 16:25:28 +0000116TimelinePacketStatus WriteTimelineEventClassBinary(uint64_t profilingGuid,
Jim Flynn1892d212020-05-26 21:10:49 +0100117 uint64_t nameGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000118 unsigned char* buffer,
119 unsigned int bufferSize,
120 unsigned int& numberOfBytesWritten);
Jan Eilers92fa15b2019-10-15 15:23:25 +0100121
Keith Davis97da5e22020-03-05 16:25:28 +0000122TimelinePacketStatus WriteTimelineEventBinary(uint64_t timestamp,
Jim Flynn1fdeb992020-07-09 07:28:37 +0100123 int threadId,
Keith Davis97da5e22020-03-05 16:25:28 +0000124 uint64_t profilingGuid,
125 unsigned char* buffer,
126 unsigned int bufferSize,
127 unsigned int& numberOfBytesWritten);
Matteo Martincigh8844c2f2019-10-16 10:29:17 +0100128
Keith Davis3201eea2019-10-24 17:30:41 +0100129std::string CentreAlignFormatting(const std::string& stringToPass, const int spacingWidth);
130
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000131uint64_t GetTimestamp();
Ferran Balaguer73882172019-09-02 16:39:42 +0100132
Jim Flynnbbfe6032020-07-20 16:57:44 +0100133arm::pipe::Packet ReceivePacket(const unsigned char* buffer, uint32_t length);
Jim Flynn4e755a52020-03-29 17:48:26 +0100134
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000135} // namespace pipe
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000136
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000137} // namespace arm
Matteo Martincigh378bbfc2019-11-04 14:05:28 +0000138
139namespace std
140{
141
Jim Flynn1fdeb992020-07-09 07:28:37 +0100142bool operator==(const std::vector<uint8_t>& left, int right);
Matteo Martincigh378bbfc2019-11-04 14:05:28 +0000143
144} // namespace std