blob: 323a7629184f23c89cf3c2c496ec1a1ffce4fa88 [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 <armnn/Optional.hpp>
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000012#include <BufferManager.hpp>
13#include <ProfilingService.hpp>
14
Nikhil Raj77fe76b2021-06-09 14:55:32 +010015#include <common/include/ProfilingGuid.hpp>
16
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000017using namespace armnn;
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000018using namespace arm::pipe;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000019
Finn Williams985fecf2020-04-30 11:06:43 +010020const static uint32_t bodyHeaderSize = 6;
21
Finn Williamsa0de0562020-04-22 12:27:37 +010022uint32_t GetStreamMetaDataPacketSize();
23
Jan Eilersf78c7672020-07-01 18:09:39 +010024/// Returns a vector of CpuRef, CpuAcc or GpuAcc backends if they where registered
25std::vector<BackendId> GetSuitableBackendRegistered();
26
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000027inline unsigned int OffsetToNextWord(unsigned int numberOfBytes);
28
Keith Davis97da5e22020-03-05 16:25:28 +000029void VerifyTimelineHeaderBinary(const unsigned char* readableData,
30 unsigned int& offset,
31 uint32_t packetDataLength);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000032
Jim Flynn6398a982020-05-27 17:05:21 +010033ProfilingGuid VerifyTimelineLabelBinaryPacketData(Optional<ProfilingGuid> guid,
34 const std::string& label,
35 const unsigned char* readableData,
36 unsigned int& offset);
Keith Davis97da5e22020-03-05 16:25:28 +000037
38void VerifyTimelineEventClassBinaryPacketData(ProfilingGuid guid,
Jim Flynn1892d212020-05-26 21:10:49 +010039 ProfilingGuid nameGuid,
Keith Davis97da5e22020-03-05 16:25:28 +000040 const unsigned char* readableData,
41 unsigned int& offset);
42
43void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType,
44 Optional<ProfilingGuid> relationshipGuid,
45 Optional<ProfilingGuid> headGuid,
46 Optional<ProfilingGuid> tailGuid,
Finn Williams0a336dc2020-05-11 15:39:58 +010047 Optional<ProfilingGuid> attributeGuid,
Keith Davis97da5e22020-03-05 16:25:28 +000048 const unsigned char* readableData,
49 unsigned int& offset);
50
Jim Flynn6398a982020-05-27 17:05:21 +010051ProfilingGuid VerifyTimelineEntityBinaryPacketData(Optional<ProfilingGuid> guid,
52 const unsigned char* readableData,
53 unsigned int& offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000054
Jim Flynn6398a982020-05-27 17:05:21 +010055ProfilingGuid VerifyTimelineEventBinaryPacket(Optional<uint64_t> timestamp,
Jim Flynn1fdeb992020-07-09 07:28:37 +010056 Optional<int> threadId,
Jim Flynn6398a982020-05-27 17:05:21 +010057 Optional<ProfilingGuid> eventGuid,
58 const unsigned char* readableData,
59 unsigned int& offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000060
61void VerifyPostOptimisationStructureTestImpl(armnn::BackendId backendId);
62
Jim Flynn6398a982020-05-27 17:05:21 +010063bool CompareOutput(std::vector<std::string> output, std::vector<std::string> expectedOutput);
64
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000065namespace arm
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000066{
67
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000068namespace pipe
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000069{
70
71class ProfilingServiceRuntimeHelper : public ProfilingService
72{
73public:
Jim Flynn34430252022-03-04 15:03:58 +000074 ProfilingServiceRuntimeHelper(uint16_t maxGlobalCounterId,
75 IInitialiseProfilingService& initialiser,
76 arm::pipe::IProfilingService& profilingService)
77 : ProfilingService(maxGlobalCounterId, initialiser), m_ProfilingService(profilingService) {}
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000078 ~ProfilingServiceRuntimeHelper() = default;
79
80 BufferManager& GetProfilingBufferManager()
81 {
Jim Flynn34430252022-03-04 15:03:58 +000082 return GetBufferManager(static_cast<arm::pipe::ProfilingService&>(m_ProfilingService));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000083 }
Jim Flynn34430252022-03-04 15:03:58 +000084 arm::pipe::IProfilingService& m_ProfilingService;
Keith Davis33ed2212020-03-30 10:43:41 +010085
86 void ForceTransitionToState(ProfilingState newState)
87 {
Jim Flynn34430252022-03-04 15:03:58 +000088 TransitionToState(static_cast<arm::pipe::ProfilingService&>(m_ProfilingService), newState);
Keith Davis33ed2212020-03-30 10:43:41 +010089 }
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000090};
91
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000092} // namespace pipe
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000093
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000094} // namespace arm