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