blob: 4ff4221cab3111c44cd7cb7c0a6edec7c4a8e9b6 [file] [log] [blame]
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001//
Jim Flynn6398a982020-05-27 17:05:21 +01002// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00003// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include "ProfilingUtils.hpp"
Keith Davis33ed2212020-03-30 10:43:41 +01009#include "Runtime.hpp"
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000010
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000011#include <BufferManager.hpp>
12#include <ProfilingService.hpp>
13
Jim Flynn9c85b412022-03-16 00:27:43 +000014#include <armnn/profiling/ArmNNProfiling.hpp>
15
Jim Flynndecd08b2022-03-13 22:35:46 +000016#include <common/include/Optional.hpp>
Nikhil Raj77fe76b2021-06-09 14:55:32 +010017#include <common/include/ProfilingGuid.hpp>
18
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000019using namespace armnn;
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000020using namespace arm::pipe;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000021
Finn Williams985fecf2020-04-30 11:06:43 +010022const static uint32_t bodyHeaderSize = 6;
23
Finn Williamsa0de0562020-04-22 12:27:37 +010024uint32_t GetStreamMetaDataPacketSize();
25
Jan Eilersf78c7672020-07-01 18:09:39 +010026/// Returns a vector of CpuRef, CpuAcc or GpuAcc backends if they where registered
27std::vector<BackendId> GetSuitableBackendRegistered();
28
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000029inline unsigned int OffsetToNextWord(unsigned int numberOfBytes);
30
Keith Davis97da5e22020-03-05 16:25:28 +000031void VerifyTimelineHeaderBinary(const unsigned char* readableData,
32 unsigned int& offset,
33 uint32_t packetDataLength);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000034
Jim Flynndecd08b2022-03-13 22:35:46 +000035ProfilingGuid VerifyTimelineLabelBinaryPacketData(arm::pipe::Optional<ProfilingGuid> guid,
Jim Flynn6398a982020-05-27 17:05:21 +010036 const std::string& label,
37 const unsigned char* readableData,
38 unsigned int& offset);
Keith Davis97da5e22020-03-05 16:25:28 +000039
40void VerifyTimelineEventClassBinaryPacketData(ProfilingGuid guid,
Jim Flynn1892d212020-05-26 21:10:49 +010041 ProfilingGuid nameGuid,
Keith Davis97da5e22020-03-05 16:25:28 +000042 const unsigned char* readableData,
43 unsigned int& offset);
44
45void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType,
Jim Flynndecd08b2022-03-13 22:35:46 +000046 arm::pipe::Optional<ProfilingGuid> relationshipGuid,
47 arm::pipe::Optional<ProfilingGuid> headGuid,
48 arm::pipe::Optional<ProfilingGuid> tailGuid,
49 arm::pipe::Optional<ProfilingGuid> attributeGuid,
Keith Davis97da5e22020-03-05 16:25:28 +000050 const unsigned char* readableData,
51 unsigned int& offset);
52
Jim Flynndecd08b2022-03-13 22:35:46 +000053ProfilingGuid VerifyTimelineEntityBinaryPacketData(arm::pipe::Optional<ProfilingGuid> guid,
Jim Flynn6398a982020-05-27 17:05:21 +010054 const unsigned char* readableData,
55 unsigned int& offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000056
Jim Flynndecd08b2022-03-13 22:35:46 +000057ProfilingGuid VerifyTimelineEventBinaryPacket(arm::pipe::Optional<uint64_t> timestamp,
58 arm::pipe::Optional<int> threadId,
59 arm::pipe::Optional<ProfilingGuid> eventGuid,
Jim Flynn6398a982020-05-27 17:05:21 +010060 const unsigned char* readableData,
61 unsigned int& offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000062
63void VerifyPostOptimisationStructureTestImpl(armnn::BackendId backendId);
64
Jim Flynn6398a982020-05-27 17:05:21 +010065bool CompareOutput(std::vector<std::string> output, std::vector<std::string> expectedOutput);
66
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000067namespace arm
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000068{
69
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000070namespace pipe
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000071{
72
73class ProfilingServiceRuntimeHelper : public ProfilingService
74{
75public:
Jim Flynn34430252022-03-04 15:03:58 +000076 ProfilingServiceRuntimeHelper(uint16_t maxGlobalCounterId,
77 IInitialiseProfilingService& initialiser,
78 arm::pipe::IProfilingService& profilingService)
Jim Flynn9c85b412022-03-16 00:27:43 +000079 : ProfilingService(maxGlobalCounterId,
80 initialiser,
81 arm::pipe::ARMNN_SOFTWARE_INFO,
82 arm::pipe::ARMNN_SOFTWARE_VERSION,
83 arm::pipe::ARMNN_HARDWARE_VERSION),
84 m_ProfilingService(profilingService) {}
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000085 ~ProfilingServiceRuntimeHelper() = default;
86
87 BufferManager& GetProfilingBufferManager()
88 {
Jim Flynn34430252022-03-04 15:03:58 +000089 return GetBufferManager(static_cast<arm::pipe::ProfilingService&>(m_ProfilingService));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000090 }
Jim Flynn34430252022-03-04 15:03:58 +000091 arm::pipe::IProfilingService& m_ProfilingService;
Keith Davis33ed2212020-03-30 10:43:41 +010092
93 void ForceTransitionToState(ProfilingState newState)
94 {
Jim Flynn34430252022-03-04 15:03:58 +000095 TransitionToState(static_cast<arm::pipe::ProfilingService&>(m_ProfilingService), newState);
Keith Davis33ed2212020-03-30 10:43:41 +010096 }
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000097};
98
Jim Flynn6c9f17d2022-03-10 23:13:01 +000099struct LogLevelSwapper
100{
101public:
102 LogLevelSwapper(arm::pipe::LogSeverity severity)
103 {
104 // Set the new log level
105 arm::pipe::ConfigureLogging(true, true, severity);
106 }
107 ~LogLevelSwapper()
108 {
109 // The default log level for unit tests is "Fatal"
110 arm::pipe::ConfigureLogging(true, true, arm::pipe::LogSeverity::Fatal);
111 }
112};
113
114struct StreamRedirector
115{
116public:
117 StreamRedirector(std::ostream& stream, std::streambuf* newStreamBuffer)
118 : m_Stream(stream)
119 , m_BackupBuffer(m_Stream.rdbuf(newStreamBuffer))
120 {}
121
122 ~StreamRedirector() { CancelRedirect(); }
123
124 void CancelRedirect()
125 {
126 // Only cancel the redirect once.
127 if (m_BackupBuffer != nullptr )
128 {
129 m_Stream.rdbuf(m_BackupBuffer);
130 m_BackupBuffer = nullptr;
131 }
132 }
133
134private:
135 std::ostream& m_Stream;
136 std::streambuf* m_BackupBuffer;
137};
138
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000139} // namespace pipe
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000140
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000141} // namespace arm