xref: /aosp_15_r20/external/armnn/src/profiling/test/SendTimelinePacketTests.cpp (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 #include "ProfilingMocks.hpp"
7*89c4ff92SAndroid Build Coastguard Worker #include "ProfilingTestUtils.hpp"
8*89c4ff92SAndroid Build Coastguard Worker #include "ProfilingOptionsConverter.hpp"
9*89c4ff92SAndroid Build Coastguard Worker #include <Runtime.hpp>
10*89c4ff92SAndroid Build Coastguard Worker #include <ArmNNProfilingServiceInitialiser.hpp>
11*89c4ff92SAndroid Build Coastguard Worker 
12*89c4ff92SAndroid Build Coastguard Worker #include <armnn/profiling/ArmNNProfiling.hpp>
13*89c4ff92SAndroid Build Coastguard Worker 
14*89c4ff92SAndroid Build Coastguard Worker #include <client/src/BufferManager.hpp>
15*89c4ff92SAndroid Build Coastguard Worker #include <client/src/ProfilingService.hpp>
16*89c4ff92SAndroid Build Coastguard Worker #include <client/src/ProfilingUtils.hpp>
17*89c4ff92SAndroid Build Coastguard Worker #include <client/src/SendTimelinePacket.hpp>
18*89c4ff92SAndroid Build Coastguard Worker #include <client/src/TimelinePacketWriterFactory.hpp>
19*89c4ff92SAndroid Build Coastguard Worker 
20*89c4ff92SAndroid Build Coastguard Worker #include <common/include/LabelsAndEventClasses.hpp>
21*89c4ff92SAndroid Build Coastguard Worker #include <common/include/SwTrace.hpp>
22*89c4ff92SAndroid Build Coastguard Worker #include <common/include/Threads.hpp>
23*89c4ff92SAndroid Build Coastguard Worker 
24*89c4ff92SAndroid Build Coastguard Worker #include <doctest/doctest.h>
25*89c4ff92SAndroid Build Coastguard Worker 
26*89c4ff92SAndroid Build Coastguard Worker #include <functional>
27*89c4ff92SAndroid Build Coastguard Worker 
28*89c4ff92SAndroid Build Coastguard Worker using namespace arm::pipe;
29*89c4ff92SAndroid Build Coastguard Worker 
30*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("SendTimelinePacketTests")
31*89c4ff92SAndroid Build Coastguard Worker {
32*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("SendTimelineMessageDirectoryPackageTest")
33*89c4ff92SAndroid Build Coastguard Worker {
34*89c4ff92SAndroid Build Coastguard Worker     MockBufferManager mockBuffer(512);
35*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketWriterFactory timelinePacketWriterFactory(mockBuffer);
36*89c4ff92SAndroid Build Coastguard Worker     std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = timelinePacketWriterFactory.GetSendTimelinePacket();
37*89c4ff92SAndroid Build Coastguard Worker 
38*89c4ff92SAndroid Build Coastguard Worker     sendTimelinePacket->SendTimelineMessageDirectoryPackage();
39*89c4ff92SAndroid Build Coastguard Worker 
40*89c4ff92SAndroid Build Coastguard Worker     // Get the readable buffer
41*89c4ff92SAndroid Build Coastguard Worker     auto packetBuffer = mockBuffer.GetReadableBuffer();
42*89c4ff92SAndroid Build Coastguard Worker 
43*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint8_t_size  = sizeof(uint8_t);
44*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint32_t_size = sizeof(uint32_t);
45*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint64_t_size = sizeof(uint64_t);
46*89c4ff92SAndroid Build Coastguard Worker 
47*89c4ff92SAndroid Build Coastguard Worker     // Check the packet header
48*89c4ff92SAndroid Build Coastguard Worker     unsigned int offset = 0;
49*89c4ff92SAndroid Build Coastguard Worker     uint32_t packetHeaderWord0 = ReadUint32(packetBuffer, offset);
50*89c4ff92SAndroid Build Coastguard Worker     uint32_t packetFamily = (packetHeaderWord0 >> 26) & 0x0000003F;
51*89c4ff92SAndroid Build Coastguard Worker     uint32_t packetClass  = (packetHeaderWord0 >> 19) & 0x0000007F;
52*89c4ff92SAndroid Build Coastguard Worker     uint32_t packetType   = (packetHeaderWord0 >> 16) & 0x00000007;
53*89c4ff92SAndroid Build Coastguard Worker     uint32_t streamId     = (packetHeaderWord0 >>  0) & 0x00000007;
54*89c4ff92SAndroid Build Coastguard Worker 
55*89c4ff92SAndroid Build Coastguard Worker     CHECK(packetFamily == 1);
56*89c4ff92SAndroid Build Coastguard Worker     CHECK(packetClass  == 0);
57*89c4ff92SAndroid Build Coastguard Worker     CHECK(packetType   == 0);
58*89c4ff92SAndroid Build Coastguard Worker     CHECK(streamId     == 0);
59*89c4ff92SAndroid Build Coastguard Worker 
60*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
61*89c4ff92SAndroid Build Coastguard Worker     uint32_t packetHeaderWord1 = ReadUint32(packetBuffer, offset);
62*89c4ff92SAndroid Build Coastguard Worker     uint32_t sequenceNumbered = (packetHeaderWord1 >> 24) & 0x00000001;
63*89c4ff92SAndroid Build Coastguard Worker     uint32_t dataLength       = (packetHeaderWord1 >>  0) & 0x00FFFFFF;
64*89c4ff92SAndroid Build Coastguard Worker     CHECK(sequenceNumbered ==  0);
65*89c4ff92SAndroid Build Coastguard Worker     CHECK(dataLength       == 443);
66*89c4ff92SAndroid Build Coastguard Worker 
67*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
68*89c4ff92SAndroid Build Coastguard Worker     uint8_t readStreamVersion = ReadUint8(packetBuffer, offset);
69*89c4ff92SAndroid Build Coastguard Worker     CHECK(readStreamVersion == 4);
70*89c4ff92SAndroid Build Coastguard Worker     offset += uint8_t_size;
71*89c4ff92SAndroid Build Coastguard Worker     uint8_t readPointerBytes = ReadUint8(packetBuffer, offset);
72*89c4ff92SAndroid Build Coastguard Worker     CHECK(readPointerBytes == uint64_t_size);
73*89c4ff92SAndroid Build Coastguard Worker     offset += uint8_t_size;
74*89c4ff92SAndroid Build Coastguard Worker     uint8_t readThreadIdBytes = ReadUint8(packetBuffer, offset);
75*89c4ff92SAndroid Build Coastguard Worker     CHECK(readThreadIdBytes == ThreadIdSize);
76*89c4ff92SAndroid Build Coastguard Worker 
77*89c4ff92SAndroid Build Coastguard Worker     offset += uint8_t_size;
78*89c4ff92SAndroid Build Coastguard Worker     uint32_t DeclCount = ReadUint32(packetBuffer, offset);
79*89c4ff92SAndroid Build Coastguard Worker     CHECK(DeclCount == 5);
80*89c4ff92SAndroid Build Coastguard Worker 
81*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
82*89c4ff92SAndroid Build Coastguard Worker     arm::pipe::SwTraceMessage swTraceMessage = arm::pipe::ReadSwTraceMessage(packetBuffer->GetReadableData(),
83*89c4ff92SAndroid Build Coastguard Worker                                                                              offset,
84*89c4ff92SAndroid Build Coastguard Worker                                                                              packetBuffer->GetSize());
85*89c4ff92SAndroid Build Coastguard Worker 
86*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_Id == 0);
87*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_Name == "declareLabel");
88*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_UiName == "declare label");
89*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes.size() == 2);
90*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes[0] == 'p');
91*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes[1] == 's');
92*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames.size() == 2);
93*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames[0] == "guid");
94*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames[1] == "value");
95*89c4ff92SAndroid Build Coastguard Worker 
96*89c4ff92SAndroid Build Coastguard Worker     swTraceMessage = arm::pipe::ReadSwTraceMessage(packetBuffer->GetReadableData(),
97*89c4ff92SAndroid Build Coastguard Worker                                                    offset,
98*89c4ff92SAndroid Build Coastguard Worker                                                    packetBuffer->GetSize());
99*89c4ff92SAndroid Build Coastguard Worker 
100*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_Id == 1);
101*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_Name == "declareEntity");
102*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_UiName == "declare entity");
103*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes.size() == 1);
104*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes[0] == 'p');
105*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames.size() == 1);
106*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames[0] == "guid");
107*89c4ff92SAndroid Build Coastguard Worker 
108*89c4ff92SAndroid Build Coastguard Worker     swTraceMessage = arm::pipe::ReadSwTraceMessage(packetBuffer->GetReadableData(),
109*89c4ff92SAndroid Build Coastguard Worker                                                    offset,
110*89c4ff92SAndroid Build Coastguard Worker                                                    packetBuffer->GetSize());
111*89c4ff92SAndroid Build Coastguard Worker 
112*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_Id == 2);
113*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_Name == "declareEventClass");
114*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_UiName == "declare event class");
115*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes.size() == 2);
116*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes[0] == 'p');
117*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes[1] == 'p');
118*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames.size() == 2);
119*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames[0] == "guid");
120*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames[1] == "nameGuid");
121*89c4ff92SAndroid Build Coastguard Worker 
122*89c4ff92SAndroid Build Coastguard Worker     swTraceMessage = arm::pipe::ReadSwTraceMessage(packetBuffer->GetReadableData(),
123*89c4ff92SAndroid Build Coastguard Worker                                                    offset,
124*89c4ff92SAndroid Build Coastguard Worker                                                    packetBuffer->GetSize());
125*89c4ff92SAndroid Build Coastguard Worker 
126*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_Id == 3);
127*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_Name == "declareRelationship");
128*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_UiName == "declare relationship");
129*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes.size() == 5);
130*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes[0] == 'I');
131*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes[1] == 'p');
132*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes[2] == 'p');
133*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes[3] == 'p');
134*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes[4] == 'p');
135*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames.size() == 5);
136*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames[0] == "relationshipType");
137*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames[1] == "relationshipGuid");
138*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames[2] == "headGuid");
139*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames[3] == "tailGuid");
140*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames[4] == "attributeGuid");
141*89c4ff92SAndroid Build Coastguard Worker 
142*89c4ff92SAndroid Build Coastguard Worker     swTraceMessage = arm::pipe::ReadSwTraceMessage(packetBuffer->GetReadableData(),
143*89c4ff92SAndroid Build Coastguard Worker                                                    offset,
144*89c4ff92SAndroid Build Coastguard Worker                                                    packetBuffer->GetSize());
145*89c4ff92SAndroid Build Coastguard Worker 
146*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_Id == 4);
147*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_Name == "declareEvent");
148*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_UiName == "declare event");
149*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes.size() == 3);
150*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes[0] == '@');
151*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes[1] == 't');
152*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgTypes[2] == 'p');
153*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames.size() == 3);
154*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames[0] == "timestamp");
155*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames[1] == "threadId");
156*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceMessage.m_ArgNames[2] == "eventGuid");
157*89c4ff92SAndroid Build Coastguard Worker }
158*89c4ff92SAndroid Build Coastguard Worker 
159*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("SendTimelineEntityWithEventClassPacketTest")
160*89c4ff92SAndroid Build Coastguard Worker {
161*89c4ff92SAndroid Build Coastguard Worker     MockBufferManager bufferManager(40);
162*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketWriterFactory timelinePacketWriterFactory(bufferManager);
163*89c4ff92SAndroid Build Coastguard Worker     std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = timelinePacketWriterFactory.GetSendTimelinePacket();
164*89c4ff92SAndroid Build Coastguard Worker 
165*89c4ff92SAndroid Build Coastguard Worker     const uint64_t entityBinaryPacketProfilingGuid = 123456u;
166*89c4ff92SAndroid Build Coastguard Worker     sendTimelinePacket->SendTimelineEntityBinaryPacket(entityBinaryPacketProfilingGuid);
167*89c4ff92SAndroid Build Coastguard Worker 
168*89c4ff92SAndroid Build Coastguard Worker     const uint64_t eventClassBinaryPacketProfilingGuid = 789123u;
169*89c4ff92SAndroid Build Coastguard Worker     const uint64_t eventClassBinaryPacketNameGuid = 8845u;
170*89c4ff92SAndroid Build Coastguard Worker     sendTimelinePacket->SendTimelineEventClassBinaryPacket(
171*89c4ff92SAndroid Build Coastguard Worker         eventClassBinaryPacketProfilingGuid, eventClassBinaryPacketNameGuid);
172*89c4ff92SAndroid Build Coastguard Worker 
173*89c4ff92SAndroid Build Coastguard Worker     // Commit the messages
174*89c4ff92SAndroid Build Coastguard Worker     sendTimelinePacket->Commit();
175*89c4ff92SAndroid Build Coastguard Worker 
176*89c4ff92SAndroid Build Coastguard Worker     // Get the readable buffer
177*89c4ff92SAndroid Build Coastguard Worker     auto packetBuffer = bufferManager.GetReadableBuffer();
178*89c4ff92SAndroid Build Coastguard Worker 
179*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint32_t_size = sizeof(uint32_t);
180*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint64_t_size = sizeof(uint64_t);
181*89c4ff92SAndroid Build Coastguard Worker 
182*89c4ff92SAndroid Build Coastguard Worker     // Check the packet header
183*89c4ff92SAndroid Build Coastguard Worker     unsigned int offset = 0;
184*89c4ff92SAndroid Build Coastguard Worker 
185*89c4ff92SAndroid Build Coastguard Worker     // Reading TimelineEntityClassBinaryPacket
186*89c4ff92SAndroid Build Coastguard Worker     uint32_t entityBinaryPacketHeaderWord0  = ReadUint32(packetBuffer, offset);
187*89c4ff92SAndroid Build Coastguard Worker     uint32_t entityBinaryPacketFamily       = (entityBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
188*89c4ff92SAndroid Build Coastguard Worker     uint32_t entityBinaryPacketClass        = (entityBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
189*89c4ff92SAndroid Build Coastguard Worker     uint32_t entityBinaryPacketType         = (entityBinaryPacketHeaderWord0 >> 16) & 0x00000007;
190*89c4ff92SAndroid Build Coastguard Worker     uint32_t entityBinaryPacketStreamId     = (entityBinaryPacketHeaderWord0 >>  0) & 0x00000007;
191*89c4ff92SAndroid Build Coastguard Worker 
192*89c4ff92SAndroid Build Coastguard Worker     CHECK(entityBinaryPacketFamily       == 1);
193*89c4ff92SAndroid Build Coastguard Worker     CHECK(entityBinaryPacketClass        == 0);
194*89c4ff92SAndroid Build Coastguard Worker     CHECK(entityBinaryPacketType         == 1);
195*89c4ff92SAndroid Build Coastguard Worker     CHECK(entityBinaryPacketStreamId     == 0);
196*89c4ff92SAndroid Build Coastguard Worker 
197*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
198*89c4ff92SAndroid Build Coastguard Worker 
199*89c4ff92SAndroid Build Coastguard Worker     uint32_t entityBinaryPacketHeaderWord1      = ReadUint32(packetBuffer, offset);
200*89c4ff92SAndroid Build Coastguard Worker 
201*89c4ff92SAndroid Build Coastguard Worker     uint32_t entityBinaryPacketSequenceNumbered = (entityBinaryPacketHeaderWord1 >> 24) & 0x00000001;
202*89c4ff92SAndroid Build Coastguard Worker     uint32_t entityBinaryPacketDataLength       = (entityBinaryPacketHeaderWord1 >>  0) & 0x00FFFFFF;
203*89c4ff92SAndroid Build Coastguard Worker 
204*89c4ff92SAndroid Build Coastguard Worker     CHECK(entityBinaryPacketSequenceNumbered == 0);
205*89c4ff92SAndroid Build Coastguard Worker     CHECK(entityBinaryPacketDataLength       == 32);
206*89c4ff92SAndroid Build Coastguard Worker 
207*89c4ff92SAndroid Build Coastguard Worker     // Check the decl_id
208*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
209*89c4ff92SAndroid Build Coastguard Worker     uint32_t entitytDecId = ReadUint32(packetBuffer, offset);
210*89c4ff92SAndroid Build Coastguard Worker 
211*89c4ff92SAndroid Build Coastguard Worker     CHECK(entitytDecId == uint32_t(1));
212*89c4ff92SAndroid Build Coastguard Worker 
213*89c4ff92SAndroid Build Coastguard Worker     // Check the profiling GUID
214*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
215*89c4ff92SAndroid Build Coastguard Worker     uint64_t readProfilingGuid = ReadUint64(packetBuffer, offset);
216*89c4ff92SAndroid Build Coastguard Worker 
217*89c4ff92SAndroid Build Coastguard Worker     CHECK(readProfilingGuid == entityBinaryPacketProfilingGuid);
218*89c4ff92SAndroid Build Coastguard Worker 
219*89c4ff92SAndroid Build Coastguard Worker     // Reading TimelineEventClassBinaryPacket
220*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
221*89c4ff92SAndroid Build Coastguard Worker 
222*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventClassDeclId = ReadUint32(packetBuffer, offset);
223*89c4ff92SAndroid Build Coastguard Worker     CHECK(eventClassDeclId == uint32_t(2));
224*89c4ff92SAndroid Build Coastguard Worker 
225*89c4ff92SAndroid Build Coastguard Worker     // Check the profiling GUID
226*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
227*89c4ff92SAndroid Build Coastguard Worker     readProfilingGuid = ReadUint64(packetBuffer, offset);
228*89c4ff92SAndroid Build Coastguard Worker     CHECK(readProfilingGuid == eventClassBinaryPacketProfilingGuid);
229*89c4ff92SAndroid Build Coastguard Worker 
230*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
231*89c4ff92SAndroid Build Coastguard Worker     uint64_t readEventClassNameGuid = ReadUint64(packetBuffer, offset);
232*89c4ff92SAndroid Build Coastguard Worker     CHECK(readEventClassNameGuid == eventClassBinaryPacketNameGuid);
233*89c4ff92SAndroid Build Coastguard Worker 
234*89c4ff92SAndroid Build Coastguard Worker     bufferManager.MarkRead(packetBuffer);
235*89c4ff92SAndroid Build Coastguard Worker }
236*89c4ff92SAndroid Build Coastguard Worker 
237*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("SendEventClassAfterTimelineEntityPacketTest")
238*89c4ff92SAndroid Build Coastguard Worker {
239*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint32_t_size = sizeof(uint32_t);
240*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint64_t_size = sizeof(uint64_t);
241*89c4ff92SAndroid Build Coastguard Worker 
242*89c4ff92SAndroid Build Coastguard Worker     MockBufferManager bufferManager(512);
243*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketWriterFactory timelinePacketWriterFactory(bufferManager);
244*89c4ff92SAndroid Build Coastguard Worker     std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = timelinePacketWriterFactory.GetSendTimelinePacket();
245*89c4ff92SAndroid Build Coastguard Worker 
246*89c4ff92SAndroid Build Coastguard Worker     // Send TimelineEntityClassBinaryPacket
247*89c4ff92SAndroid Build Coastguard Worker     const uint64_t entityBinaryPacketProfilingGuid = 123456u;
248*89c4ff92SAndroid Build Coastguard Worker     sendTimelinePacket->SendTimelineEntityBinaryPacket(entityBinaryPacketProfilingGuid);
249*89c4ff92SAndroid Build Coastguard Worker 
250*89c4ff92SAndroid Build Coastguard Worker     // Commit the buffer
251*89c4ff92SAndroid Build Coastguard Worker     sendTimelinePacket->Commit();
252*89c4ff92SAndroid Build Coastguard Worker 
253*89c4ff92SAndroid Build Coastguard Worker     // Get the readable buffer
254*89c4ff92SAndroid Build Coastguard Worker     auto packetBuffer = bufferManager.GetReadableBuffer();
255*89c4ff92SAndroid Build Coastguard Worker 
256*89c4ff92SAndroid Build Coastguard Worker     // Check the packet header
257*89c4ff92SAndroid Build Coastguard Worker     unsigned int offset = 0;
258*89c4ff92SAndroid Build Coastguard Worker 
259*89c4ff92SAndroid Build Coastguard Worker     // Reading TimelineEntityClassBinaryPacket
260*89c4ff92SAndroid Build Coastguard Worker     uint32_t entityBinaryPacketHeaderWord0 = ReadUint32(packetBuffer, offset);
261*89c4ff92SAndroid Build Coastguard Worker     uint32_t entityBinaryPacketFamily = (entityBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
262*89c4ff92SAndroid Build Coastguard Worker     uint32_t entityBinaryPacketClass  = (entityBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
263*89c4ff92SAndroid Build Coastguard Worker     uint32_t entityBinaryPacketType   = (entityBinaryPacketHeaderWord0 >> 16) & 0x00000007;
264*89c4ff92SAndroid Build Coastguard Worker     uint32_t entityBinaryPacketStreamId     = (entityBinaryPacketHeaderWord0 >>  0) & 0x00000007;
265*89c4ff92SAndroid Build Coastguard Worker 
266*89c4ff92SAndroid Build Coastguard Worker     CHECK(entityBinaryPacketFamily == 1);
267*89c4ff92SAndroid Build Coastguard Worker     CHECK(entityBinaryPacketClass  == 0);
268*89c4ff92SAndroid Build Coastguard Worker     CHECK(entityBinaryPacketType   == 1);
269*89c4ff92SAndroid Build Coastguard Worker     CHECK(entityBinaryPacketStreamId     == 0);
270*89c4ff92SAndroid Build Coastguard Worker 
271*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
272*89c4ff92SAndroid Build Coastguard Worker     uint32_t entityBinaryPacketHeaderWord1 = ReadUint32(packetBuffer, offset);
273*89c4ff92SAndroid Build Coastguard Worker     uint32_t entityBinaryPacketSequenceNumbered = (entityBinaryPacketHeaderWord1 >> 24) & 0x00000001;
274*89c4ff92SAndroid Build Coastguard Worker     uint32_t entityBinaryPacketDataLength       = (entityBinaryPacketHeaderWord1 >>  0) & 0x00FFFFFF;
275*89c4ff92SAndroid Build Coastguard Worker     CHECK(entityBinaryPacketSequenceNumbered == 0);
276*89c4ff92SAndroid Build Coastguard Worker     CHECK(entityBinaryPacketDataLength       == 12);
277*89c4ff92SAndroid Build Coastguard Worker 
278*89c4ff92SAndroid Build Coastguard Worker     // Check the decl_id
279*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
280*89c4ff92SAndroid Build Coastguard Worker     uint32_t entitytDecId = ReadUint32(packetBuffer, offset);
281*89c4ff92SAndroid Build Coastguard Worker 
282*89c4ff92SAndroid Build Coastguard Worker     CHECK(entitytDecId == uint32_t(1));
283*89c4ff92SAndroid Build Coastguard Worker 
284*89c4ff92SAndroid Build Coastguard Worker     // Check the profiling GUID
285*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
286*89c4ff92SAndroid Build Coastguard Worker     uint64_t readProfilingGuid = ReadUint64(packetBuffer, offset);
287*89c4ff92SAndroid Build Coastguard Worker 
288*89c4ff92SAndroid Build Coastguard Worker     CHECK(readProfilingGuid == entityBinaryPacketProfilingGuid);
289*89c4ff92SAndroid Build Coastguard Worker 
290*89c4ff92SAndroid Build Coastguard Worker     bufferManager.MarkRead(packetBuffer);
291*89c4ff92SAndroid Build Coastguard Worker 
292*89c4ff92SAndroid Build Coastguard Worker     // Send TimelineEventClassBinaryPacket
293*89c4ff92SAndroid Build Coastguard Worker     const uint64_t eventClassBinaryPacketProfilingGuid = 789123u;
294*89c4ff92SAndroid Build Coastguard Worker     const uint64_t eventClassBinaryPacketNameGuid = 8845u;
295*89c4ff92SAndroid Build Coastguard Worker     sendTimelinePacket->SendTimelineEventClassBinaryPacket(
296*89c4ff92SAndroid Build Coastguard Worker         eventClassBinaryPacketProfilingGuid, eventClassBinaryPacketNameGuid);
297*89c4ff92SAndroid Build Coastguard Worker 
298*89c4ff92SAndroid Build Coastguard Worker     // Commit the buffer
299*89c4ff92SAndroid Build Coastguard Worker     sendTimelinePacket->Commit();
300*89c4ff92SAndroid Build Coastguard Worker 
301*89c4ff92SAndroid Build Coastguard Worker     // Get the readable buffer
302*89c4ff92SAndroid Build Coastguard Worker     packetBuffer = bufferManager.GetReadableBuffer();
303*89c4ff92SAndroid Build Coastguard Worker 
304*89c4ff92SAndroid Build Coastguard Worker     // Check the packet header
305*89c4ff92SAndroid Build Coastguard Worker     offset = 0;
306*89c4ff92SAndroid Build Coastguard Worker 
307*89c4ff92SAndroid Build Coastguard Worker     // Reading TimelineEventClassBinaryPacket
308*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventClassBinaryPacketHeaderWord0 = ReadUint32(packetBuffer, offset);
309*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventClassBinaryPacketFamily = (eventClassBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
310*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventClassBinaryPacketClass  = (eventClassBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
311*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventClassBinaryPacketType   = (eventClassBinaryPacketHeaderWord0 >> 16) & 0x00000007;
312*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventClassBinaryPacketStreamId     = (eventClassBinaryPacketHeaderWord0 >>  0) & 0x00000007;
313*89c4ff92SAndroid Build Coastguard Worker 
314*89c4ff92SAndroid Build Coastguard Worker     CHECK(eventClassBinaryPacketFamily == 1);
315*89c4ff92SAndroid Build Coastguard Worker     CHECK(eventClassBinaryPacketClass  == 0);
316*89c4ff92SAndroid Build Coastguard Worker     CHECK(eventClassBinaryPacketType   == 1);
317*89c4ff92SAndroid Build Coastguard Worker     CHECK(eventClassBinaryPacketStreamId     == 0);
318*89c4ff92SAndroid Build Coastguard Worker 
319*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
320*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventClassBinaryPacketHeaderWord1 = ReadUint32(packetBuffer, offset);
321*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventClassBinaryPacketSequenceNumbered = (eventClassBinaryPacketHeaderWord1 >> 24) & 0x00000001;
322*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventClassBinaryPacketDataLength       = (eventClassBinaryPacketHeaderWord1 >>  0) & 0x00FFFFFF;
323*89c4ff92SAndroid Build Coastguard Worker     CHECK(eventClassBinaryPacketSequenceNumbered == 0);
324*89c4ff92SAndroid Build Coastguard Worker     CHECK(eventClassBinaryPacketDataLength       == 20);
325*89c4ff92SAndroid Build Coastguard Worker 
326*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
327*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventClassDeclId = ReadUint32(packetBuffer, offset);
328*89c4ff92SAndroid Build Coastguard Worker     CHECK(eventClassDeclId == uint32_t(2));
329*89c4ff92SAndroid Build Coastguard Worker 
330*89c4ff92SAndroid Build Coastguard Worker     // Check the profiling GUID
331*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
332*89c4ff92SAndroid Build Coastguard Worker     readProfilingGuid = ReadUint64(packetBuffer, offset);
333*89c4ff92SAndroid Build Coastguard Worker     CHECK(readProfilingGuid == eventClassBinaryPacketProfilingGuid);
334*89c4ff92SAndroid Build Coastguard Worker 
335*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
336*89c4ff92SAndroid Build Coastguard Worker     uint64_t readEventClassNameGuid = ReadUint64(packetBuffer, offset);
337*89c4ff92SAndroid Build Coastguard Worker     CHECK(readEventClassNameGuid == eventClassBinaryPacketNameGuid);
338*89c4ff92SAndroid Build Coastguard Worker 
339*89c4ff92SAndroid Build Coastguard Worker     bufferManager.MarkRead(packetBuffer);
340*89c4ff92SAndroid Build Coastguard Worker 
341*89c4ff92SAndroid Build Coastguard Worker     // Send TimelineEventBinaryPacket
342*89c4ff92SAndroid Build Coastguard Worker     const uint64_t timestamp = 456789u;
343*89c4ff92SAndroid Build Coastguard Worker     const int threadId = arm::pipe::GetCurrentThreadId();
344*89c4ff92SAndroid Build Coastguard Worker     const uint64_t eventProfilingGuid = 123456u;
345*89c4ff92SAndroid Build Coastguard Worker     sendTimelinePacket->SendTimelineEventBinaryPacket(timestamp, threadId, eventProfilingGuid);
346*89c4ff92SAndroid Build Coastguard Worker 
347*89c4ff92SAndroid Build Coastguard Worker     // Commit the buffer
348*89c4ff92SAndroid Build Coastguard Worker     sendTimelinePacket->Commit();
349*89c4ff92SAndroid Build Coastguard Worker 
350*89c4ff92SAndroid Build Coastguard Worker     // Get the readable buffer
351*89c4ff92SAndroid Build Coastguard Worker     packetBuffer = bufferManager.GetReadableBuffer();
352*89c4ff92SAndroid Build Coastguard Worker 
353*89c4ff92SAndroid Build Coastguard Worker     // Check the packet header
354*89c4ff92SAndroid Build Coastguard Worker     offset = 0;
355*89c4ff92SAndroid Build Coastguard Worker 
356*89c4ff92SAndroid Build Coastguard Worker     // Reading TimelineEventBinaryPacket
357*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventBinaryPacketHeaderWord0 = ReadUint32(packetBuffer, offset);
358*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventBinaryPacketFamily = (eventBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
359*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventBinaryPacketClass  = (eventBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
360*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventBinaryPacketType   = (eventBinaryPacketHeaderWord0 >> 16) & 0x00000007;
361*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventBinaryPacketStreamId     = (eventBinaryPacketHeaderWord0 >>  0) & 0x00000007;
362*89c4ff92SAndroid Build Coastguard Worker 
363*89c4ff92SAndroid Build Coastguard Worker     CHECK(eventBinaryPacketFamily == 1);
364*89c4ff92SAndroid Build Coastguard Worker     CHECK(eventBinaryPacketClass  == 0);
365*89c4ff92SAndroid Build Coastguard Worker     CHECK(eventBinaryPacketType   == 1);
366*89c4ff92SAndroid Build Coastguard Worker     CHECK(eventBinaryPacketStreamId     == 0);
367*89c4ff92SAndroid Build Coastguard Worker 
368*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
369*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventBinaryPacketHeaderWord1 = ReadUint32(packetBuffer, offset);
370*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventBinaryPacketSequenceNumbered = (eventBinaryPacketHeaderWord1 >> 24) & 0x00000001;
371*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventBinaryPacketDataLength       = (eventBinaryPacketHeaderWord1 >>  0) & 0x00FFFFFF;
372*89c4ff92SAndroid Build Coastguard Worker     CHECK(eventBinaryPacketSequenceNumbered == 0);
373*89c4ff92SAndroid Build Coastguard Worker     CHECK(eventBinaryPacketDataLength == 20 + ThreadIdSize);
374*89c4ff92SAndroid Build Coastguard Worker 
375*89c4ff92SAndroid Build Coastguard Worker     // Check the decl_id
376*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
377*89c4ff92SAndroid Build Coastguard Worker     uint32_t eventDeclId = ReadUint32(packetBuffer, offset);
378*89c4ff92SAndroid Build Coastguard Worker     CHECK(eventDeclId == 4);
379*89c4ff92SAndroid Build Coastguard Worker 
380*89c4ff92SAndroid Build Coastguard Worker     // Check the timestamp
381*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
382*89c4ff92SAndroid Build Coastguard Worker     uint64_t eventTimestamp = ReadUint64(packetBuffer, offset);
383*89c4ff92SAndroid Build Coastguard Worker     CHECK(eventTimestamp == timestamp);
384*89c4ff92SAndroid Build Coastguard Worker 
385*89c4ff92SAndroid Build Coastguard Worker     // Check the thread id
386*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
387*89c4ff92SAndroid Build Coastguard Worker     std::vector<uint8_t> readThreadId(ThreadIdSize, 0);
388*89c4ff92SAndroid Build Coastguard Worker     ReadBytes(packetBuffer, offset, ThreadIdSize, readThreadId.data());
389*89c4ff92SAndroid Build Coastguard Worker     CHECK(readThreadId == threadId);
390*89c4ff92SAndroid Build Coastguard Worker 
391*89c4ff92SAndroid Build Coastguard Worker     // Check the profiling GUID
392*89c4ff92SAndroid Build Coastguard Worker     offset += ThreadIdSize;
393*89c4ff92SAndroid Build Coastguard Worker     readProfilingGuid = ReadUint64(packetBuffer, offset);
394*89c4ff92SAndroid Build Coastguard Worker     CHECK(readProfilingGuid == eventProfilingGuid);
395*89c4ff92SAndroid Build Coastguard Worker }
396*89c4ff92SAndroid Build Coastguard Worker 
397*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("SendTimelinePacketTests2")
398*89c4ff92SAndroid Build Coastguard Worker {
399*89c4ff92SAndroid Build Coastguard Worker     MockBufferManager bufferManager(40);
400*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketWriterFactory timelinePacketWriterFactory(bufferManager);
401*89c4ff92SAndroid Build Coastguard Worker     std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = timelinePacketWriterFactory.GetSendTimelinePacket();
402*89c4ff92SAndroid Build Coastguard Worker 
403*89c4ff92SAndroid Build Coastguard Worker     CHECK_THROWS_AS(sendTimelinePacket->SendTimelineMessageDirectoryPackage(),
404*89c4ff92SAndroid Build Coastguard Worker                     arm::pipe::ProfilingException);
405*89c4ff92SAndroid Build Coastguard Worker }
406*89c4ff92SAndroid Build Coastguard Worker 
407*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("SendTimelinePacketTests3")
408*89c4ff92SAndroid Build Coastguard Worker {
409*89c4ff92SAndroid Build Coastguard Worker     MockBufferManager bufferManager(512);
410*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketWriterFactory timelinePacketWriterFactory(bufferManager);
411*89c4ff92SAndroid Build Coastguard Worker     std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = timelinePacketWriterFactory.GetSendTimelinePacket();
412*89c4ff92SAndroid Build Coastguard Worker 
413*89c4ff92SAndroid Build Coastguard Worker     // Send TimelineEntityClassBinaryPacket
414*89c4ff92SAndroid Build Coastguard Worker     const uint64_t entityBinaryPacketProfilingGuid = 123456u;
415*89c4ff92SAndroid Build Coastguard Worker     sendTimelinePacket->SendTimelineEntityBinaryPacket(entityBinaryPacketProfilingGuid);
416*89c4ff92SAndroid Build Coastguard Worker 
417*89c4ff92SAndroid Build Coastguard Worker     // Commit the buffer
418*89c4ff92SAndroid Build Coastguard Worker     sendTimelinePacket->Commit();
419*89c4ff92SAndroid Build Coastguard Worker 
420*89c4ff92SAndroid Build Coastguard Worker     // Get the readable buffer
421*89c4ff92SAndroid Build Coastguard Worker     auto packetBuffer = bufferManager.GetReadableBuffer();
422*89c4ff92SAndroid Build Coastguard Worker 
423*89c4ff92SAndroid Build Coastguard Worker     // Send TimelineEventClassBinaryPacket
424*89c4ff92SAndroid Build Coastguard Worker     const uint64_t eventClassBinaryPacketProfilingGuid = 789123u;
425*89c4ff92SAndroid Build Coastguard Worker     const uint64_t eventClassBinaryPacketNameGuid = 8845u;
426*89c4ff92SAndroid Build Coastguard Worker     CHECK_THROWS_AS(sendTimelinePacket->SendTimelineEventClassBinaryPacket(
427*89c4ff92SAndroid Build Coastguard Worker                       eventClassBinaryPacketProfilingGuid, eventClassBinaryPacketNameGuid),
428*89c4ff92SAndroid Build Coastguard Worker                       BufferExhaustion);
429*89c4ff92SAndroid Build Coastguard Worker }
430*89c4ff92SAndroid Build Coastguard Worker 
431*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("GetGuidsFromProfilingService")
432*89c4ff92SAndroid Build Coastguard Worker {
433*89c4ff92SAndroid Build Coastguard Worker     LogLevelSwapper logLevelSwapper(arm::pipe::LogSeverity::Fatal);
434*89c4ff92SAndroid Build Coastguard Worker 
435*89c4ff92SAndroid Build Coastguard Worker     armnn::IRuntime::CreationOptions options;
436*89c4ff92SAndroid Build Coastguard Worker     options.m_ProfilingOptions.m_EnableProfiling = true;
437*89c4ff92SAndroid Build Coastguard Worker     armnn::RuntimeImpl runtime(options);
438*89c4ff92SAndroid Build Coastguard Worker     armnn::ArmNNProfilingServiceInitialiser initialiser;
439*89c4ff92SAndroid Build Coastguard Worker     ProfilingService profilingService(arm::pipe::MAX_ARMNN_COUNTER,
440*89c4ff92SAndroid Build Coastguard Worker                                       initialiser,
441*89c4ff92SAndroid Build Coastguard Worker                                       arm::pipe::ARMNN_SOFTWARE_INFO,
442*89c4ff92SAndroid Build Coastguard Worker                                       arm::pipe::ARMNN_SOFTWARE_VERSION,
443*89c4ff92SAndroid Build Coastguard Worker                                       arm::pipe::ARMNN_HARDWARE_VERSION,
444*89c4ff92SAndroid Build Coastguard Worker                                       runtime);
445*89c4ff92SAndroid Build Coastguard Worker 
446*89c4ff92SAndroid Build Coastguard Worker     profilingService.ResetExternalProfilingOptions(
447*89c4ff92SAndroid Build Coastguard Worker         ConvertExternalProfilingOptions(options.m_ProfilingOptions), true);
448*89c4ff92SAndroid Build Coastguard Worker     ProfilingStaticGuid staticGuid = profilingService.GetStaticId("dummy");
449*89c4ff92SAndroid Build Coastguard Worker     std::hash<std::string> hasher;
450*89c4ff92SAndroid Build Coastguard Worker     uint64_t hash = static_cast<uint64_t>(hasher("dummy"));
451*89c4ff92SAndroid Build Coastguard Worker     ProfilingStaticGuid expectedStaticValue(hash | MIN_STATIC_GUID);
452*89c4ff92SAndroid Build Coastguard Worker     CHECK(staticGuid == expectedStaticValue);
453*89c4ff92SAndroid Build Coastguard Worker     ProfilingDynamicGuid dynamicGuid = profilingService.GetNextGuid();
454*89c4ff92SAndroid Build Coastguard Worker     uint64_t dynamicGuidValue = static_cast<uint64_t>(dynamicGuid);
455*89c4ff92SAndroid Build Coastguard Worker     ++dynamicGuidValue;
456*89c4ff92SAndroid Build Coastguard Worker     ProfilingDynamicGuid expectedDynamicValue(dynamicGuidValue);
457*89c4ff92SAndroid Build Coastguard Worker     dynamicGuid = profilingService.GetNextGuid();
458*89c4ff92SAndroid Build Coastguard Worker     CHECK(dynamicGuid == expectedDynamicValue);
459*89c4ff92SAndroid Build Coastguard Worker }
460*89c4ff92SAndroid Build Coastguard Worker 
461*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("GetTimelinePackerWriterFromProfilingService")
462*89c4ff92SAndroid Build Coastguard Worker {
463*89c4ff92SAndroid Build Coastguard Worker     LogLevelSwapper logLevelSwapper(arm::pipe::LogSeverity::Fatal);
464*89c4ff92SAndroid Build Coastguard Worker 
465*89c4ff92SAndroid Build Coastguard Worker     ProfilingOptions options;
466*89c4ff92SAndroid Build Coastguard Worker     options.m_EnableProfiling = true;
467*89c4ff92SAndroid Build Coastguard Worker     armnn::ArmNNProfilingServiceInitialiser initialiser;
468*89c4ff92SAndroid Build Coastguard Worker     ProfilingService profilingService(arm::pipe::MAX_ARMNN_COUNTER,
469*89c4ff92SAndroid Build Coastguard Worker                                       initialiser,
470*89c4ff92SAndroid Build Coastguard Worker                                       arm::pipe::ARMNN_SOFTWARE_INFO,
471*89c4ff92SAndroid Build Coastguard Worker                                       arm::pipe::ARMNN_SOFTWARE_VERSION,
472*89c4ff92SAndroid Build Coastguard Worker                                       arm::pipe::ARMNN_HARDWARE_VERSION);
473*89c4ff92SAndroid Build Coastguard Worker     profilingService.ResetExternalProfilingOptions(options, true);
474*89c4ff92SAndroid Build Coastguard Worker 
475*89c4ff92SAndroid Build Coastguard Worker     std::unique_ptr<ISendTimelinePacket> writer = profilingService.GetSendTimelinePacket();
476*89c4ff92SAndroid Build Coastguard Worker     CHECK(writer != nullptr);
477*89c4ff92SAndroid Build Coastguard Worker }
478*89c4ff92SAndroid Build Coastguard Worker 
479*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("CheckStaticGuidsAndEvents")
480*89c4ff92SAndroid Build Coastguard Worker {
481*89c4ff92SAndroid Build Coastguard Worker     CHECK("name" == LabelsAndEventClasses::NAME_LABEL);
482*89c4ff92SAndroid Build Coastguard Worker     CHECK("type" == LabelsAndEventClasses::TYPE_LABEL);
483*89c4ff92SAndroid Build Coastguard Worker     CHECK("index" == LabelsAndEventClasses::INDEX_LABEL);
484*89c4ff92SAndroid Build Coastguard Worker 
485*89c4ff92SAndroid Build Coastguard Worker     std::hash<std::string> hasher;
486*89c4ff92SAndroid Build Coastguard Worker 
487*89c4ff92SAndroid Build Coastguard Worker     uint64_t hash = static_cast<uint64_t>(hasher(LabelsAndEventClasses::NAME_LABEL));
488*89c4ff92SAndroid Build Coastguard Worker     ProfilingStaticGuid expectedNameGuid(hash | MIN_STATIC_GUID);
489*89c4ff92SAndroid Build Coastguard Worker     CHECK(LabelsAndEventClasses::NAME_GUID == expectedNameGuid);
490*89c4ff92SAndroid Build Coastguard Worker 
491*89c4ff92SAndroid Build Coastguard Worker     hash = static_cast<uint64_t>(hasher(LabelsAndEventClasses::TYPE_LABEL));
492*89c4ff92SAndroid Build Coastguard Worker     ProfilingStaticGuid expectedTypeGuid(hash | MIN_STATIC_GUID);
493*89c4ff92SAndroid Build Coastguard Worker     CHECK(LabelsAndEventClasses::TYPE_GUID == expectedTypeGuid);
494*89c4ff92SAndroid Build Coastguard Worker 
495*89c4ff92SAndroid Build Coastguard Worker     hash = static_cast<uint64_t>(hasher(LabelsAndEventClasses::INDEX_LABEL));
496*89c4ff92SAndroid Build Coastguard Worker     ProfilingStaticGuid expectedIndexGuid(hash | MIN_STATIC_GUID);
497*89c4ff92SAndroid Build Coastguard Worker     CHECK(LabelsAndEventClasses::INDEX_GUID == expectedIndexGuid);
498*89c4ff92SAndroid Build Coastguard Worker 
499*89c4ff92SAndroid Build Coastguard Worker     hash = static_cast<uint64_t>(hasher("ARMNN_PROFILING_SOL"));
500*89c4ff92SAndroid Build Coastguard Worker     ProfilingStaticGuid expectedSol(hash | MIN_STATIC_GUID);
501*89c4ff92SAndroid Build Coastguard Worker     CHECK(LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS == expectedSol);
502*89c4ff92SAndroid Build Coastguard Worker 
503*89c4ff92SAndroid Build Coastguard Worker     hash = static_cast<uint64_t>(hasher("ARMNN_PROFILING_EOL"));
504*89c4ff92SAndroid Build Coastguard Worker     ProfilingStaticGuid expectedEol(hash | MIN_STATIC_GUID);
505*89c4ff92SAndroid Build Coastguard Worker     CHECK(LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS == expectedEol);
506*89c4ff92SAndroid Build Coastguard Worker }
507*89c4ff92SAndroid Build Coastguard Worker 
508*89c4ff92SAndroid Build Coastguard Worker }
509