MCPcopy Create free account
hub / github.com/ARM-software/armnn / ReadSwTraceMessage

Function ReadSwTraceMessage

profiling/common/src/SwTrace.cpp:32–127  ·  view source on GitHub ↗

Read TimelineMessageDirectoryPacket from given IPacketBuffer and offset

Source from the content-addressed store, hash-verified

30
31// Read TimelineMessageDirectoryPacket from given IPacketBuffer and offset
32SwTraceMessage ReadSwTraceMessage(const unsigned char* packetBuffer,
33 unsigned int& offset,
34 const unsigned int& packetLength)
35{
36 if (packetBuffer == nullptr)
37 {
38 throw ProfilingException("SwTrace.cpp: Attempting to read a null buffer");
39 }
40
41 unsigned int uint32_t_size = sizeof(uint32_t);
42
43 SwTraceMessage swTraceMessage;
44
45 // Read the decl_id
46 uint32_t readDeclId = ReadUint32(packetBuffer, offset);
47 swTraceMessage.m_Id = readDeclId;
48
49 // SWTrace "namestring" format
50 // length of the string (first 4 bytes) + string + null terminator
51
52 // Check the decl_name
53 offset += uint32_t_size;
54 uint32_t swTraceDeclNameLength = ReadUint32(packetBuffer, offset);
55
56 if (swTraceDeclNameLength == 0 || swTraceDeclNameLength > packetLength)
57 {
58 throw arm::pipe::ProfilingException("Error swTraceDeclNameLength is an invalid size", LOCATION());
59 }
60
61 offset += uint32_t_size;
62 std::vector<unsigned char> swTraceStringBuffer(swTraceDeclNameLength - 1);
63 std::memcpy(swTraceStringBuffer.data(),
64 packetBuffer + offset, swTraceStringBuffer.size());
65
66 swTraceMessage.m_Name.assign(swTraceStringBuffer.begin(), swTraceStringBuffer.end()); // name
67
68 // Check the ui_name
69 offset += CalculateSizeOfPaddedSwString(swTraceMessage.m_Name);
70 uint32_t swTraceUINameLength = ReadUint32(packetBuffer, offset);
71
72 if (swTraceUINameLength == 0 || swTraceUINameLength > packetLength)
73 {
74 throw arm::pipe::ProfilingException("Error swTraceUINameLength is an invalid size", LOCATION());
75 }
76
77 offset += uint32_t_size;
78 swTraceStringBuffer.resize(swTraceUINameLength - 1);
79 std::memcpy(swTraceStringBuffer.data(),
80 packetBuffer + offset, swTraceStringBuffer.size());
81
82 swTraceMessage.m_UiName.assign(swTraceStringBuffer.begin(), swTraceStringBuffer.end()); // ui_name
83
84 // Check arg_types
85 offset += CalculateSizeOfPaddedSwString(swTraceMessage.m_UiName);
86 uint32_t swTraceArgTypesLength = ReadUint32(packetBuffer, offset);
87
88 if (swTraceArgTypesLength == 0 || swTraceArgTypesLength > packetLength)
89 {

Callers 5

ParseDataMethod · 0.85
TimelineTests.cppFile · 0.85
BufferTests.cppFile · 0.85
CheckTimelineDirectoryFunction · 0.85

Calls 10

ProfilingExceptionClass · 0.85
resizeMethod · 0.80
push_backMethod · 0.80
ReadUint32Function · 0.70
dataMethod · 0.45
sizeMethod · 0.45
assignMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by 1

CheckTimelineDirectoryFunction · 0.68