IVGCVSW-4734 Add an Attribute label guid to the relationship message to reduce traffic

Signed-off-by: Finn Williams <Finn.Williams@arm.com>
Change-Id: Ia55c52c12fe3d30eb47bc42c932a33c620dc9197
diff --git a/include/armnn/profiling/ISendTimelinePacket.hpp b/include/armnn/profiling/ISendTimelinePacket.hpp
index 49a9fcf..a296223 100644
--- a/include/armnn/profiling/ISendTimelinePacket.hpp
+++ b/include/armnn/profiling/ISendTimelinePacket.hpp
@@ -53,7 +53,8 @@
     virtual void SendTimelineRelationshipBinaryPacket(ProfilingRelationshipType relationshipType,
                                                       uint64_t relationshipGuid,
                                                       uint64_t headGuid,
-                                                      uint64_t tailGuid) = 0;
+                                                      uint64_t tailGuid,
+                                                      uint64_t attributeGuid) = 0;
 };
 
 }    // namespace profiling
diff --git a/include/armnn/profiling/ITimelineDecoder.hpp b/include/armnn/profiling/ITimelineDecoder.hpp
index 5d22ad8..763858c 100644
--- a/include/armnn/profiling/ITimelineDecoder.hpp
+++ b/include/armnn/profiling/ITimelineDecoder.hpp
@@ -68,6 +68,7 @@
         uint64_t m_Guid;
         uint64_t m_HeadGuid;
         uint64_t m_TailGuid;
+        uint64_t m_AttributeGuid;
     };
 
     virtual ~ITimelineDecoder() = default;
diff --git a/src/armnn/test/RuntimeTests.cpp b/src/armnn/test/RuntimeTests.cpp
index c4a9626..ba921d3 100644
--- a/src/armnn/test/RuntimeTests.cpp
+++ b/src/armnn/test/RuntimeTests.cpp
@@ -414,7 +414,7 @@
     BOOST_CHECK(readableBuffer != nullptr);
 
     unsigned int size = readableBuffer->GetSize();
-    BOOST_CHECK(size == 1068);
+    BOOST_CHECK(size == 852);
 
     const unsigned char* readableData = readableBuffer->GetReadableData();
     BOOST_CHECK(readableData != nullptr);
@@ -422,7 +422,7 @@
     unsigned int offset = 0;
 
     // Verify Header
-    VerifyTimelineHeaderBinary(readableData, offset, 1060);
+    VerifyTimelineHeaderBinary(readableData, offset, 844);
 
     // Post-optimisation network
     // Network entity
@@ -434,13 +434,6 @@
                                                EmptyOptional(),
                                                optNetGuid,
                                                LabelsAndEventClasses::NETWORK_GUID,
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -457,13 +450,6 @@
                                                EmptyOptional(),
                                                input->GetGuid(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Name label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::NAME_GUID,
                                                readableData,
                                                offset);
@@ -473,13 +459,6 @@
                                                EmptyOptional(),
                                                input->GetGuid(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -489,6 +468,7 @@
                                                EmptyOptional(),
                                                optNetGuid,
                                                input->GetGuid(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -504,13 +484,6 @@
                                                EmptyOptional(),
                                                normalize->GetGuid(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Name label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::NAME_GUID,
                                                readableData,
                                                offset);
@@ -520,13 +493,6 @@
                                                EmptyOptional(),
                                                normalize->GetGuid(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -536,6 +502,7 @@
                                                EmptyOptional(),
                                                optNetGuid,
                                                normalize->GetGuid(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -544,6 +511,7 @@
                                                EmptyOptional(),
                                                input->GetGuid(),
                                                normalize->GetGuid(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -552,13 +520,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                LabelsAndEventClasses::CONNECTION_GUID,
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -572,13 +533,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -591,13 +545,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // BackendId label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::BACKENDID_GUID,
                                                readableData,
                                                offset);
@@ -607,6 +554,7 @@
                                                EmptyOptional(),
                                                normalize->GetGuid(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -622,13 +570,6 @@
                                                EmptyOptional(),
                                                output->GetGuid(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Name label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::NAME_GUID,
                                                readableData,
                                                offset);
@@ -638,13 +579,6 @@
                                                EmptyOptional(),
                                                output->GetGuid(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -654,6 +588,7 @@
                                                EmptyOptional(),
                                                optNetGuid,
                                                output->GetGuid(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -662,6 +597,7 @@
                                                EmptyOptional(),
                                                normalize->GetGuid(),
                                                output->GetGuid(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -670,13 +606,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                LabelsAndEventClasses::CONNECTION_GUID,
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -713,7 +642,7 @@
 
     // Validate input workload data
     size = inputReadableBuffer->GetSize();
-    BOOST_CHECK(size == 204);
+    BOOST_CHECK(size == 164);
 
     readableData = inputReadableBuffer->GetReadableData();
     BOOST_CHECK(readableData != nullptr);
@@ -721,7 +650,7 @@
     offset = 0;
 
     // Verify Header
-    VerifyTimelineHeaderBinary(readableData, offset, 196);
+    VerifyTimelineHeaderBinary(readableData, offset, 156);
 
     // Input workload
     // Input workload entity
@@ -732,13 +661,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -751,13 +673,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // BackendId label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::BACKENDID_GUID,
                                                readableData,
                                                offset);
@@ -767,6 +682,7 @@
                                                EmptyOptional(),
                                                input->GetGuid(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -774,7 +690,7 @@
 
     // Validate output workload data
     size = outputReadableBuffer->GetSize();
-    BOOST_CHECK(size == 204);
+    BOOST_CHECK(size == 164);
 
     readableData = outputReadableBuffer->GetReadableData();
     BOOST_CHECK(readableData != nullptr);
@@ -782,7 +698,7 @@
     offset = 0;
 
     // Verify Header
-    VerifyTimelineHeaderBinary(readableData, offset, 196);
+    VerifyTimelineHeaderBinary(readableData, offset, 156);
 
     // Output workload
     // Output workload entity
@@ -793,13 +709,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -812,13 +721,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // BackendId label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::BACKENDID_GUID,
                                                readableData,
                                                offset);
@@ -828,6 +730,7 @@
                                                EmptyOptional(),
                                                output->GetGuid(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -835,7 +738,7 @@
 
     // Validate inference data
     size = inferenceReadableBuffer->GetSize();
-    BOOST_CHECK(size == 1208 + 8 * ThreadIdSize);
+    BOOST_CHECK(size == 976 + 8 * ThreadIdSize);
 
     readableData = inferenceReadableBuffer->GetReadableData();
     BOOST_CHECK(readableData != nullptr);
@@ -843,7 +746,7 @@
     offset = 0;
 
     // Verify Header
-    VerifyTimelineHeaderBinary(readableData, offset, 1200 + 8 * ThreadIdSize);
+    VerifyTimelineHeaderBinary(readableData, offset, 968 + 8 * ThreadIdSize);
 
     // Inference timeline trace
     // Inference entity
@@ -854,13 +757,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                LabelsAndEventClasses::INFERENCE_GUID,
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -870,6 +766,7 @@
                                                EmptyOptional(),
                                                optNetGuid,
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -882,13 +779,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
                                                readableData,
                                                offset);
@@ -903,13 +793,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -919,6 +802,7 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -927,6 +811,7 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -939,13 +824,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
                                                readableData,
                                                offset);
@@ -959,13 +837,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
                                                readableData,
                                                offset);
@@ -979,13 +850,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -995,6 +859,7 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -1003,6 +868,7 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -1015,13 +881,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
                                                readableData,
                                                offset);
@@ -1035,13 +894,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
                                                readableData,
                                                offset);
@@ -1055,13 +907,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -1071,6 +916,7 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -1079,6 +925,7 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -1091,17 +938,11 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
                                                readableData,
                                                offset);
 
+
     // End of Normalize workload execution life
     // Event packet - timeline, threadId, eventGuid
     VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
@@ -1111,13 +952,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
                                                readableData,
                                                offset);
@@ -1131,13 +965,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
                                                readableData,
                                                offset);
diff --git a/src/profiling/LabelsAndEventClasses.cpp b/src/profiling/LabelsAndEventClasses.cpp
index fa89f1c..42b4a9d 100644
--- a/src/profiling/LabelsAndEventClasses.cpp
+++ b/src/profiling/LabelsAndEventClasses.cpp
@@ -14,11 +14,13 @@
 ProfilingGuidGenerator LabelsAndEventClasses::m_GuidGenerator;
 
 // Labels (string value + GUID)
+std::string LabelsAndEventClasses::EMPTY_LABEL("");
 std::string LabelsAndEventClasses::NAME_LABEL("name");
 std::string LabelsAndEventClasses::TYPE_LABEL("type");
 std::string LabelsAndEventClasses::INDEX_LABEL("index");
 std::string LabelsAndEventClasses::BACKENDID_LABEL("backendId");
 
+ProfilingStaticGuid LabelsAndEventClasses::EMPTY_GUID(0);
 ProfilingStaticGuid LabelsAndEventClasses::NAME_GUID(
     m_GuidGenerator.GenerateStaticId(LabelsAndEventClasses::NAME_LABEL));
 ProfilingStaticGuid LabelsAndEventClasses::TYPE_GUID(
diff --git a/src/profiling/LabelsAndEventClasses.hpp b/src/profiling/LabelsAndEventClasses.hpp
index fa12549..d79870f 100644
--- a/src/profiling/LabelsAndEventClasses.hpp
+++ b/src/profiling/LabelsAndEventClasses.hpp
@@ -20,10 +20,12 @@
 {
 public:
     // Labels (string value + GUID)
+    ARMNN_DLLEXPORT static std::string EMPTY_LABEL;
     ARMNN_DLLEXPORT static std::string NAME_LABEL;
     ARMNN_DLLEXPORT static std::string TYPE_LABEL;
     ARMNN_DLLEXPORT static std::string INDEX_LABEL;
     ARMNN_DLLEXPORT static std::string BACKENDID_LABEL;
+    ARMNN_DLLEXPORT static ProfilingStaticGuid EMPTY_GUID;
     ARMNN_DLLEXPORT static ProfilingStaticGuid NAME_GUID;
     ARMNN_DLLEXPORT static ProfilingStaticGuid TYPE_GUID;
     ARMNN_DLLEXPORT static ProfilingStaticGuid INDEX_GUID;
diff --git a/src/profiling/ProfilingUtils.cpp b/src/profiling/ProfilingUtils.cpp
index f151dd6..d832237 100644
--- a/src/profiling/ProfilingUtils.cpp
+++ b/src/profiling/ProfilingUtils.cpp
@@ -553,6 +553,7 @@
                                                      uint64_t relationshipGuid,
                                                      uint64_t headGuid,
                                                      uint64_t tailGuid,
+                                                     uint64_t attributeGuid,
                                                      unsigned char* buffer,
                                                      unsigned int remainingBufferSize,
                                                      unsigned int& numberOfBytesWritten)
@@ -572,7 +573,8 @@
 
     // Calculate the length of the data (in bytes)
     unsigned int timelineRelationshipDataLength = uint32_t_size * 2 + // decl_id + Relationship Type
-                                                  uint64_t_size * 3;  // Relationship GUID + Head GUID + tail GUID
+                                                  uint64_t_size * 4;  // Relationship GUID + Head GUID +
+                                                                      // tail GUID + attributeGuid
 
     // Check whether the timeline binary fits in the given buffer
     if (timelineRelationshipDataLength > remainingBufferSize)
@@ -615,6 +617,9 @@
     WriteUint64(buffer, offset, headGuid); // head of relationship GUID
     offset += uint64_t_size;
     WriteUint64(buffer, offset, tailGuid); // tail of relationship GUID
+    offset += uint64_t_size;
+    WriteUint64(buffer, offset, attributeGuid); // attribute of relationship GUID
+
 
     // Update the number of bytes written
     numberOfBytesWritten = timelineRelationshipDataLength;
diff --git a/src/profiling/ProfilingUtils.hpp b/src/profiling/ProfilingUtils.hpp
index 22391c2..92ddfe3 100644
--- a/src/profiling/ProfilingUtils.hpp
+++ b/src/profiling/ProfilingUtils.hpp
@@ -229,6 +229,7 @@
                                                      uint64_t relationshipGuid,
                                                      uint64_t headGuid,
                                                      uint64_t tailGuid,
+                                                     uint64_t attributeGuid,
                                                      unsigned char* buffer,
                                                      unsigned int bufferSize,
                                                      unsigned int& numberOfBytesWritten);
diff --git a/src/profiling/SendTimelinePacket.cpp b/src/profiling/SendTimelinePacket.cpp
index 5152d66..db8a633 100644
--- a/src/profiling/SendTimelinePacket.cpp
+++ b/src/profiling/SendTimelinePacket.cpp
@@ -110,13 +110,15 @@
 void SendTimelinePacket::SendTimelineRelationshipBinaryPacket(ProfilingRelationshipType relationshipType,
                                                               uint64_t relationshipGuid,
                                                               uint64_t headGuid,
-                                                              uint64_t tailGuid)
+                                                              uint64_t tailGuid,
+                                                              uint64_t attributeGuid)
 {
     ForwardWriteBinaryFunction(WriteTimelineRelationshipBinary,
                                relationshipType,
                                relationshipGuid,
                                headGuid,
-                               tailGuid);
+                               tailGuid,
+                               attributeGuid);
 }
 
 void SendTimelinePacket::SendTimelineMessageDirectoryPackage()
diff --git a/src/profiling/SendTimelinePacket.hpp b/src/profiling/SendTimelinePacket.hpp
index 9954bd9..d4ea2ff 100644
--- a/src/profiling/SendTimelinePacket.hpp
+++ b/src/profiling/SendTimelinePacket.hpp
@@ -51,7 +51,8 @@
     virtual void SendTimelineRelationshipBinaryPacket(ProfilingRelationshipType relationshipType,
                                                       uint64_t relationshipGuid,
                                                       uint64_t headGuid,
-                                                      uint64_t tailGuid) override;
+                                                      uint64_t tailGuid,
+                                                      uint64_t attributeGuid) override;
 private:
     /// Reserves maximum packet size from buffer
     void ReserveBuffer();
diff --git a/src/profiling/TimelineUtilityMethods.cpp b/src/profiling/TimelineUtilityMethods.cpp
index de30b4d..b0ce998 100644
--- a/src/profiling/TimelineUtilityMethods.cpp
+++ b/src/profiling/TimelineUtilityMethods.cpp
@@ -185,15 +185,7 @@
     m_SendTimelinePacket->SendTimelineRelationshipBinaryPacket(ProfilingRelationshipType::LabelLink,
                                                                relationshipGuid,
                                                                entityGuid,
-                                                               labelGuid);
-
-    // Generate a GUID for the label relationship
-    ProfilingDynamicGuid relationshipLabelGuid = profiling::ProfilingService::GetNextGuid();
-
-    // Send the new label link to the external profiling service, this call throws in case of error
-    m_SendTimelinePacket->SendTimelineRelationshipBinaryPacket(ProfilingRelationshipType::LabelLink,
-                                                               relationshipLabelGuid,
-                                                               relationshipGuid,
+                                                               labelGuid,
                                                                labelTypeGuid);
 }
 
@@ -207,15 +199,7 @@
     m_SendTimelinePacket->SendTimelineRelationshipBinaryPacket(ProfilingRelationshipType::LabelLink,
                                                                relationshipGuid,
                                                                entityGuid,
-                                                               typeNameGuid);
-
-    // Generate a GUID for the label relationship
-    ProfilingDynamicGuid relationshipLabelGuid = profiling::ProfilingService::GetNextGuid();
-
-    // Send the new label link to the external profiling service, this call throws in case of error
-    m_SendTimelinePacket->SendTimelineRelationshipBinaryPacket(ProfilingRelationshipType::LabelLink,
-                                                               relationshipLabelGuid,
-                                                               relationshipGuid,
+                                                               typeNameGuid,
                                                                LabelsAndEventClasses::TYPE_GUID);
 }
 
@@ -257,7 +241,8 @@
     m_SendTimelinePacket->SendTimelineRelationshipBinaryPacket(ProfilingRelationshipType::RetentionLink,
                                                                retentionLinkGuid,
                                                                parentEntityGuid,
-                                                               childEntityGuid);
+                                                               childEntityGuid,
+                                                               LabelsAndEventClasses::EMPTY_GUID);
 
     return childEntityGuid;
 }
@@ -291,7 +276,8 @@
     m_SendTimelinePacket->SendTimelineRelationshipBinaryPacket(ProfilingRelationshipType::RetentionLink,
                                                                retentionLinkGuid,
                                                                parentEntityGuid,
-                                                               childEntityGuid);
+                                                               childEntityGuid,
+                                                               LabelsAndEventClasses::EMPTY_GUID);
 }
 
 void TimelineUtilityMethods::CreateNamedTypedChildEntity(ProfilingGuid childEntityGuid,
@@ -316,7 +302,8 @@
     m_SendTimelinePacket->SendTimelineRelationshipBinaryPacket(ProfilingRelationshipType::RetentionLink,
                                                                retentionLinkGuid,
                                                                parentEntityGuid,
-                                                               childEntityGuid);
+                                                               childEntityGuid,
+                                                               LabelsAndEventClasses::EMPTY_GUID);
 }
 
 ProfilingDynamicGuid TimelineUtilityMethods::CreateRelationship(ProfilingRelationshipType relationshipType,
@@ -330,7 +317,8 @@
     m_SendTimelinePacket->SendTimelineRelationshipBinaryPacket(relationshipType,
                                                                relationshipGuid,
                                                                headGuid,
-                                                               tailGuid);
+                                                               tailGuid,
+                                                               LabelsAndEventClasses::EMPTY_GUID);
     return relationshipGuid;
 }
 
@@ -345,7 +333,8 @@
     m_SendTimelinePacket->SendTimelineRelationshipBinaryPacket(relationshipType,
                                                                relationshipGuid,
                                                                headGuid,
-                                                               tailGuid);
+                                                               tailGuid,
+                                                               LabelsAndEventClasses::EMPTY_GUID);
 
     MarkEntityWithType(relationshipGuid, LabelsAndEventClasses::CONNECTION_GUID);
     return relationshipGuid;
@@ -381,14 +370,6 @@
     m_SendTimelinePacket->SendTimelineRelationshipBinaryPacket(ProfilingRelationshipType::ExecutionLink,
                                                                executionLinkId,
                                                                entityGuid,
-                                                               eventGuid);
-
-    // Generate a GUID for the data relationship link
-    ProfilingDynamicGuid eventClassLinkId = profiling::ProfilingService::GetNextGuid();
-
-    // Send the new data relationship link to the external profiling service, this call throws in case of error
-    m_SendTimelinePacket->SendTimelineRelationshipBinaryPacket(ProfilingRelationshipType::DataLink,
-                                                               eventClassLinkId,
                                                                eventGuid,
                                                                eventClassGuid);
 
diff --git a/src/profiling/test/ProfilingTestUtils.cpp b/src/profiling/test/ProfilingTestUtils.cpp
index 73dbf88..ff25604 100644
--- a/src/profiling/test/ProfilingTestUtils.cpp
+++ b/src/profiling/test/ProfilingTestUtils.cpp
@@ -57,21 +57,21 @@
     unsigned int uint32_t_size = sizeof(uint32_t);
 
     // Check the TimelineEventClassBinaryPacket header
-    uint32_t entityBinaryPacketHeaderWord0 = ReadUint32(readableData, offset);
-    uint32_t entityBinaryPacketFamily      = (entityBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
-    uint32_t entityBinaryPacketClass       = (entityBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
-    uint32_t entityBinaryPacketType        = (entityBinaryPacketHeaderWord0 >> 16) & 0x00000007;
-    uint32_t entityBinaryPacketStreamId    = (entityBinaryPacketHeaderWord0 >>  0) & 0x00000007;
-    BOOST_CHECK(entityBinaryPacketFamily   == 1);
-    BOOST_CHECK(entityBinaryPacketClass    == 0);
-    BOOST_CHECK(entityBinaryPacketType     == 1);
-    BOOST_CHECK(entityBinaryPacketStreamId == 0);
+    uint32_t timelineBinaryPacketHeaderWord0 = ReadUint32(readableData, offset);
+    uint32_t timelineBinaryPacketFamily      = (timelineBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
+    uint32_t timelineBinaryPacketClass       = (timelineBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
+    uint32_t timelineBinaryPacketType        = (timelineBinaryPacketHeaderWord0 >> 16) & 0x00000007;
+    uint32_t timelineBinaryPacketStreamId    = (timelineBinaryPacketHeaderWord0 >>  0) & 0x00000007;
+    BOOST_CHECK(timelineBinaryPacketFamily   == 1);
+    BOOST_CHECK(timelineBinaryPacketClass    == 0);
+    BOOST_CHECK(timelineBinaryPacketType     == 1);
+    BOOST_CHECK(timelineBinaryPacketStreamId == 0);
     offset += uint32_t_size;
-    uint32_t entityBinaryPacketHeaderWord1   = ReadUint32(readableData, offset);
-    uint32_t eventBinaryPacketSequenceNumber = (entityBinaryPacketHeaderWord1 >> 24) & 0x00000001;
-    uint32_t eventBinaryPacketDataLength     = (entityBinaryPacketHeaderWord1 >>  0) & 0x00FFFFFF;
-    BOOST_CHECK(eventBinaryPacketSequenceNumber == 0);
-    BOOST_CHECK(eventBinaryPacketDataLength     == packetDataLength);
+    uint32_t timelineBinaryPacketHeaderWord1   = ReadUint32(readableData, offset);
+    uint32_t timelineBinaryPacketSequenceNumber = (timelineBinaryPacketHeaderWord1 >> 24) & 0x00000001;
+    uint32_t timelineBinaryPacketDataLength     = (timelineBinaryPacketHeaderWord1 >>  0) & 0x00FFFFFF;
+    BOOST_CHECK(timelineBinaryPacketSequenceNumber == 0);
+    BOOST_CHECK(timelineBinaryPacketDataLength     == packetDataLength);
     offset += uint32_t_size;
 }
 
@@ -144,6 +144,7 @@
                                             Optional<ProfilingGuid> relationshipGuid,
                                             Optional<ProfilingGuid> headGuid,
                                             Optional<ProfilingGuid> tailGuid,
+                                            Optional<ProfilingGuid> attributeGuid,
                                             const unsigned char* readableData,
                                             unsigned int& offset)
 {
@@ -217,6 +218,18 @@
         BOOST_CHECK(readTailRelationshipGuid != ProfilingGuid(0));
     }
 
+    // Check the tail of relationship GUID
+    offset += uint64_t_size;
+    uint64_t readAttributeRelationshipGuid = ReadUint64(readableData, offset);
+    if (attributeGuid.has_value())
+    {
+        BOOST_CHECK(readAttributeRelationshipGuid == attributeGuid.value());
+    }
+    else
+    {
+        BOOST_CHECK(readAttributeRelationshipGuid == ProfilingGuid(0));
+    }
+
     // Update the offset to allow parsing to be continued after this function returns
     offset += uint64_t_size;
 }
@@ -396,7 +409,7 @@
     BOOST_CHECK(readableBuffer != nullptr);
 
     unsigned int size = readableBuffer->GetSize();
-    BOOST_CHECK(size == 1556);
+    BOOST_CHECK(size == 1244);
 
     const unsigned char* readableData = readableBuffer->GetReadableData();
     BOOST_CHECK(readableData != nullptr);
@@ -404,7 +417,7 @@
     unsigned int offset = 0;
 
     // Verify Header
-    VerifyTimelineHeaderBinary(readableData, offset, 1548);
+    VerifyTimelineHeaderBinary(readableData, offset, 1236);
 
     // Post-optimisation network
     // Network entity
@@ -415,13 +428,6 @@
                                                EmptyOptional(),
                                                optNetGuid,
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -438,38 +444,31 @@
                                                EmptyOptional(),
                                                input->GetGuid(),
                                                EmptyOptional(),
+                                               LabelsAndEventClasses::NAME_GUID,
                                                readableData,
                                                offset);
 
     // Name label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
-                                               LabelsAndEventClasses::NAME_GUID,
-                                               readableData,
-                                               offset);
+
 
     // Entity - Type relationship
     VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
                                                EmptyOptional(),
                                                input->GetGuid(),
                                                EmptyOptional(),
+                                               LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
 
     // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
-                                               LabelsAndEventClasses::TYPE_GUID,
-                                               readableData,
-                                               offset);
+
 
     // Network - Input layer relationship
     VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
                                                EmptyOptional(),
                                                optNetGuid,
                                                input->GetGuid(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -485,13 +484,6 @@
                                                EmptyOptional(),
                                                conv2d->GetGuid(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Name label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::NAME_GUID,
                                                readableData,
                                                offset);
@@ -501,22 +493,17 @@
                                                EmptyOptional(),
                                                conv2d->GetGuid(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
 
+
     // Network - Conv2d layer relationship
     VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
                                                EmptyOptional(),
                                                optNetGuid,
                                                conv2d->GetGuid(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -525,6 +512,7 @@
                                                EmptyOptional(),
                                                input->GetGuid(),
                                                conv2d->GetGuid(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -533,17 +521,12 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                LabelsAndEventClasses::CONNECTION_GUID,
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
 
+
+
     // Conv2d workload
     // Conv2d workload entity
     VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
@@ -553,17 +536,11 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
 
+
     // BackendId entity
     VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
 
@@ -572,22 +549,17 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // BackendId label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::BACKENDID_GUID,
                                                readableData,
                                                offset);
 
+
     // Conv2d layer - Conv2d workload relationship
     VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
                                                EmptyOptional(),
                                                conv2d->GetGuid(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -603,13 +575,6 @@
                                                EmptyOptional(),
                                                activation->GetGuid(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Name label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::NAME_GUID,
                                                readableData,
                                                offset);
@@ -619,13 +584,6 @@
                                                EmptyOptional(),
                                                activation->GetGuid(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -635,6 +593,7 @@
                                                EmptyOptional(),
                                                optNetGuid,
                                                activation->GetGuid(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -643,6 +602,7 @@
                                                EmptyOptional(),
                                                conv2d->GetGuid(),
                                                activation->GetGuid(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -651,13 +611,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                LabelsAndEventClasses::CONNECTION_GUID,
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -671,13 +624,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -690,13 +636,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // BackendId label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::BACKENDID_GUID,
                                                readableData,
                                                offset);
@@ -706,6 +645,7 @@
                                                EmptyOptional(),
                                                activation->GetGuid(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -721,13 +661,6 @@
                                                EmptyOptional(),
                                                output->GetGuid(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Name label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::NAME_GUID,
                                                readableData,
                                                offset);
@@ -737,13 +670,6 @@
                                                EmptyOptional(),
                                                output->GetGuid(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -753,6 +679,7 @@
                                                EmptyOptional(),
                                                optNetGuid,
                                                output->GetGuid(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -761,6 +688,7 @@
                                                EmptyOptional(),
                                                activation->GetGuid(),
                                                output->GetGuid(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -769,13 +697,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                LabelsAndEventClasses::CONNECTION_GUID,
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -812,7 +733,7 @@
 
     // Validate input workload data
     size = inputReadableBuffer->GetSize();
-    BOOST_CHECK(size == 204);
+    BOOST_CHECK(size == 164);
 
     readableData = inputReadableBuffer->GetReadableData();
     BOOST_CHECK(readableData != nullptr);
@@ -820,7 +741,7 @@
     offset = 0;
 
     // Verify Header
-    VerifyTimelineHeaderBinary(readableData, offset, 196);
+    VerifyTimelineHeaderBinary(readableData, offset, 156);
 
     // Input workload
     // Input workload entity
@@ -831,13 +752,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -850,13 +764,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // BackendId label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::BACKENDID_GUID,
                                                readableData,
                                                offset);
@@ -866,6 +773,7 @@
                                                EmptyOptional(),
                                                input->GetGuid(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -873,7 +781,7 @@
 
     // Validate output workload data
     size = outputReadableBuffer->GetSize();
-    BOOST_CHECK(size == 204);
+    BOOST_CHECK(size == 164);
 
     readableData = outputReadableBuffer->GetReadableData();
     BOOST_CHECK(readableData != nullptr);
@@ -881,7 +789,7 @@
     offset = 0;
 
     // Verify Header
-    VerifyTimelineHeaderBinary(readableData, offset, 196);
+    VerifyTimelineHeaderBinary(readableData, offset, 156);
 
     // Output workload
     // Output workload entity
@@ -892,13 +800,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -911,13 +812,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // BackendId label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::BACKENDID_GUID,
                                                readableData,
                                                offset);
@@ -927,6 +821,7 @@
                                                EmptyOptional(),
                                                output->GetGuid(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -935,7 +830,7 @@
     // Validate inference data
     size = inferenceReadableBuffer->GetSize();
 
-    BOOST_CHECK(size == 1516 + 10 * ThreadIdSize);
+    BOOST_CHECK(size == 1228 + 10 * ThreadIdSize);
 
     readableData = inferenceReadableBuffer->GetReadableData();
     BOOST_CHECK(readableData != nullptr);
@@ -943,7 +838,7 @@
     offset = 0;
 
     // Verify Header
-    VerifyTimelineHeaderBinary(readableData, offset, 1508 + 10 * ThreadIdSize);
+    VerifyTimelineHeaderBinary(readableData, offset, 1220 + 10 * ThreadIdSize);
 
     // Inference timeline trace
     // Inference entity
@@ -954,13 +849,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                LabelsAndEventClasses::INFERENCE_GUID,
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -970,6 +858,7 @@
                                                EmptyOptional(),
                                                optNetGuid,
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -982,13 +871,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
                                                readableData,
                                                offset);
@@ -1003,13 +885,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -1019,6 +894,7 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -1027,6 +903,7 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -1039,13 +916,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
                                                readableData,
                                                offset);
@@ -1059,13 +929,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
                                                readableData,
                                                offset);
@@ -1079,13 +942,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -1095,6 +951,7 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -1103,6 +960,7 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -1115,13 +973,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
                                                readableData,
                                                offset);
@@ -1135,13 +986,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
                                                readableData,
                                                offset);
@@ -1155,13 +999,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -1171,6 +1008,7 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -1179,6 +1017,7 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -1191,13 +1030,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
                                                readableData,
                                                offset);
@@ -1211,13 +1043,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
                                                readableData,
                                                offset);
@@ -1231,13 +1056,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
-                                               readableData,
-                                               offset);
-
-    // Type label relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
@@ -1247,6 +1065,7 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -1255,6 +1074,7 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -1267,13 +1087,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
                                                readableData,
                                                offset);
@@ -1287,13 +1100,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
                                                readableData,
                                                offset);
@@ -1307,13 +1113,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Event - event class relationship
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
                                                readableData,
                                                offset);
diff --git a/src/profiling/test/ProfilingTestUtils.hpp b/src/profiling/test/ProfilingTestUtils.hpp
index 428ffa2..7e4f399 100644
--- a/src/profiling/test/ProfilingTestUtils.hpp
+++ b/src/profiling/test/ProfilingTestUtils.hpp
@@ -40,6 +40,7 @@
                                                 Optional<ProfilingGuid> relationshipGuid,
                                                 Optional<ProfilingGuid> headGuid,
                                                 Optional<ProfilingGuid> tailGuid,
+                                                Optional<ProfilingGuid> attributeGuid,
                                                 const unsigned char* readableData,
                                                 unsigned int& offset);
 
diff --git a/src/profiling/test/TimelinePacketTests.cpp b/src/profiling/test/TimelinePacketTests.cpp
index e57ed2a..8cce520 100644
--- a/src/profiling/test/TimelinePacketTests.cpp
+++ b/src/profiling/test/TimelinePacketTests.cpp
@@ -122,11 +122,13 @@
     const uint64_t relationshipGuid = 123456u;
     const uint64_t headGuid = 234567u;
     const uint64_t tailGuid = 345678u;
+    const uint64_t attributeGuid = 876345u;
     unsigned int numberOfBytesWritten = 789u;
     TimelinePacketStatus result = WriteTimelineRelationshipBinary(relationshipType,
                                                                   relationshipGuid,
                                                                   headGuid,
                                                                   tailGuid,
+                                                                  attributeGuid,
                                                                   nullptr,
                                                                   512u,
                                                                   numberOfBytesWritten);
@@ -142,11 +144,13 @@
     const uint64_t relationshipGuid = 123456u;
     const uint64_t headGuid = 234567u;
     const uint64_t tailGuid = 345678u;
+    const uint64_t attributeGuid = 876345u;
     unsigned int numberOfBytesWritten = 789u;
     TimelinePacketStatus result = WriteTimelineRelationshipBinary(relationshipType,
                                                                   relationshipGuid,
                                                                   headGuid,
                                                                   tailGuid,
+                                                                  attributeGuid,
                                                                   buffer.data(),
                                                                   0,
                                                                   numberOfBytesWritten);
@@ -162,12 +166,14 @@
     const uint64_t relationshipGuid = 123456u;
     const uint64_t headGuid = 234567u;
     const uint64_t tailGuid = 345678u;
+    const uint64_t attributeGuid = 876345u;
     unsigned int numberOfBytesWritten = 789u;
     TimelinePacketStatus result =
                              WriteTimelineRelationshipBinary(relationshipType,
                                                              relationshipGuid,
                                                              headGuid,
                                                              tailGuid,
+                                                             attributeGuid,
                                                              buffer.data(),
                                                              boost::numeric_cast<unsigned int>(buffer.size()),
                                                              numberOfBytesWritten);
@@ -182,12 +188,15 @@
     const uint64_t relationshipGuid = 123456u;
     const uint64_t headGuid = 234567u;
     const uint64_t tailGuid = 345678u;
+    const uint64_t attributeGuid = 876345u;
+
     unsigned int numberOfBytesWritten = 789u;
 
     BOOST_CHECK_THROW(WriteTimelineRelationshipBinary(relationshipType,
                                                       relationshipGuid,
                                                       headGuid,
                                                       tailGuid,
+                                                      attributeGuid,
                                                       buffer.data(),
                                                       boost::numeric_cast<unsigned int>(buffer.size()),
                                                       numberOfBytesWritten),
@@ -204,17 +213,19 @@
     const uint64_t relationshipGuid = 123456u;
     const uint64_t headGuid = 234567u;
     const uint64_t tailGuid = 345678u;
+    const uint64_t attributeGuid = 876345u;
     unsigned int numberOfBytesWritten = 789u;
     TimelinePacketStatus result =
                              WriteTimelineRelationshipBinary(relationshipType,
                                                              relationshipGuid,
                                                              headGuid,
                                                              tailGuid,
+                                                             attributeGuid,
                                                              buffer.data(),
                                                              boost::numeric_cast<unsigned int>(buffer.size()),
                                                              numberOfBytesWritten);
     BOOST_CHECK(result == TimelinePacketStatus::Ok);
-    BOOST_CHECK(numberOfBytesWritten == 32);
+    BOOST_CHECK(numberOfBytesWritten == 40);
 
     unsigned int uint32_t_size = sizeof(uint32_t);
     unsigned int uint64_t_size = sizeof(uint64_t);
@@ -244,6 +255,11 @@
     offset += uint64_t_size;
     uint64_t readTailGuid = ReadUint64(buffer.data(), offset);
     BOOST_CHECK(readTailGuid == tailGuid);
+
+    // Check the attribute GUID
+    offset += uint64_t_size;
+    uint64_t readAttributeGuid = ReadUint64(buffer.data(), offset);
+    BOOST_CHECK(readAttributeGuid == attributeGuid);
 }
 
 BOOST_AUTO_TEST_CASE(TimelineRelationshipPacketExecutionLinkTestDataConstruction)
@@ -254,17 +270,19 @@
     const uint64_t relationshipGuid = 123456u;
     const uint64_t headGuid = 234567u;
     const uint64_t tailGuid = 345678u;
+    const uint64_t attributeGuid = 876345u;
     unsigned int numberOfBytesWritten = 789u;
     TimelinePacketStatus result =
                              WriteTimelineRelationshipBinary(relationshipType,
                                                              relationshipGuid,
                                                              headGuid,
                                                              tailGuid,
+                                                             attributeGuid,
                                                              buffer.data(),
                                                              boost::numeric_cast<unsigned int>(buffer.size()),
                                                              numberOfBytesWritten);
     BOOST_CHECK(result == TimelinePacketStatus::Ok);
-    BOOST_CHECK(numberOfBytesWritten == 32);
+    BOOST_CHECK(numberOfBytesWritten == 40);
 
     unsigned int uint32_t_size = sizeof(uint32_t);
     unsigned int uint64_t_size = sizeof(uint64_t);
@@ -292,6 +310,11 @@
     offset += uint64_t_size;
     uint64_t readTailGuid = ReadUint64(buffer.data(), offset);
     BOOST_CHECK(readTailGuid == tailGuid);
+
+    // Check the attribute GUID
+    offset += uint64_t_size;
+    uint64_t readAttributeGuid = ReadUint64(buffer.data(), offset);
+    BOOST_CHECK(readAttributeGuid == attributeGuid);
 }
 
 
@@ -303,17 +326,19 @@
     const uint64_t relationshipGuid = 123456u;
     const uint64_t headGuid = 234567u;
     const uint64_t tailGuid = 345678u;
+    const uint64_t attributeGuid = 876345u;
     unsigned int numberOfBytesWritten = 789u;
     TimelinePacketStatus result =
                              WriteTimelineRelationshipBinary(relationshipType,
                                                              relationshipGuid,
                                                              headGuid,
                                                              tailGuid,
+                                                             attributeGuid,
                                                              buffer.data(),
                                                              boost::numeric_cast<unsigned int>(buffer.size()),
                                                              numberOfBytesWritten);
     BOOST_CHECK(result == TimelinePacketStatus::Ok);
-    BOOST_CHECK(numberOfBytesWritten == 32);
+    BOOST_CHECK(numberOfBytesWritten == 40);
 
     unsigned int uint32_t_size = sizeof(uint32_t);
     unsigned int uint64_t_size = sizeof(uint64_t);
@@ -341,6 +366,11 @@
     offset += uint64_t_size;
     uint64_t readTailGuid = ReadUint64(buffer.data(), offset);
     BOOST_CHECK(readTailGuid == tailGuid);
+
+    // Check the attribute GUID
+    offset += uint64_t_size;
+    uint64_t readAttributeGuid = ReadUint64(buffer.data(), offset);
+    BOOST_CHECK(readAttributeGuid == attributeGuid);
 }
 
 
@@ -352,17 +382,19 @@
     const uint64_t relationshipGuid = 123456u;
     const uint64_t headGuid = 234567u;
     const uint64_t tailGuid = 345678u;
+    const uint64_t attributeGuid = 876345u;
     unsigned int numberOfBytesWritten = 789u;
     TimelinePacketStatus result =
                              WriteTimelineRelationshipBinary(relationshipType,
                                                              relationshipGuid,
                                                              headGuid,
                                                              tailGuid,
+                                                             attributeGuid,
                                                              buffer.data(),
                                                              boost::numeric_cast<unsigned int>(buffer.size()),
                                                              numberOfBytesWritten);
     BOOST_CHECK(result == TimelinePacketStatus::Ok);
-    BOOST_CHECK(numberOfBytesWritten == 32);
+    BOOST_CHECK(numberOfBytesWritten == 40);
 
     unsigned int uint32_t_size = sizeof(uint32_t);
     unsigned int uint64_t_size = sizeof(uint64_t);
@@ -391,6 +423,11 @@
     offset += uint64_t_size;
     uint64_t readTailGuid = ReadUint64(buffer.data(), offset);
     BOOST_CHECK(readTailGuid == tailGuid);
+
+    // Check the attribute GUID
+    offset += uint64_t_size;
+    uint64_t readAttributeGuid = ReadUint64(buffer.data(), offset);
+    BOOST_CHECK(readAttributeGuid == attributeGuid);
 }
 
 BOOST_AUTO_TEST_CASE(TimelineMessageDirectoryPacketTestNoBuffer)
diff --git a/src/profiling/test/TimelineUtilityMethodsTests.cpp b/src/profiling/test/TimelineUtilityMethodsTests.cpp
index 388d38a..8fd8c36 100644
--- a/src/profiling/test/TimelineUtilityMethodsTests.cpp
+++ b/src/profiling/test/TimelineUtilityMethodsTests.cpp
@@ -44,7 +44,7 @@
     auto readableBuffer = mockBufferManager.GetReadableBuffer();
     BOOST_CHECK(readableBuffer != nullptr);
     unsigned int size = readableBuffer->GetSize();
-    BOOST_CHECK(size == 100);
+    BOOST_CHECK(size == 76);
     const unsigned char* readableData = readableBuffer->GetReadableData();
     BOOST_CHECK(readableData != nullptr);
 
@@ -52,7 +52,7 @@
     unsigned int offset = 0;
 
     // Verify Header
-    VerifyTimelineHeaderBinary(readableData, offset, 92);
+    VerifyTimelineHeaderBinary(readableData, offset, 68);
 
     // First dataset sent: TimelineLabelBinaryPacket
     VerifyTimelineLabelBinaryPacketData(EmptyOptional(), entityName, readableData, offset);
@@ -62,13 +62,6 @@
                                                EmptyOptional(),
                                                entityGuid,
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Third dataset sent: TimelineRelationshipBinaryPacket
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                labelTypeGuid,
                                                readableData,
                                                offset);
@@ -210,7 +203,7 @@
     auto readableBuffer = mockBufferManager.GetReadableBuffer();
     BOOST_CHECK(readableBuffer != nullptr);
     unsigned int size = readableBuffer->GetSize();
-    BOOST_CHECK(size == 236);
+    BOOST_CHECK(size == 196);
     const unsigned char* readableData = readableBuffer->GetReadableData();
     BOOST_CHECK(readableData != nullptr);
 
@@ -218,7 +211,7 @@
     unsigned int offset = 0;
 
     // Verify Header
-    VerifyTimelineHeaderBinary(readableData, offset, 228);
+    VerifyTimelineHeaderBinary(readableData, offset, 188);
 
     // First dataset sent: TimelineEntityBinaryPacket
     VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
@@ -231,13 +224,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Fourth dataset sent: TimelineRelationshipBinaryPacket
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::NAME_GUID,
                                                readableData,
                                                offset);
@@ -250,22 +236,17 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Seventh dataset sent: TimelineRelationshipBinaryPacket
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
 
+
     // Eighth dataset sent: TimelineRelationshipBinaryPacket
     VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
                                                EmptyOptional(),
                                                parentEntityGuid,
                                                EmptyOptional(),
+                                               EmptyOptional(),
                                                readableData,
                                                offset);
 
@@ -350,7 +331,7 @@
     auto readableBuffer = mockBufferManager.GetReadableBuffer();
     BOOST_CHECK(readableBuffer != nullptr);
     unsigned int size = readableBuffer->GetSize();
-    BOOST_CHECK(size == 196);
+    BOOST_CHECK(size == 148);
     const unsigned char* readableData = readableBuffer->GetReadableData();
     BOOST_CHECK(readableData != nullptr);
 
@@ -358,7 +339,7 @@
     unsigned int offset = 0;
 
     // Verify Header
-    VerifyTimelineHeaderBinary(readableData, offset, 188);
+    VerifyTimelineHeaderBinary(readableData, offset, 140);
 
     // First dataset sent: TimelineEntityBinaryPacket
     VerifyTimelineEntityBinaryPacketData(guid, readableData, offset);
@@ -372,13 +353,6 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Third dataset sent: TimelineRelationshipBinaryPacket
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::NAME_GUID,
                                                readableData,
                                                offset);
@@ -392,17 +366,11 @@
                                                EmptyOptional(),
                                                EmptyOptional(),
                                                EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Third dataset sent: TimelineRelationshipBinaryPacket
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
-                                               EmptyOptional(),
-                                               EmptyOptional(),
                                                LabelsAndEventClasses::TYPE_GUID,
                                                readableData,
                                                offset);
 
+
     // Mark the buffer as read
     mockBufferManager.MarkRead(readableBuffer);
 }
@@ -430,7 +398,7 @@
     BOOST_CHECK(readableBuffer != nullptr);
     unsigned int size = readableBuffer->GetSize();
 
-    BOOST_CHECK(size == 92 + ThreadIdSize);
+    BOOST_CHECK(size == 68 + ThreadIdSize);
 
     const unsigned char* readableData = readableBuffer->GetReadableData();
     BOOST_CHECK(readableData != nullptr);
@@ -439,7 +407,7 @@
     unsigned int offset = 0;
 
     // Verify Header
-    VerifyTimelineHeaderBinary(readableData, offset, 84 + ThreadIdSize);
+    VerifyTimelineHeaderBinary(readableData, offset, 60 + ThreadIdSize);
 
     // First dataset sent: TimelineEntityBinaryPacket
     VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
@@ -448,13 +416,6 @@
     VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
                                                EmptyOptional(),
                                                entityGuid,
-                                               EmptyOptional(),
-                                               readableData,
-                                               offset);
-
-    // Third dataset sent: TimelineRelationshipBinaryPacket
-    VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
-                                               EmptyOptional(),
                                                eventGuid,
                                                eventClassGuid,
                                                readableData,
diff --git a/src/timelineDecoder/TimelineCaptureCommandHandler.cpp b/src/timelineDecoder/TimelineCaptureCommandHandler.cpp
index 58edd9f..6938911 100644
--- a/src/timelineDecoder/TimelineCaptureCommandHandler.cpp
+++ b/src/timelineDecoder/TimelineCaptureCommandHandler.cpp
@@ -107,6 +107,10 @@
 
     relationship.m_TailGuid = profiling::ReadUint64(data, offset);
     offset += uint64_t_size;
+
+    relationship.m_AttributeGuid = profiling::ReadUint64(data, offset);
+    offset += uint64_t_size;
+
     m_TimelineDecoder.CreateRelationship(relationship);
 }
 
diff --git a/src/timelineDecoder/tests/TimelineTests.cpp b/src/timelineDecoder/tests/TimelineTests.cpp
index bff2536..390b589 100644
--- a/src/timelineDecoder/tests/TimelineTests.cpp
+++ b/src/timelineDecoder/tests/TimelineTests.cpp
@@ -227,7 +227,8 @@
         sendTimelinePacket->SendTimelineRelationshipBinaryPacket(relationshipType,
                                                                  relationshipGuid,
                                                                  headGuid,
-                                                                 tailGuid);
+                                                                 tailGuid,
+                                                                 0);
         sendTimelinePacket->Commit();
         SendTimelinePacketToCommandHandler(bufferManager.GetReadableBuffer()->GetReadableData(),
                                            timelineCaptureCommandHandler);
@@ -327,7 +328,8 @@
         sendTimelinePacket->SendTimelineRelationshipBinaryPacket(relationshipType,
                                                                  relationshipGuid,
                                                                  headGuid,
-                                                                 tailGuid);
+                                                                 tailGuid,
+                                                                 0);
     }
 
     sendTimelinePacket->Commit();
diff --git a/tests/profiling/gatordmock/tests/GatordMockTests.cpp b/tests/profiling/gatordmock/tests/GatordMockTests.cpp
index 0170962..38c04ed 100644
--- a/tests/profiling/gatordmock/tests/GatordMockTests.cpp
+++ b/tests/profiling/gatordmock/tests/GatordMockTests.cpp
@@ -471,7 +471,7 @@
     BOOST_CHECK(timelineDecoder.GetModel().m_Entities.size() == 6);
     BOOST_CHECK(timelineDecoder.GetModel().m_EventClasses.size()  == 4);
     BOOST_CHECK(timelineDecoder.GetModel().m_Labels.size()  == 24);
-    BOOST_CHECK(timelineDecoder.GetModel().m_Relationships.size()  == 28);
+    BOOST_CHECK(timelineDecoder.GetModel().m_Relationships.size()  == 17);
     BOOST_CHECK(timelineDecoder.GetModel().m_Events.size()  == 0);
 
     mockService.WaitForReceivingThread();