xref: /aosp_15_r20/external/armnn/src/profiling/test/TimelinePacketTests.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 <client/src/ProfilingUtils.hpp>
7*89c4ff92SAndroid Build Coastguard Worker 
8*89c4ff92SAndroid Build Coastguard Worker #include <common/include/NumericCast.hpp>
9*89c4ff92SAndroid Build Coastguard Worker #include <common/include/SwTrace.hpp>
10*89c4ff92SAndroid Build Coastguard Worker #include <common/include/Threads.hpp>
11*89c4ff92SAndroid Build Coastguard Worker 
12*89c4ff92SAndroid Build Coastguard Worker #include <doctest/doctest.h>
13*89c4ff92SAndroid Build Coastguard Worker 
14*89c4ff92SAndroid Build Coastguard Worker using namespace arm::pipe;
15*89c4ff92SAndroid Build Coastguard Worker 
16*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("TimelinePacketTests")
17*89c4ff92SAndroid Build Coastguard Worker {
18*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineLabelPacketTestNoBuffer")
19*89c4ff92SAndroid Build Coastguard Worker {
20*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
21*89c4ff92SAndroid Build Coastguard Worker     const std::string label = "some label";
22*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
23*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineLabelBinaryPacket(profilingGuid,
24*89c4ff92SAndroid Build Coastguard Worker                                                                  label,
25*89c4ff92SAndroid Build Coastguard Worker                                                                  nullptr,
26*89c4ff92SAndroid Build Coastguard Worker                                                                  512u,
27*89c4ff92SAndroid Build Coastguard Worker                                                                  numberOfBytesWritten);
28*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
29*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
30*89c4ff92SAndroid Build Coastguard Worker }
31*89c4ff92SAndroid Build Coastguard Worker 
32*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineLabelPacketTestBufferExhaustionZeroValue")
33*89c4ff92SAndroid Build Coastguard Worker {
34*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
35*89c4ff92SAndroid Build Coastguard Worker 
36*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
37*89c4ff92SAndroid Build Coastguard Worker     const std::string label = "some label";
38*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
39*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineLabelBinaryPacket(profilingGuid,
40*89c4ff92SAndroid Build Coastguard Worker                                                                  label,
41*89c4ff92SAndroid Build Coastguard Worker                                                                  buffer.data(),
42*89c4ff92SAndroid Build Coastguard Worker                                                                  0,
43*89c4ff92SAndroid Build Coastguard Worker                                                                  numberOfBytesWritten);
44*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
45*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
46*89c4ff92SAndroid Build Coastguard Worker }
47*89c4ff92SAndroid Build Coastguard Worker 
48*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineLabelPacketTestBufferExhaustionFixedValue")
49*89c4ff92SAndroid Build Coastguard Worker {
50*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(10, 0);
51*89c4ff92SAndroid Build Coastguard Worker 
52*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
53*89c4ff92SAndroid Build Coastguard Worker     const std::string label = "some label";
54*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
55*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineLabelBinaryPacket(profilingGuid,
56*89c4ff92SAndroid Build Coastguard Worker                                                                  label,
57*89c4ff92SAndroid Build Coastguard Worker                                                                  buffer.data(),
58*89c4ff92SAndroid Build Coastguard Worker                                                                  arm::pipe::numeric_cast<unsigned int>(buffer.size()),
59*89c4ff92SAndroid Build Coastguard Worker                                                                  numberOfBytesWritten);
60*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
61*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
62*89c4ff92SAndroid Build Coastguard Worker }
63*89c4ff92SAndroid Build Coastguard Worker 
64*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineLabelPacketTestInvalidLabel")
65*89c4ff92SAndroid Build Coastguard Worker {
66*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
67*89c4ff92SAndroid Build Coastguard Worker 
68*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
69*89c4ff92SAndroid Build Coastguard Worker     const std::string label = "s0m€ l@b€l";
70*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
71*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineLabelBinaryPacket(profilingGuid,
72*89c4ff92SAndroid Build Coastguard Worker                                                                  label,
73*89c4ff92SAndroid Build Coastguard Worker                                                                  buffer.data(),
74*89c4ff92SAndroid Build Coastguard Worker                                                                  arm::pipe::numeric_cast<unsigned int>(buffer.size()),
75*89c4ff92SAndroid Build Coastguard Worker                                                                  numberOfBytesWritten);
76*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::Error);
77*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
78*89c4ff92SAndroid Build Coastguard Worker }
79*89c4ff92SAndroid Build Coastguard Worker 
80*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineLabelPacketTestSingleConstructionOfData")
81*89c4ff92SAndroid Build Coastguard Worker {
82*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
83*89c4ff92SAndroid Build Coastguard Worker 
84*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
85*89c4ff92SAndroid Build Coastguard Worker     const std::string label = "some label";
86*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
87*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineLabelBinaryPacket(profilingGuid,
88*89c4ff92SAndroid Build Coastguard Worker                                                                  label,
89*89c4ff92SAndroid Build Coastguard Worker                                                                  buffer.data(),
90*89c4ff92SAndroid Build Coastguard Worker                                                                  arm::pipe::numeric_cast<unsigned int>(buffer.size()),
91*89c4ff92SAndroid Build Coastguard Worker                                                                  numberOfBytesWritten);
92*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::Ok);
93*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 28);
94*89c4ff92SAndroid Build Coastguard Worker 
95*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint32_t_size = sizeof(uint32_t);
96*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint64_t_size = sizeof(uint64_t);
97*89c4ff92SAndroid Build Coastguard Worker 
98*89c4ff92SAndroid Build Coastguard Worker     // Check the packet header
99*89c4ff92SAndroid Build Coastguard Worker     unsigned int offset = 0;
100*89c4ff92SAndroid Build Coastguard Worker     uint32_t decl_Id = ReadUint32(buffer.data(), offset);
101*89c4ff92SAndroid Build Coastguard Worker     CHECK(decl_Id == uint32_t(0));
102*89c4ff92SAndroid Build Coastguard Worker 
103*89c4ff92SAndroid Build Coastguard Worker     // Check the profiling GUID
104*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
105*89c4ff92SAndroid Build Coastguard Worker     uint64_t readProfilingGuid = ReadUint64(buffer.data(), offset);
106*89c4ff92SAndroid Build Coastguard Worker     CHECK(readProfilingGuid == profilingGuid);
107*89c4ff92SAndroid Build Coastguard Worker 
108*89c4ff92SAndroid Build Coastguard Worker     // Check the SWTrace label
109*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
110*89c4ff92SAndroid Build Coastguard Worker     uint32_t swTraceLabelLength = ReadUint32(buffer.data(), offset);
111*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceLabelLength == 11); // Label length including the null-terminator
112*89c4ff92SAndroid Build Coastguard Worker 
113*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
114*89c4ff92SAndroid Build Coastguard Worker     CHECK(std::memcmp(buffer.data() + offset,        // Offset to the label in the buffer
115*89c4ff92SAndroid Build Coastguard Worker                             label.data(),                  // The original label
116*89c4ff92SAndroid Build Coastguard Worker                             swTraceLabelLength - 1) == 0); // The length of the label
117*89c4ff92SAndroid Build Coastguard Worker 
118*89c4ff92SAndroid Build Coastguard Worker     offset += swTraceLabelLength * uint32_t_size;
119*89c4ff92SAndroid Build Coastguard Worker     CHECK(buffer[offset] == '\0'); // The null-terminator at the end of the SWTrace label
120*89c4ff92SAndroid Build Coastguard Worker }
121*89c4ff92SAndroid Build Coastguard Worker 
122*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineRelationshipPacketNullBufferTest")
123*89c4ff92SAndroid Build Coastguard Worker {
124*89c4ff92SAndroid Build Coastguard Worker     ProfilingRelationshipType relationshipType = ProfilingRelationshipType::DataLink;
125*89c4ff92SAndroid Build Coastguard Worker     const uint64_t relationshipGuid = 123456u;
126*89c4ff92SAndroid Build Coastguard Worker     const uint64_t headGuid = 234567u;
127*89c4ff92SAndroid Build Coastguard Worker     const uint64_t tailGuid = 345678u;
128*89c4ff92SAndroid Build Coastguard Worker     const uint64_t attributeGuid = 876345u;
129*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
130*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineRelationshipBinary(relationshipType,
131*89c4ff92SAndroid Build Coastguard Worker                                                                   relationshipGuid,
132*89c4ff92SAndroid Build Coastguard Worker                                                                   headGuid,
133*89c4ff92SAndroid Build Coastguard Worker                                                                   tailGuid,
134*89c4ff92SAndroid Build Coastguard Worker                                                                   attributeGuid,
135*89c4ff92SAndroid Build Coastguard Worker                                                                   nullptr,
136*89c4ff92SAndroid Build Coastguard Worker                                                                   512u,
137*89c4ff92SAndroid Build Coastguard Worker                                                                   numberOfBytesWritten);
138*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
139*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
140*89c4ff92SAndroid Build Coastguard Worker }
141*89c4ff92SAndroid Build Coastguard Worker 
142*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineRelationshipPacketZeroBufferSizeTest")
143*89c4ff92SAndroid Build Coastguard Worker {
144*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
145*89c4ff92SAndroid Build Coastguard Worker 
146*89c4ff92SAndroid Build Coastguard Worker     ProfilingRelationshipType relationshipType = ProfilingRelationshipType::DataLink;
147*89c4ff92SAndroid Build Coastguard Worker     const uint64_t relationshipGuid = 123456u;
148*89c4ff92SAndroid Build Coastguard Worker     const uint64_t headGuid = 234567u;
149*89c4ff92SAndroid Build Coastguard Worker     const uint64_t tailGuid = 345678u;
150*89c4ff92SAndroid Build Coastguard Worker     const uint64_t attributeGuid = 876345u;
151*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
152*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineRelationshipBinary(relationshipType,
153*89c4ff92SAndroid Build Coastguard Worker                                                                   relationshipGuid,
154*89c4ff92SAndroid Build Coastguard Worker                                                                   headGuid,
155*89c4ff92SAndroid Build Coastguard Worker                                                                   tailGuid,
156*89c4ff92SAndroid Build Coastguard Worker                                                                   attributeGuid,
157*89c4ff92SAndroid Build Coastguard Worker                                                                   buffer.data(),
158*89c4ff92SAndroid Build Coastguard Worker                                                                   0,
159*89c4ff92SAndroid Build Coastguard Worker                                                                   numberOfBytesWritten);
160*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
161*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
162*89c4ff92SAndroid Build Coastguard Worker }
163*89c4ff92SAndroid Build Coastguard Worker 
164*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineRelationshipPacketSmallBufferSizeTest")
165*89c4ff92SAndroid Build Coastguard Worker {
166*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(10, 0);
167*89c4ff92SAndroid Build Coastguard Worker 
168*89c4ff92SAndroid Build Coastguard Worker     ProfilingRelationshipType relationshipType = ProfilingRelationshipType::DataLink;
169*89c4ff92SAndroid Build Coastguard Worker     const uint64_t relationshipGuid = 123456u;
170*89c4ff92SAndroid Build Coastguard Worker     const uint64_t headGuid = 234567u;
171*89c4ff92SAndroid Build Coastguard Worker     const uint64_t tailGuid = 345678u;
172*89c4ff92SAndroid Build Coastguard Worker     const uint64_t attributeGuid = 876345u;
173*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
174*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result =
175*89c4ff92SAndroid Build Coastguard Worker                              WriteTimelineRelationshipBinary(relationshipType,
176*89c4ff92SAndroid Build Coastguard Worker                                                              relationshipGuid,
177*89c4ff92SAndroid Build Coastguard Worker                                                              headGuid,
178*89c4ff92SAndroid Build Coastguard Worker                                                              tailGuid,
179*89c4ff92SAndroid Build Coastguard Worker                                                              attributeGuid,
180*89c4ff92SAndroid Build Coastguard Worker                                                              buffer.data(),
181*89c4ff92SAndroid Build Coastguard Worker                                                              arm::pipe::numeric_cast<unsigned int>(buffer.size()),
182*89c4ff92SAndroid Build Coastguard Worker                                                              numberOfBytesWritten);
183*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
184*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
185*89c4ff92SAndroid Build Coastguard Worker }
186*89c4ff92SAndroid Build Coastguard Worker 
187*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineRelationshipPacketInvalidRelationTest")
188*89c4ff92SAndroid Build Coastguard Worker {
189*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
190*89c4ff92SAndroid Build Coastguard Worker     ProfilingRelationshipType relationshipType = static_cast<ProfilingRelationshipType>(5);
191*89c4ff92SAndroid Build Coastguard Worker     const uint64_t relationshipGuid = 123456u;
192*89c4ff92SAndroid Build Coastguard Worker     const uint64_t headGuid = 234567u;
193*89c4ff92SAndroid Build Coastguard Worker     const uint64_t tailGuid = 345678u;
194*89c4ff92SAndroid Build Coastguard Worker     const uint64_t attributeGuid = 876345u;
195*89c4ff92SAndroid Build Coastguard Worker 
196*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
197*89c4ff92SAndroid Build Coastguard Worker 
198*89c4ff92SAndroid Build Coastguard Worker     CHECK_THROWS_AS(WriteTimelineRelationshipBinary(relationshipType,
199*89c4ff92SAndroid Build Coastguard Worker                                                       relationshipGuid,
200*89c4ff92SAndroid Build Coastguard Worker                                                       headGuid,
201*89c4ff92SAndroid Build Coastguard Worker                                                       tailGuid,
202*89c4ff92SAndroid Build Coastguard Worker                                                       attributeGuid,
203*89c4ff92SAndroid Build Coastguard Worker                                                       buffer.data(),
204*89c4ff92SAndroid Build Coastguard Worker                                                       arm::pipe::numeric_cast<unsigned int>(buffer.size()),
205*89c4ff92SAndroid Build Coastguard Worker                                                       numberOfBytesWritten),
206*89c4ff92SAndroid Build Coastguard Worker                     arm::pipe::InvalidArgumentException);
207*89c4ff92SAndroid Build Coastguard Worker 
208*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
209*89c4ff92SAndroid Build Coastguard Worker }
210*89c4ff92SAndroid Build Coastguard Worker 
211*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineRelationshipPacketTestDataConstruction")
212*89c4ff92SAndroid Build Coastguard Worker {
213*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
214*89c4ff92SAndroid Build Coastguard Worker 
215*89c4ff92SAndroid Build Coastguard Worker     ProfilingRelationshipType relationshipType = ProfilingRelationshipType::RetentionLink;
216*89c4ff92SAndroid Build Coastguard Worker     const uint64_t relationshipGuid = 123456u;
217*89c4ff92SAndroid Build Coastguard Worker     const uint64_t headGuid = 234567u;
218*89c4ff92SAndroid Build Coastguard Worker     const uint64_t tailGuid = 345678u;
219*89c4ff92SAndroid Build Coastguard Worker     const uint64_t attributeGuid = 876345u;
220*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
221*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result =
222*89c4ff92SAndroid Build Coastguard Worker                              WriteTimelineRelationshipBinary(relationshipType,
223*89c4ff92SAndroid Build Coastguard Worker                                                              relationshipGuid,
224*89c4ff92SAndroid Build Coastguard Worker                                                              headGuid,
225*89c4ff92SAndroid Build Coastguard Worker                                                              tailGuid,
226*89c4ff92SAndroid Build Coastguard Worker                                                              attributeGuid,
227*89c4ff92SAndroid Build Coastguard Worker                                                              buffer.data(),
228*89c4ff92SAndroid Build Coastguard Worker                                                              arm::pipe::numeric_cast<unsigned int>(buffer.size()),
229*89c4ff92SAndroid Build Coastguard Worker                                                              numberOfBytesWritten);
230*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::Ok);
231*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 40);
232*89c4ff92SAndroid Build Coastguard Worker 
233*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint32_t_size = sizeof(uint32_t);
234*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint64_t_size = sizeof(uint64_t);
235*89c4ff92SAndroid Build Coastguard Worker 
236*89c4ff92SAndroid Build Coastguard Worker     // Check the packet header
237*89c4ff92SAndroid Build Coastguard Worker     unsigned int offset = 0;
238*89c4ff92SAndroid Build Coastguard Worker     // Check the decl_id
239*89c4ff92SAndroid Build Coastguard Worker     uint32_t readDeclId = ReadUint32(buffer.data(), offset);
240*89c4ff92SAndroid Build Coastguard Worker     CHECK(readDeclId == 3);
241*89c4ff92SAndroid Build Coastguard Worker 
242*89c4ff92SAndroid Build Coastguard Worker     // Check the relationship type
243*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
244*89c4ff92SAndroid Build Coastguard Worker     uint32_t readRelationshipType = ReadUint32(buffer.data(), offset);
245*89c4ff92SAndroid Build Coastguard Worker     CHECK(readRelationshipType == 0);
246*89c4ff92SAndroid Build Coastguard Worker 
247*89c4ff92SAndroid Build Coastguard Worker     // Check the relationship GUID
248*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
249*89c4ff92SAndroid Build Coastguard Worker     uint64_t readRelationshipGuid = ReadUint64(buffer.data(), offset);
250*89c4ff92SAndroid Build Coastguard Worker     CHECK(readRelationshipGuid == relationshipGuid);
251*89c4ff92SAndroid Build Coastguard Worker 
252*89c4ff92SAndroid Build Coastguard Worker     // Check the head GUID
253*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
254*89c4ff92SAndroid Build Coastguard Worker     uint64_t readHeadGuid = ReadUint64(buffer.data(), offset);
255*89c4ff92SAndroid Build Coastguard Worker     CHECK(readHeadGuid == headGuid);
256*89c4ff92SAndroid Build Coastguard Worker 
257*89c4ff92SAndroid Build Coastguard Worker     // Check the tail GUID
258*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
259*89c4ff92SAndroid Build Coastguard Worker     uint64_t readTailGuid = ReadUint64(buffer.data(), offset);
260*89c4ff92SAndroid Build Coastguard Worker     CHECK(readTailGuid == tailGuid);
261*89c4ff92SAndroid Build Coastguard Worker 
262*89c4ff92SAndroid Build Coastguard Worker     // Check the attribute GUID
263*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
264*89c4ff92SAndroid Build Coastguard Worker     uint64_t readAttributeGuid = ReadUint64(buffer.data(), offset);
265*89c4ff92SAndroid Build Coastguard Worker     CHECK(readAttributeGuid == attributeGuid);
266*89c4ff92SAndroid Build Coastguard Worker }
267*89c4ff92SAndroid Build Coastguard Worker 
268*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineRelationshipPacketExecutionLinkTestDataConstruction")
269*89c4ff92SAndroid Build Coastguard Worker {
270*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
271*89c4ff92SAndroid Build Coastguard Worker 
272*89c4ff92SAndroid Build Coastguard Worker     ProfilingRelationshipType relationshipType = ProfilingRelationshipType::ExecutionLink;
273*89c4ff92SAndroid Build Coastguard Worker     const uint64_t relationshipGuid = 123456u;
274*89c4ff92SAndroid Build Coastguard Worker     const uint64_t headGuid = 234567u;
275*89c4ff92SAndroid Build Coastguard Worker     const uint64_t tailGuid = 345678u;
276*89c4ff92SAndroid Build Coastguard Worker     const uint64_t attributeGuid = 876345u;
277*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
278*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result =
279*89c4ff92SAndroid Build Coastguard Worker                              WriteTimelineRelationshipBinary(relationshipType,
280*89c4ff92SAndroid Build Coastguard Worker                                                              relationshipGuid,
281*89c4ff92SAndroid Build Coastguard Worker                                                              headGuid,
282*89c4ff92SAndroid Build Coastguard Worker                                                              tailGuid,
283*89c4ff92SAndroid Build Coastguard Worker                                                              attributeGuid,
284*89c4ff92SAndroid Build Coastguard Worker                                                              buffer.data(),
285*89c4ff92SAndroid Build Coastguard Worker                                                              arm::pipe::numeric_cast<unsigned int>(buffer.size()),
286*89c4ff92SAndroid Build Coastguard Worker                                                              numberOfBytesWritten);
287*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::Ok);
288*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 40);
289*89c4ff92SAndroid Build Coastguard Worker 
290*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint32_t_size = sizeof(uint32_t);
291*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint64_t_size = sizeof(uint64_t);
292*89c4ff92SAndroid Build Coastguard Worker 
293*89c4ff92SAndroid Build Coastguard Worker     unsigned int offset = 0;
294*89c4ff92SAndroid Build Coastguard Worker     uint32_t readDeclId = ReadUint32(buffer.data(), offset);
295*89c4ff92SAndroid Build Coastguard Worker     CHECK(readDeclId == 3);
296*89c4ff92SAndroid Build Coastguard Worker 
297*89c4ff92SAndroid Build Coastguard Worker     // Check the relationship type
298*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
299*89c4ff92SAndroid Build Coastguard Worker     uint32_t readRelationshipType = ReadUint32(buffer.data(), offset);
300*89c4ff92SAndroid Build Coastguard Worker     CHECK(readRelationshipType == 1);
301*89c4ff92SAndroid Build Coastguard Worker 
302*89c4ff92SAndroid Build Coastguard Worker     // Check the relationship GUID
303*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
304*89c4ff92SAndroid Build Coastguard Worker     uint64_t readRelationshipGuid = ReadUint64(buffer.data(), offset);
305*89c4ff92SAndroid Build Coastguard Worker     CHECK(readRelationshipGuid == relationshipGuid);
306*89c4ff92SAndroid Build Coastguard Worker 
307*89c4ff92SAndroid Build Coastguard Worker     // Check the head GUID
308*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
309*89c4ff92SAndroid Build Coastguard Worker     uint64_t readHeadGuid = ReadUint64(buffer.data(), offset);
310*89c4ff92SAndroid Build Coastguard Worker     CHECK(readHeadGuid == headGuid);
311*89c4ff92SAndroid Build Coastguard Worker 
312*89c4ff92SAndroid Build Coastguard Worker     // Check the tail GUID
313*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
314*89c4ff92SAndroid Build Coastguard Worker     uint64_t readTailGuid = ReadUint64(buffer.data(), offset);
315*89c4ff92SAndroid Build Coastguard Worker     CHECK(readTailGuid == tailGuid);
316*89c4ff92SAndroid Build Coastguard Worker 
317*89c4ff92SAndroid Build Coastguard Worker     // Check the attribute GUID
318*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
319*89c4ff92SAndroid Build Coastguard Worker     uint64_t readAttributeGuid = ReadUint64(buffer.data(), offset);
320*89c4ff92SAndroid Build Coastguard Worker     CHECK(readAttributeGuid == attributeGuid);
321*89c4ff92SAndroid Build Coastguard Worker }
322*89c4ff92SAndroid Build Coastguard Worker 
323*89c4ff92SAndroid Build Coastguard Worker 
324*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineRelationshipPacketDataLinkTestDataConstruction")
325*89c4ff92SAndroid Build Coastguard Worker {
326*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
327*89c4ff92SAndroid Build Coastguard Worker 
328*89c4ff92SAndroid Build Coastguard Worker     ProfilingRelationshipType relationshipType = ProfilingRelationshipType::DataLink;
329*89c4ff92SAndroid Build Coastguard Worker     const uint64_t relationshipGuid = 123456u;
330*89c4ff92SAndroid Build Coastguard Worker     const uint64_t headGuid = 234567u;
331*89c4ff92SAndroid Build Coastguard Worker     const uint64_t tailGuid = 345678u;
332*89c4ff92SAndroid Build Coastguard Worker     const uint64_t attributeGuid = 876345u;
333*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
334*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result =
335*89c4ff92SAndroid Build Coastguard Worker                              WriteTimelineRelationshipBinary(relationshipType,
336*89c4ff92SAndroid Build Coastguard Worker                                                              relationshipGuid,
337*89c4ff92SAndroid Build Coastguard Worker                                                              headGuid,
338*89c4ff92SAndroid Build Coastguard Worker                                                              tailGuid,
339*89c4ff92SAndroid Build Coastguard Worker                                                              attributeGuid,
340*89c4ff92SAndroid Build Coastguard Worker                                                              buffer.data(),
341*89c4ff92SAndroid Build Coastguard Worker                                                              arm::pipe::numeric_cast<unsigned int>(buffer.size()),
342*89c4ff92SAndroid Build Coastguard Worker                                                              numberOfBytesWritten);
343*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::Ok);
344*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 40);
345*89c4ff92SAndroid Build Coastguard Worker 
346*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint32_t_size = sizeof(uint32_t);
347*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint64_t_size = sizeof(uint64_t);
348*89c4ff92SAndroid Build Coastguard Worker 
349*89c4ff92SAndroid Build Coastguard Worker     unsigned int offset = 0;
350*89c4ff92SAndroid Build Coastguard Worker     uint32_t readDeclId = ReadUint32(buffer.data(), offset);
351*89c4ff92SAndroid Build Coastguard Worker     CHECK(readDeclId == 3);
352*89c4ff92SAndroid Build Coastguard Worker 
353*89c4ff92SAndroid Build Coastguard Worker     // Check the relationship type
354*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
355*89c4ff92SAndroid Build Coastguard Worker     uint32_t readRelationshipType = ReadUint32(buffer.data(), offset);
356*89c4ff92SAndroid Build Coastguard Worker     CHECK(readRelationshipType == 2);
357*89c4ff92SAndroid Build Coastguard Worker 
358*89c4ff92SAndroid Build Coastguard Worker     // Check the relationship GUID
359*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
360*89c4ff92SAndroid Build Coastguard Worker     uint64_t readRelationshipGuid = ReadUint64(buffer.data(), offset);
361*89c4ff92SAndroid Build Coastguard Worker     CHECK(readRelationshipGuid == relationshipGuid);
362*89c4ff92SAndroid Build Coastguard Worker 
363*89c4ff92SAndroid Build Coastguard Worker     // Check the head GUID
364*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
365*89c4ff92SAndroid Build Coastguard Worker     uint64_t readHeadGuid = ReadUint64(buffer.data(), offset);
366*89c4ff92SAndroid Build Coastguard Worker     CHECK(readHeadGuid == headGuid);
367*89c4ff92SAndroid Build Coastguard Worker 
368*89c4ff92SAndroid Build Coastguard Worker     // Check the tail GUID
369*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
370*89c4ff92SAndroid Build Coastguard Worker     uint64_t readTailGuid = ReadUint64(buffer.data(), offset);
371*89c4ff92SAndroid Build Coastguard Worker     CHECK(readTailGuid == tailGuid);
372*89c4ff92SAndroid Build Coastguard Worker 
373*89c4ff92SAndroid Build Coastguard Worker     // Check the attribute GUID
374*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
375*89c4ff92SAndroid Build Coastguard Worker     uint64_t readAttributeGuid = ReadUint64(buffer.data(), offset);
376*89c4ff92SAndroid Build Coastguard Worker     CHECK(readAttributeGuid == attributeGuid);
377*89c4ff92SAndroid Build Coastguard Worker }
378*89c4ff92SAndroid Build Coastguard Worker 
379*89c4ff92SAndroid Build Coastguard Worker 
380*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineRelationshipPacketLabelLinkTestDataConstruction")
381*89c4ff92SAndroid Build Coastguard Worker {
382*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
383*89c4ff92SAndroid Build Coastguard Worker 
384*89c4ff92SAndroid Build Coastguard Worker     ProfilingRelationshipType relationshipType = ProfilingRelationshipType::LabelLink;
385*89c4ff92SAndroid Build Coastguard Worker     const uint64_t relationshipGuid = 123456u;
386*89c4ff92SAndroid Build Coastguard Worker     const uint64_t headGuid = 234567u;
387*89c4ff92SAndroid Build Coastguard Worker     const uint64_t tailGuid = 345678u;
388*89c4ff92SAndroid Build Coastguard Worker     const uint64_t attributeGuid = 876345u;
389*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
390*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result =
391*89c4ff92SAndroid Build Coastguard Worker                              WriteTimelineRelationshipBinary(relationshipType,
392*89c4ff92SAndroid Build Coastguard Worker                                                              relationshipGuid,
393*89c4ff92SAndroid Build Coastguard Worker                                                              headGuid,
394*89c4ff92SAndroid Build Coastguard Worker                                                              tailGuid,
395*89c4ff92SAndroid Build Coastguard Worker                                                              attributeGuid,
396*89c4ff92SAndroid Build Coastguard Worker                                                              buffer.data(),
397*89c4ff92SAndroid Build Coastguard Worker                                                              arm::pipe::numeric_cast<unsigned int>(buffer.size()),
398*89c4ff92SAndroid Build Coastguard Worker                                                              numberOfBytesWritten);
399*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::Ok);
400*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 40);
401*89c4ff92SAndroid Build Coastguard Worker 
402*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint32_t_size = sizeof(uint32_t);
403*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint64_t_size = sizeof(uint64_t);
404*89c4ff92SAndroid Build Coastguard Worker 
405*89c4ff92SAndroid Build Coastguard Worker     // Check the packet header
406*89c4ff92SAndroid Build Coastguard Worker     unsigned int offset = 0;
407*89c4ff92SAndroid Build Coastguard Worker     uint32_t readDeclId = ReadUint32(buffer.data(), offset);
408*89c4ff92SAndroid Build Coastguard Worker     CHECK(readDeclId == 3);
409*89c4ff92SAndroid Build Coastguard Worker 
410*89c4ff92SAndroid Build Coastguard Worker     // Check the relationship type
411*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
412*89c4ff92SAndroid Build Coastguard Worker     uint32_t readRelationshipType = ReadUint32(buffer.data(), offset);
413*89c4ff92SAndroid Build Coastguard Worker     CHECK(readRelationshipType == 3);
414*89c4ff92SAndroid Build Coastguard Worker 
415*89c4ff92SAndroid Build Coastguard Worker     // Check the relationship GUID
416*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
417*89c4ff92SAndroid Build Coastguard Worker     uint64_t readRelationshipGuid = ReadUint64(buffer.data(), offset);
418*89c4ff92SAndroid Build Coastguard Worker     CHECK(readRelationshipGuid == relationshipGuid);
419*89c4ff92SAndroid Build Coastguard Worker 
420*89c4ff92SAndroid Build Coastguard Worker     // Check the head GUID
421*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
422*89c4ff92SAndroid Build Coastguard Worker     uint64_t readHeadGuid = ReadUint64(buffer.data(), offset);
423*89c4ff92SAndroid Build Coastguard Worker     CHECK(readHeadGuid == headGuid);
424*89c4ff92SAndroid Build Coastguard Worker 
425*89c4ff92SAndroid Build Coastguard Worker     // Check the tail GUID
426*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
427*89c4ff92SAndroid Build Coastguard Worker     uint64_t readTailGuid = ReadUint64(buffer.data(), offset);
428*89c4ff92SAndroid Build Coastguard Worker     CHECK(readTailGuid == tailGuid);
429*89c4ff92SAndroid Build Coastguard Worker 
430*89c4ff92SAndroid Build Coastguard Worker     // Check the attribute GUID
431*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
432*89c4ff92SAndroid Build Coastguard Worker     uint64_t readAttributeGuid = ReadUint64(buffer.data(), offset);
433*89c4ff92SAndroid Build Coastguard Worker     CHECK(readAttributeGuid == attributeGuid);
434*89c4ff92SAndroid Build Coastguard Worker }
435*89c4ff92SAndroid Build Coastguard Worker 
436*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineMessageDirectoryPacketTestNoBuffer")
437*89c4ff92SAndroid Build Coastguard Worker {
438*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
439*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineMessageDirectoryPackage(nullptr,
440*89c4ff92SAndroid Build Coastguard Worker                                                                        512u,
441*89c4ff92SAndroid Build Coastguard Worker                                                                        numberOfBytesWritten);
442*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
443*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
444*89c4ff92SAndroid Build Coastguard Worker }
445*89c4ff92SAndroid Build Coastguard Worker 
446*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineMessageDirectoryPacketTestBufferExhausted")
447*89c4ff92SAndroid Build Coastguard Worker {
448*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
449*89c4ff92SAndroid Build Coastguard Worker 
450*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
451*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineMessageDirectoryPackage(buffer.data(),
452*89c4ff92SAndroid Build Coastguard Worker                                                                        0,
453*89c4ff92SAndroid Build Coastguard Worker                                                                        numberOfBytesWritten);
454*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
455*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
456*89c4ff92SAndroid Build Coastguard Worker }
457*89c4ff92SAndroid Build Coastguard Worker 
458*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineMessageDirectoryPacketTestFullConstruction")
459*89c4ff92SAndroid Build Coastguard Worker {
460*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
461*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
462*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineMessageDirectoryPackage(buffer.data(),
463*89c4ff92SAndroid Build Coastguard Worker                                                                        arm::pipe::numeric_cast<unsigned int>(
464*89c4ff92SAndroid Build Coastguard Worker                                                                            buffer.size()),
465*89c4ff92SAndroid Build Coastguard Worker                                                                        numberOfBytesWritten);
466*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::Ok);
467*89c4ff92SAndroid Build Coastguard Worker 
468*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 451);
469*89c4ff92SAndroid Build Coastguard Worker 
470*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint8_t_size  = sizeof(uint8_t);
471*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint32_t_size = sizeof(uint32_t);
472*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint64_t_size = sizeof(uint64_t);
473*89c4ff92SAndroid Build Coastguard Worker 
474*89c4ff92SAndroid Build Coastguard Worker     // Check the packet header
475*89c4ff92SAndroid Build Coastguard Worker     unsigned int offset = 0;
476*89c4ff92SAndroid Build Coastguard Worker     uint32_t packetHeaderWord0 = ReadUint32(buffer.data(), offset);
477*89c4ff92SAndroid Build Coastguard Worker     uint32_t packetFamily = (packetHeaderWord0 >> 26) & 0x0000003F;
478*89c4ff92SAndroid Build Coastguard Worker     uint32_t packetClass  = (packetHeaderWord0 >> 19) & 0x0000007F;
479*89c4ff92SAndroid Build Coastguard Worker     uint32_t packetType   = (packetHeaderWord0 >> 16) & 0x00000007;
480*89c4ff92SAndroid Build Coastguard Worker     uint32_t streamId     = (packetHeaderWord0 >>  0) & 0x00000007;
481*89c4ff92SAndroid Build Coastguard Worker     CHECK(packetFamily == 1);
482*89c4ff92SAndroid Build Coastguard Worker     CHECK(packetClass  == 0);
483*89c4ff92SAndroid Build Coastguard Worker     CHECK(packetType   == 0);
484*89c4ff92SAndroid Build Coastguard Worker     CHECK(streamId     == 0);
485*89c4ff92SAndroid Build Coastguard Worker 
486*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
487*89c4ff92SAndroid Build Coastguard Worker     uint32_t packetHeaderWord1 = ReadUint32(buffer.data(), offset);
488*89c4ff92SAndroid Build Coastguard Worker     uint32_t sequenceNumbered = (packetHeaderWord1 >> 24) & 0x00000001;
489*89c4ff92SAndroid Build Coastguard Worker     uint32_t dataLength       = (packetHeaderWord1 >>  0) & 0x00FFFFFF;
490*89c4ff92SAndroid Build Coastguard Worker     CHECK(sequenceNumbered ==  0);
491*89c4ff92SAndroid Build Coastguard Worker     CHECK(dataLength       == 443);
492*89c4ff92SAndroid Build Coastguard Worker 
493*89c4ff92SAndroid Build Coastguard Worker     // Check the stream header
494*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
495*89c4ff92SAndroid Build Coastguard Worker     uint8_t readStreamVersion = ReadUint8(buffer.data(), offset);
496*89c4ff92SAndroid Build Coastguard Worker     CHECK(readStreamVersion == 4);
497*89c4ff92SAndroid Build Coastguard Worker     offset += uint8_t_size;
498*89c4ff92SAndroid Build Coastguard Worker     uint8_t readPointerBytes = ReadUint8(buffer.data(), offset);
499*89c4ff92SAndroid Build Coastguard Worker     CHECK(readPointerBytes == uint64_t_size);
500*89c4ff92SAndroid Build Coastguard Worker     offset += uint8_t_size;
501*89c4ff92SAndroid Build Coastguard Worker     uint8_t readThreadIdBytes = ReadUint8(buffer.data(), offset);
502*89c4ff92SAndroid Build Coastguard Worker     CHECK(readThreadIdBytes == ThreadIdSize);
503*89c4ff92SAndroid Build Coastguard Worker 
504*89c4ff92SAndroid Build Coastguard Worker     // Check the number of declarations
505*89c4ff92SAndroid Build Coastguard Worker     offset += uint8_t_size;
506*89c4ff92SAndroid Build Coastguard Worker     uint32_t declCount = ReadUint32(buffer.data(), offset);
507*89c4ff92SAndroid Build Coastguard Worker     CHECK(declCount == 5);
508*89c4ff92SAndroid Build Coastguard Worker 
509*89c4ff92SAndroid Build Coastguard Worker     // Check the decl_id
510*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
511*89c4ff92SAndroid Build Coastguard Worker     uint32_t readDeclId = ReadUint32(buffer.data(), offset);
512*89c4ff92SAndroid Build Coastguard Worker     CHECK(readDeclId == 0);
513*89c4ff92SAndroid Build Coastguard Worker 
514*89c4ff92SAndroid Build Coastguard Worker     // SWTrace "namestring" format
515*89c4ff92SAndroid Build Coastguard Worker     // length of the string (first 4 bytes) + string + null terminator
516*89c4ff92SAndroid Build Coastguard Worker 
517*89c4ff92SAndroid Build Coastguard Worker     // Check the decl_name
518*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
519*89c4ff92SAndroid Build Coastguard Worker     uint32_t swTraceDeclNameLength = ReadUint32(buffer.data(), offset);
520*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceDeclNameLength == 13); // decl_name length including the null-terminator
521*89c4ff92SAndroid Build Coastguard Worker 
522*89c4ff92SAndroid Build Coastguard Worker     std::string label = "declareLabel";
523*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
524*89c4ff92SAndroid Build Coastguard Worker     CHECK(std::memcmp(buffer.data() + offset,           // Offset to the label in the buffer
525*89c4ff92SAndroid Build Coastguard Worker                             label.data(),                     // The original label
526*89c4ff92SAndroid Build Coastguard Worker                             swTraceDeclNameLength - 1) == 0); // The length of the label
527*89c4ff92SAndroid Build Coastguard Worker 
528*89c4ff92SAndroid Build Coastguard Worker     // Check the ui_name
529*89c4ff92SAndroid Build Coastguard Worker     std::vector<uint32_t> swTraceString;
530*89c4ff92SAndroid Build Coastguard Worker     StringToSwTraceString<SwTraceCharPolicy>(label, swTraceString);
531*89c4ff92SAndroid Build Coastguard Worker     offset += (arm::pipe::numeric_cast<unsigned int>(swTraceString.size()) - 1) * uint32_t_size;
532*89c4ff92SAndroid Build Coastguard Worker     uint32_t swTraceUINameLength = ReadUint32(buffer.data(), offset);
533*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceUINameLength == 14); // ui_name length including the null-terminator
534*89c4ff92SAndroid Build Coastguard Worker 
535*89c4ff92SAndroid Build Coastguard Worker     label = "declare label";
536*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
537*89c4ff92SAndroid Build Coastguard Worker     CHECK(std::memcmp(buffer.data() + offset,           // Offset to the label in the buffer
538*89c4ff92SAndroid Build Coastguard Worker                             label.data(),                     // The original label
539*89c4ff92SAndroid Build Coastguard Worker                             swTraceUINameLength - 1) == 0);   // The length of the label
540*89c4ff92SAndroid Build Coastguard Worker 
541*89c4ff92SAndroid Build Coastguard Worker     // Check arg_types
542*89c4ff92SAndroid Build Coastguard Worker     StringToSwTraceString<SwTraceCharPolicy>(label, swTraceString);
543*89c4ff92SAndroid Build Coastguard Worker     offset += (arm::pipe::numeric_cast<unsigned int>(swTraceString.size()) - 1) * uint32_t_size;
544*89c4ff92SAndroid Build Coastguard Worker     uint32_t swTraceArgTypesLength = ReadUint32(buffer.data(), offset);
545*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceArgTypesLength == 3); // arg_types length including the null-terminator
546*89c4ff92SAndroid Build Coastguard Worker 
547*89c4ff92SAndroid Build Coastguard Worker     label = "ps";
548*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
549*89c4ff92SAndroid Build Coastguard Worker     CHECK(std::memcmp(buffer.data() + offset,           // Offset to the label in the buffer
550*89c4ff92SAndroid Build Coastguard Worker                             label.data(),                     // The original label
551*89c4ff92SAndroid Build Coastguard Worker                             swTraceArgTypesLength - 1) == 0); // The length of the label
552*89c4ff92SAndroid Build Coastguard Worker 
553*89c4ff92SAndroid Build Coastguard Worker     // Check arg_names
554*89c4ff92SAndroid Build Coastguard Worker     StringToSwTraceString<SwTraceCharPolicy>(label, swTraceString);
555*89c4ff92SAndroid Build Coastguard Worker     offset += (arm::pipe::numeric_cast<unsigned int>(swTraceString.size()) - 1) * uint32_t_size;
556*89c4ff92SAndroid Build Coastguard Worker     uint32_t swTraceArgNamesLength = ReadUint32(buffer.data(), offset);
557*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceArgNamesLength == 11); // arg_names length including the null-terminator
558*89c4ff92SAndroid Build Coastguard Worker 
559*89c4ff92SAndroid Build Coastguard Worker     label = "guid,value";
560*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
561*89c4ff92SAndroid Build Coastguard Worker     CHECK(std::memcmp(buffer.data() + offset,        // Offset to the label in the buffer
562*89c4ff92SAndroid Build Coastguard Worker                             label.data(),                     // The original label
563*89c4ff92SAndroid Build Coastguard Worker                             swTraceArgNamesLength - 1) == 0); // The length of the label
564*89c4ff92SAndroid Build Coastguard Worker 
565*89c4ff92SAndroid Build Coastguard Worker     // Check second message decl_id
566*89c4ff92SAndroid Build Coastguard Worker     StringToSwTraceString<SwTraceCharPolicy>(label, swTraceString);
567*89c4ff92SAndroid Build Coastguard Worker     offset += (arm::pipe::numeric_cast<unsigned int>(swTraceString.size()) - 1) * uint32_t_size;
568*89c4ff92SAndroid Build Coastguard Worker     readDeclId = ReadUint32(buffer.data(), offset);
569*89c4ff92SAndroid Build Coastguard Worker     CHECK(readDeclId == 1);
570*89c4ff92SAndroid Build Coastguard Worker 
571*89c4ff92SAndroid Build Coastguard Worker     // Check second decl_name
572*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
573*89c4ff92SAndroid Build Coastguard Worker     swTraceDeclNameLength = ReadUint32(buffer.data(), offset);
574*89c4ff92SAndroid Build Coastguard Worker     CHECK(swTraceDeclNameLength == 14); // decl_name length including the null-terminator
575*89c4ff92SAndroid Build Coastguard Worker 
576*89c4ff92SAndroid Build Coastguard Worker     label = "declareEntity";
577*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
578*89c4ff92SAndroid Build Coastguard Worker     CHECK(std::memcmp(buffer.data() + offset,           // Offset to the label in the buffer
579*89c4ff92SAndroid Build Coastguard Worker                             label.data(),                     // The original label
580*89c4ff92SAndroid Build Coastguard Worker                             swTraceDeclNameLength - 1) == 0); // The length of the label
581*89c4ff92SAndroid Build Coastguard Worker }
582*89c4ff92SAndroid Build Coastguard Worker 
583*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineEntityPacketTestNoBuffer")
584*89c4ff92SAndroid Build Coastguard Worker {
585*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
586*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
587*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineEntityBinary(profilingGuid,
588*89c4ff92SAndroid Build Coastguard Worker                                                             nullptr,
589*89c4ff92SAndroid Build Coastguard Worker                                                             512u,
590*89c4ff92SAndroid Build Coastguard Worker                                                             numberOfBytesWritten);
591*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
592*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
593*89c4ff92SAndroid Build Coastguard Worker }
594*89c4ff92SAndroid Build Coastguard Worker 
595*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineEntityPacketTestBufferExhaustedWithZeroBufferSize")
596*89c4ff92SAndroid Build Coastguard Worker {
597*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
598*89c4ff92SAndroid Build Coastguard Worker 
599*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
600*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
601*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineEntityBinary(profilingGuid,
602*89c4ff92SAndroid Build Coastguard Worker                                                             buffer.data(),
603*89c4ff92SAndroid Build Coastguard Worker                                                             0,
604*89c4ff92SAndroid Build Coastguard Worker                                                             numberOfBytesWritten);
605*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
606*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
607*89c4ff92SAndroid Build Coastguard Worker }
608*89c4ff92SAndroid Build Coastguard Worker 
609*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineEntityPacketTestBufferExhaustedWithFixedBufferSize")
610*89c4ff92SAndroid Build Coastguard Worker {
611*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(10, 0);
612*89c4ff92SAndroid Build Coastguard Worker 
613*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
614*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
615*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineEntityBinary(profilingGuid,
616*89c4ff92SAndroid Build Coastguard Worker                                                             buffer.data(),
617*89c4ff92SAndroid Build Coastguard Worker                                                             arm::pipe::numeric_cast<unsigned int>(buffer.size()),
618*89c4ff92SAndroid Build Coastguard Worker                                                             numberOfBytesWritten);
619*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
620*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
621*89c4ff92SAndroid Build Coastguard Worker }
622*89c4ff92SAndroid Build Coastguard Worker 
623*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineEntityPacketTestFullConstructionOfData")
624*89c4ff92SAndroid Build Coastguard Worker {
625*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
626*89c4ff92SAndroid Build Coastguard Worker 
627*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
628*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
629*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineEntityBinary(profilingGuid,
630*89c4ff92SAndroid Build Coastguard Worker                                                             buffer.data(),
631*89c4ff92SAndroid Build Coastguard Worker                                                             arm::pipe::numeric_cast<unsigned int>(buffer.size()),
632*89c4ff92SAndroid Build Coastguard Worker                                                             numberOfBytesWritten);
633*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::Ok);
634*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 12);
635*89c4ff92SAndroid Build Coastguard Worker 
636*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint32_t_size = sizeof(uint32_t);
637*89c4ff92SAndroid Build Coastguard Worker 
638*89c4ff92SAndroid Build Coastguard Worker     unsigned int offset = 0;
639*89c4ff92SAndroid Build Coastguard Worker     // Check decl_Id
640*89c4ff92SAndroid Build Coastguard Worker     uint32_t decl_Id = ReadUint32(buffer.data(), offset);
641*89c4ff92SAndroid Build Coastguard Worker     CHECK(decl_Id == uint32_t(1));
642*89c4ff92SAndroid Build Coastguard Worker 
643*89c4ff92SAndroid Build Coastguard Worker     // Check the profiling GUID
644*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
645*89c4ff92SAndroid Build Coastguard Worker     uint64_t readProfilingGuid = ReadUint64(buffer.data(), offset);
646*89c4ff92SAndroid Build Coastguard Worker     CHECK(readProfilingGuid == profilingGuid);
647*89c4ff92SAndroid Build Coastguard Worker }
648*89c4ff92SAndroid Build Coastguard Worker 
649*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineEventClassTestNoBuffer")
650*89c4ff92SAndroid Build Coastguard Worker {
651*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
652*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingNameGuid = 3345u;
653*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
654*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineEventClassBinary(profilingGuid,
655*89c4ff92SAndroid Build Coastguard Worker                                                                 profilingNameGuid,
656*89c4ff92SAndroid Build Coastguard Worker                                                                 nullptr,
657*89c4ff92SAndroid Build Coastguard Worker                                                                 512u,
658*89c4ff92SAndroid Build Coastguard Worker                                                                 numberOfBytesWritten);
659*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
660*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
661*89c4ff92SAndroid Build Coastguard Worker }
662*89c4ff92SAndroid Build Coastguard Worker 
663*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineEventClassTestBufferExhaustionZeroValue")
664*89c4ff92SAndroid Build Coastguard Worker {
665*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
666*89c4ff92SAndroid Build Coastguard Worker 
667*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
668*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingNameGuid = 3345u;
669*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
670*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineEventClassBinary(profilingGuid,
671*89c4ff92SAndroid Build Coastguard Worker                                                                 profilingNameGuid,
672*89c4ff92SAndroid Build Coastguard Worker                                                                 buffer.data(),
673*89c4ff92SAndroid Build Coastguard Worker                                                                 0,
674*89c4ff92SAndroid Build Coastguard Worker                                                                 numberOfBytesWritten);
675*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
676*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
677*89c4ff92SAndroid Build Coastguard Worker }
678*89c4ff92SAndroid Build Coastguard Worker 
679*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineEventClassTestBufferExhaustionFixedValue")
680*89c4ff92SAndroid Build Coastguard Worker {
681*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(10, 0);
682*89c4ff92SAndroid Build Coastguard Worker 
683*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
684*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingNameGuid = 5564u;
685*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
686*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineEventClassBinary(profilingGuid,
687*89c4ff92SAndroid Build Coastguard Worker                                                                 profilingNameGuid,
688*89c4ff92SAndroid Build Coastguard Worker                                                                 buffer.data(),
689*89c4ff92SAndroid Build Coastguard Worker                                                                 arm::pipe::numeric_cast<unsigned int>(buffer.size()),
690*89c4ff92SAndroid Build Coastguard Worker                                                                 numberOfBytesWritten);
691*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
692*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
693*89c4ff92SAndroid Build Coastguard Worker }
694*89c4ff92SAndroid Build Coastguard Worker 
695*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineEventClassTestFullConstructionOfData")
696*89c4ff92SAndroid Build Coastguard Worker {
697*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
698*89c4ff92SAndroid Build Coastguard Worker 
699*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
700*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingNameGuid = 654321u;
701*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
702*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineEventClassBinary(profilingGuid,
703*89c4ff92SAndroid Build Coastguard Worker                                                                 profilingNameGuid,
704*89c4ff92SAndroid Build Coastguard Worker                                                                 buffer.data(),
705*89c4ff92SAndroid Build Coastguard Worker                                                                 arm::pipe::numeric_cast<unsigned int>(buffer.size()),
706*89c4ff92SAndroid Build Coastguard Worker                                                                 numberOfBytesWritten);
707*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::Ok);
708*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 20);
709*89c4ff92SAndroid Build Coastguard Worker 
710*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint32_t_size = sizeof(uint32_t);
711*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint64_t_size = sizeof(uint64_t);
712*89c4ff92SAndroid Build Coastguard Worker 
713*89c4ff92SAndroid Build Coastguard Worker     unsigned int offset = 0;
714*89c4ff92SAndroid Build Coastguard Worker     // Check the decl_id
715*89c4ff92SAndroid Build Coastguard Worker     uint32_t declId = ReadUint32(buffer.data(), offset);
716*89c4ff92SAndroid Build Coastguard Worker     CHECK(declId == uint32_t(2));
717*89c4ff92SAndroid Build Coastguard Worker 
718*89c4ff92SAndroid Build Coastguard Worker     // Check the profiling GUID
719*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
720*89c4ff92SAndroid Build Coastguard Worker     uint64_t readProfilingGuid = ReadUint64(buffer.data(), offset);
721*89c4ff92SAndroid Build Coastguard Worker     CHECK(readProfilingGuid == profilingGuid);
722*89c4ff92SAndroid Build Coastguard Worker 
723*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
724*89c4ff92SAndroid Build Coastguard Worker     uint64_t readProfilingNameGuid = ReadUint64(buffer.data(), offset);
725*89c4ff92SAndroid Build Coastguard Worker     CHECK(readProfilingNameGuid == profilingNameGuid);
726*89c4ff92SAndroid Build Coastguard Worker }
727*89c4ff92SAndroid Build Coastguard Worker 
728*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineEventPacketTestNoBuffer")
729*89c4ff92SAndroid Build Coastguard Worker {
730*89c4ff92SAndroid Build Coastguard Worker     const uint64_t timestamp = 456789u;
731*89c4ff92SAndroid Build Coastguard Worker     const int threadId = arm::pipe::GetCurrentThreadId();
732*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
733*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
734*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineEventBinary(timestamp,
735*89c4ff92SAndroid Build Coastguard Worker                                                            threadId,
736*89c4ff92SAndroid Build Coastguard Worker                                                            profilingGuid,
737*89c4ff92SAndroid Build Coastguard Worker                                                            nullptr,
738*89c4ff92SAndroid Build Coastguard Worker                                                            512u,
739*89c4ff92SAndroid Build Coastguard Worker                                                            numberOfBytesWritten);
740*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
741*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
742*89c4ff92SAndroid Build Coastguard Worker }
743*89c4ff92SAndroid Build Coastguard Worker 
744*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineEventPacketTestBufferExhaustionZeroValue")
745*89c4ff92SAndroid Build Coastguard Worker {
746*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
747*89c4ff92SAndroid Build Coastguard Worker 
748*89c4ff92SAndroid Build Coastguard Worker     const uint64_t timestamp = 456789u;
749*89c4ff92SAndroid Build Coastguard Worker     const int threadId = arm::pipe::GetCurrentThreadId();
750*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
751*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
752*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineEventBinary(timestamp,
753*89c4ff92SAndroid Build Coastguard Worker                                                            threadId,
754*89c4ff92SAndroid Build Coastguard Worker                                                            profilingGuid,
755*89c4ff92SAndroid Build Coastguard Worker                                                            buffer.data(),
756*89c4ff92SAndroid Build Coastguard Worker                                                            0,
757*89c4ff92SAndroid Build Coastguard Worker                                                            numberOfBytesWritten);
758*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
759*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
760*89c4ff92SAndroid Build Coastguard Worker }
761*89c4ff92SAndroid Build Coastguard Worker 
762*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineEventPacketTestBufferExhaustionFixedValue")
763*89c4ff92SAndroid Build Coastguard Worker {
764*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(10, 0);
765*89c4ff92SAndroid Build Coastguard Worker 
766*89c4ff92SAndroid Build Coastguard Worker     const uint64_t timestamp = 456789u;
767*89c4ff92SAndroid Build Coastguard Worker     const int threadId = arm::pipe::GetCurrentThreadId();
768*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
769*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
770*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineEventBinary(timestamp,
771*89c4ff92SAndroid Build Coastguard Worker                                                            threadId,
772*89c4ff92SAndroid Build Coastguard Worker                                                            profilingGuid,
773*89c4ff92SAndroid Build Coastguard Worker                                                            buffer.data(),
774*89c4ff92SAndroid Build Coastguard Worker                                                            arm::pipe::numeric_cast<unsigned int>(buffer.size()),
775*89c4ff92SAndroid Build Coastguard Worker                                                            numberOfBytesWritten);
776*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::BufferExhaustion);
777*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 0);
778*89c4ff92SAndroid Build Coastguard Worker }
779*89c4ff92SAndroid Build Coastguard Worker 
780*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("TimelineEventPacketTestFullConstructionOfData")
781*89c4ff92SAndroid Build Coastguard Worker {
782*89c4ff92SAndroid Build Coastguard Worker     std::vector<unsigned char> buffer(512, 0);
783*89c4ff92SAndroid Build Coastguard Worker 
784*89c4ff92SAndroid Build Coastguard Worker     const uint64_t timestamp = 456789u;
785*89c4ff92SAndroid Build Coastguard Worker     const int threadId = arm::pipe::GetCurrentThreadId();
786*89c4ff92SAndroid Build Coastguard Worker     const uint64_t profilingGuid = 123456u;
787*89c4ff92SAndroid Build Coastguard Worker     unsigned int numberOfBytesWritten = 789u;
788*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketStatus result = WriteTimelineEventBinary(timestamp,
789*89c4ff92SAndroid Build Coastguard Worker                                                            threadId,
790*89c4ff92SAndroid Build Coastguard Worker                                                            profilingGuid,
791*89c4ff92SAndroid Build Coastguard Worker                                                            buffer.data(),
792*89c4ff92SAndroid Build Coastguard Worker                                                            arm::pipe::numeric_cast<unsigned int>(buffer.size()),
793*89c4ff92SAndroid Build Coastguard Worker                                                            numberOfBytesWritten);
794*89c4ff92SAndroid Build Coastguard Worker     CHECK(result == TimelinePacketStatus::Ok);
795*89c4ff92SAndroid Build Coastguard Worker 
796*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint32_t_size = sizeof(uint32_t);
797*89c4ff92SAndroid Build Coastguard Worker     unsigned int uint64_t_size = sizeof(uint64_t);
798*89c4ff92SAndroid Build Coastguard Worker     CHECK(numberOfBytesWritten == 20 + ThreadIdSize);
799*89c4ff92SAndroid Build Coastguard Worker 
800*89c4ff92SAndroid Build Coastguard Worker     unsigned int offset = 0;
801*89c4ff92SAndroid Build Coastguard Worker     // Check the decl_id
802*89c4ff92SAndroid Build Coastguard Worker     uint32_t readDeclId = ReadUint32(buffer.data(), offset);
803*89c4ff92SAndroid Build Coastguard Worker     CHECK(readDeclId == 4);
804*89c4ff92SAndroid Build Coastguard Worker 
805*89c4ff92SAndroid Build Coastguard Worker     // Check the timestamp
806*89c4ff92SAndroid Build Coastguard Worker     offset += uint32_t_size;
807*89c4ff92SAndroid Build Coastguard Worker     uint64_t readTimestamp = ReadUint64(buffer.data(), offset);
808*89c4ff92SAndroid Build Coastguard Worker     CHECK(readTimestamp == timestamp);
809*89c4ff92SAndroid Build Coastguard Worker 
810*89c4ff92SAndroid Build Coastguard Worker     // Check the thread id
811*89c4ff92SAndroid Build Coastguard Worker     offset += uint64_t_size;
812*89c4ff92SAndroid Build Coastguard Worker     std::vector<uint8_t> readThreadId(ThreadIdSize, 0);
813*89c4ff92SAndroid Build Coastguard Worker     ReadBytes(buffer.data(), offset, ThreadIdSize, readThreadId.data());
814*89c4ff92SAndroid Build Coastguard Worker     CHECK(readThreadId == threadId);
815*89c4ff92SAndroid Build Coastguard Worker 
816*89c4ff92SAndroid Build Coastguard Worker     // Check the profiling GUID
817*89c4ff92SAndroid Build Coastguard Worker     offset += ThreadIdSize;
818*89c4ff92SAndroid Build Coastguard Worker     uint64_t readProfilingGuid = ReadUint64(buffer.data(), offset);
819*89c4ff92SAndroid Build Coastguard Worker     CHECK(readProfilingGuid == profilingGuid);
820*89c4ff92SAndroid Build Coastguard Worker }
821*89c4ff92SAndroid Build Coastguard Worker 
822*89c4ff92SAndroid Build Coastguard Worker }
823