aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFinn Williams <Finn.Williams@arm.com>2019-10-22 10:30:49 +0100
committerDavid Monahan <david.monahan@arm.com>2019-11-07 12:20:47 +0000
commite63a026bd987e78bdaa5b94c3e53201b62011faa (patch)
treecad6e7dcc7107b723ecc92116a96eda80100a99e /src
parent362e03214ceceb95ec30d530ff84e8d9efc198d7 (diff)
downloadarmnn-e63a026bd987e78bdaa5b94c3e53201b62011faa.tar.gz
IVGCVSW-3951 Create the timeline decoder
* Added ITimelineDecoder.h C interface * Added an example implementation of ITimelineDecoder.h * Added command handlers for the timeline directory and objects * Added tests for the decoder implementation * Changed ReadSwTraceMessage to take a const unsigned char* so it can be used by the directory command handler * Fixed some bugs in ProfilingUtils.cpp and related tests Change-Id: If06faf1fe0274a8f022f194a6d3527f5ce5374c6 Signed-off-by: Finn Williams <Finn.Williams@arm.com>
Diffstat (limited to 'src')
-rw-r--r--src/profiling/DirectoryCaptureCommandHandler.cpp1
-rw-r--r--src/profiling/ProfilingUtils.cpp16
-rw-r--r--src/profiling/ProfilingUtils.hpp2
-rw-r--r--src/profiling/test/SendTimelinePacketTests.cpp18
-rw-r--r--src/profiling/test/TimelinePacketTests.cpp7
-rw-r--r--src/profiling/test/TimelineUtilityMethodsTests.cpp2
6 files changed, 29 insertions, 17 deletions
diff --git a/src/profiling/DirectoryCaptureCommandHandler.cpp b/src/profiling/DirectoryCaptureCommandHandler.cpp
index 22d1e6d0dd..c5a2d97293 100644
--- a/src/profiling/DirectoryCaptureCommandHandler.cpp
+++ b/src/profiling/DirectoryCaptureCommandHandler.cpp
@@ -3,6 +3,7 @@
// SPDX-License-Identifier: MIT
//
+#include <atomic>
#include "DirectoryCaptureCommandHandler.hpp"
#include "SendCounterPacket.hpp"
diff --git a/src/profiling/ProfilingUtils.cpp b/src/profiling/ProfilingUtils.cpp
index b649747df1..4dde235ecc 100644
--- a/src/profiling/ProfilingUtils.cpp
+++ b/src/profiling/ProfilingUtils.cpp
@@ -347,7 +347,7 @@ uint32_t CalculateSizeOfPaddedSwString(const std::string& str)
}
// Read TimelineMessageDirectoryPacket from given IPacketBuffer and offset
-SwTraceMessage ReadSwTraceMessage(const IPacketBufferPtr& packetBuffer, unsigned int& offset)
+SwTraceMessage ReadSwTraceMessage(const unsigned char* packetBuffer, unsigned int& offset)
{
BOOST_ASSERT(packetBuffer);
@@ -369,7 +369,7 @@ SwTraceMessage ReadSwTraceMessage(const IPacketBufferPtr& packetBuffer, unsigned
offset += uint32_t_size;
std::vector<unsigned char> swTraceStringBuffer(swTraceDeclNameLength - 1);
std::memcpy(swTraceStringBuffer.data(),
- packetBuffer->GetReadableData() + offset, swTraceStringBuffer.size());
+ packetBuffer + offset, swTraceStringBuffer.size());
swTraceMessage.name.assign(swTraceStringBuffer.begin(), swTraceStringBuffer.end()); // name
@@ -380,7 +380,7 @@ SwTraceMessage ReadSwTraceMessage(const IPacketBufferPtr& packetBuffer, unsigned
offset += uint32_t_size;
swTraceStringBuffer.resize(swTraceUINameLength - 1);
std::memcpy(swTraceStringBuffer.data(),
- packetBuffer->GetReadableData() + offset, swTraceStringBuffer.size());
+ packetBuffer + offset, swTraceStringBuffer.size());
swTraceMessage.uiName.assign(swTraceStringBuffer.begin(), swTraceStringBuffer.end()); // ui_name
@@ -391,7 +391,7 @@ SwTraceMessage ReadSwTraceMessage(const IPacketBufferPtr& packetBuffer, unsigned
offset += uint32_t_size;
swTraceStringBuffer.resize(swTraceArgTypesLength - 1);
std::memcpy(swTraceStringBuffer.data(),
- packetBuffer->GetReadableData() + offset, swTraceStringBuffer.size());
+ packetBuffer + offset, swTraceStringBuffer.size());
swTraceMessage.argTypes.assign(swTraceStringBuffer.begin(), swTraceStringBuffer.end()); // arg_types
@@ -404,7 +404,7 @@ SwTraceMessage ReadSwTraceMessage(const IPacketBufferPtr& packetBuffer, unsigned
offset += uint32_t_size;
swTraceStringBuffer.resize(swTraceArgNamesLength - 1);
std::memcpy(swTraceStringBuffer.data(),
- packetBuffer->GetReadableData() + offset, swTraceStringBuffer.size());
+ packetBuffer + offset, swTraceStringBuffer.size());
swTraceString.assign(swTraceStringBuffer.begin(), swTraceStringBuffer.end());
std::stringstream stringStream(swTraceString);
@@ -536,12 +536,11 @@ TimelinePacketStatus WriteTimelineEntityBinaryPacket(uint64_t profilingGuid,
unsigned int uint64_t_size = sizeof(uint64_t);
// Calculate the length of the data (in bytes)
- unsigned int timelineEntityPacketDataLength = uint64_t_size; // Profiling GUID
+ unsigned int timelineEntityPacketDataLength = uint32_t_size + uint64_t_size; // decl_id + Profiling GUID
// Calculate the timeline binary packet size (in bytes)
unsigned int timelineEntityPacketSize = 2 * uint32_t_size + // Header (2 words)
- uint32_t_size + // decl_Id
timelineEntityPacketDataLength; // Profiling GUID
// Check whether the timeline binary packet fits in the given buffer
@@ -744,6 +743,9 @@ TimelinePacketStatus WriteTimelineMessageDirectoryPackage(unsigned char* buffer,
WriteUint32(buffer, offset, packetHeader.second);
offset += uint32_t_size;
+ WriteUint32(buffer, offset, static_cast<uint32_t >(swTraceTimelineDirectoryMessages.size()));
+ offset += uint32_t_size;
+
for (unsigned int i = 0u; i < swTraceTimelineDirectoryMessages.size(); ++i)
{
// Write the timeline binary packet payload to the buffer
diff --git a/src/profiling/ProfilingUtils.hpp b/src/profiling/ProfilingUtils.hpp
index 74fc437333..f7b46be972 100644
--- a/src/profiling/ProfilingUtils.hpp
+++ b/src/profiling/ProfilingUtils.hpp
@@ -156,7 +156,7 @@ enum class ProfilingRelationshipType
uint32_t CalculateSizeOfPaddedSwString(const std::string& str);
-SwTraceMessage ReadSwTraceMessage(const IPacketBufferPtr& packetBuffer, unsigned int& offset);
+SwTraceMessage ReadSwTraceMessage(const unsigned char*, unsigned int& offset);
TimelinePacketStatus WriteTimelineLabelBinaryPacket(uint64_t profilingGuid,
const std::string& label,
diff --git a/src/profiling/test/SendTimelinePacketTests.cpp b/src/profiling/test/SendTimelinePacketTests.cpp
index 60cda9a657..7f3094918d 100644
--- a/src/profiling/test/SendTimelinePacketTests.cpp
+++ b/src/profiling/test/SendTimelinePacketTests.cpp
@@ -53,7 +53,11 @@ BOOST_AUTO_TEST_CASE(SendTimelineMessageDirectoryPackageTest)
BOOST_CHECK(dataLength == 416);
offset += uint32_t_size;
- SwTraceMessage swTraceMessage = ReadSwTraceMessage(packetBuffer, offset);
+ uint32_t DeclCount = ReadUint32(packetBuffer, offset);
+ BOOST_CHECK(DeclCount == 5);
+
+ offset += uint32_t_size;
+ SwTraceMessage swTraceMessage = ReadSwTraceMessage(packetBuffer->GetReadableData(), offset);
BOOST_CHECK(swTraceMessage.id == 0);
BOOST_CHECK(swTraceMessage.name == "declareLabel");
@@ -65,7 +69,7 @@ BOOST_AUTO_TEST_CASE(SendTimelineMessageDirectoryPackageTest)
BOOST_CHECK(swTraceMessage.argNames[0] == "guid");
BOOST_CHECK(swTraceMessage.argNames[1] == "value");
- swTraceMessage = ReadSwTraceMessage(packetBuffer, offset);
+ swTraceMessage = ReadSwTraceMessage(packetBuffer->GetReadableData(), offset);
BOOST_CHECK(swTraceMessage.id == 1);
BOOST_CHECK(swTraceMessage.name == "declareEntity");
@@ -75,7 +79,7 @@ BOOST_AUTO_TEST_CASE(SendTimelineMessageDirectoryPackageTest)
BOOST_CHECK(swTraceMessage.argNames.size() == 1);
BOOST_CHECK(swTraceMessage.argNames[0] == "guid");
- swTraceMessage = ReadSwTraceMessage(packetBuffer, offset);
+ swTraceMessage = ReadSwTraceMessage(packetBuffer->GetReadableData(), offset);
BOOST_CHECK(swTraceMessage.id == 2);
BOOST_CHECK(swTraceMessage.name == "declareEventClass");
@@ -85,7 +89,7 @@ BOOST_AUTO_TEST_CASE(SendTimelineMessageDirectoryPackageTest)
BOOST_CHECK(swTraceMessage.argNames.size() == 1);
BOOST_CHECK(swTraceMessage.argNames[0] == "guid");
- swTraceMessage = ReadSwTraceMessage(packetBuffer, offset);
+ swTraceMessage = ReadSwTraceMessage(packetBuffer->GetReadableData(), offset);
BOOST_CHECK(swTraceMessage.id == 3);
BOOST_CHECK(swTraceMessage.name == "declareRelationship");
@@ -101,7 +105,7 @@ BOOST_AUTO_TEST_CASE(SendTimelineMessageDirectoryPackageTest)
BOOST_CHECK(swTraceMessage.argNames[2] == "headGuid");
BOOST_CHECK(swTraceMessage.argNames[3] == "tailGuid");
- swTraceMessage = ReadSwTraceMessage(packetBuffer, offset);
+ swTraceMessage = ReadSwTraceMessage(packetBuffer->GetReadableData(), offset);
BOOST_CHECK(swTraceMessage.id == 4);
BOOST_CHECK(swTraceMessage.name == "declareEvent");
@@ -157,7 +161,7 @@ BOOST_AUTO_TEST_CASE(SendTimelineEntityPlusEventClassBinaryPacketTest)
uint32_t entityBinaryPacketSequenceNumbered = (entityBinaryPacketHeaderWord1 >> 24) & 0x00000001;
uint32_t entityBinaryPacketDataLength = (entityBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
BOOST_CHECK(entityBinaryPacketSequenceNumbered == 0);
- BOOST_CHECK(entityBinaryPacketDataLength == 8);
+ BOOST_CHECK(entityBinaryPacketDataLength == 12);
// Check the decl_id
offset += uint32_t_size;
@@ -243,7 +247,7 @@ BOOST_AUTO_TEST_CASE(SendTimelinePacketTests1)
uint32_t entityBinaryPacketSequenceNumbered = (entityBinaryPacketHeaderWord1 >> 24) & 0x00000001;
uint32_t entityBinaryPacketDataLength = (entityBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
BOOST_CHECK(entityBinaryPacketSequenceNumbered == 0);
- BOOST_CHECK(entityBinaryPacketDataLength == 8);
+ BOOST_CHECK(entityBinaryPacketDataLength == 12);
// Check the decl_id
offset += uint32_t_size;
diff --git a/src/profiling/test/TimelinePacketTests.cpp b/src/profiling/test/TimelinePacketTests.cpp
index 6a8aa85fc0..68cd948bdd 100644
--- a/src/profiling/test/TimelinePacketTests.cpp
+++ b/src/profiling/test/TimelinePacketTests.cpp
@@ -543,6 +543,11 @@ BOOST_AUTO_TEST_CASE(TimelineMessageDirectoryPacketTest3)
BOOST_CHECK(sequenceNumbered == 0);
BOOST_CHECK(dataLength == 416);
+ // Check the number of declarations
+ offset += uint32_t_size;
+ uint32_t declCount = ReadUint32(buffer.data(), offset);
+ BOOST_CHECK(declCount == 5);
+
// Check the decl_id
offset += uint32_t_size;
uint32_t readDeclId = ReadUint32(buffer.data(), offset);
@@ -689,7 +694,7 @@ BOOST_AUTO_TEST_CASE(TimelineEntityPacketTest4)
uint32_t sequenceNumbered = (packetHeaderWord1 >> 24) & 0x00000001;
uint32_t dataLength = (packetHeaderWord1 >> 0) & 0x00FFFFFF;
BOOST_CHECK(sequenceNumbered == 0);
- BOOST_CHECK(dataLength == 8);
+ BOOST_CHECK(dataLength == 12);
// Check decl_Id
offset += uint32_t_size;
diff --git a/src/profiling/test/TimelineUtilityMethodsTests.cpp b/src/profiling/test/TimelineUtilityMethodsTests.cpp
index 3556a12a7b..f784afc6ef 100644
--- a/src/profiling/test/TimelineUtilityMethodsTests.cpp
+++ b/src/profiling/test/TimelineUtilityMethodsTests.cpp
@@ -258,7 +258,7 @@ void VerifyTimelineEntityBinaryPacket(Optional<ProfilingGuid> guid,
uint32_t entityBinaryPacketSequenceNumbered = (entityBinaryPacketHeaderWord1 >> 24) & 0x00000001;
uint32_t entityBinaryPacketDataLength = (entityBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
BOOST_CHECK(entityBinaryPacketSequenceNumbered == 0);
- BOOST_CHECK(entityBinaryPacketDataLength == 8);
+ BOOST_CHECK(entityBinaryPacketDataLength == 12);
// Check the decl_id
offset += uint32_t_size;