aboutsummaryrefslogtreecommitdiff
path: root/profiling/common/include/Packet.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'profiling/common/include/Packet.hpp')
-rw-r--r--profiling/common/include/Packet.hpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/profiling/common/include/Packet.hpp b/profiling/common/include/Packet.hpp
new file mode 100644
index 0000000000..c1f2796804
--- /dev/null
+++ b/profiling/common/include/Packet.hpp
@@ -0,0 +1,89 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <armnn/Exceptions.hpp>
+
+#include <memory>
+
+namespace armnn
+{
+
+namespace profiling
+{
+
+class Packet
+{
+public:
+ Packet()
+ : m_Header(0)
+ , m_Length(0)
+ , m_Data(nullptr)
+ {}
+
+ Packet(uint32_t header)
+ : m_Header(header)
+ , m_Length(0)
+ , m_Data(nullptr)
+ {
+ m_PacketId = ((header >> 16) & 1023);
+ m_PacketFamily = (header >> 26);
+ }
+
+ Packet(uint32_t header, uint32_t length, std::unique_ptr<unsigned char[]>& data)
+ : m_Header(header)
+ , m_Length(length)
+ , m_Data(std::move(data))
+ {
+ m_PacketId = ((header >> 16) & 1023);
+ m_PacketFamily = (header >> 26);
+
+ if (length == 0 && m_Data != nullptr)
+ {
+ throw armnn::InvalidArgumentException("Data should be null when length is zero");
+ }
+ }
+
+ Packet(Packet&& other)
+ : m_Header(other.m_Header)
+ , m_PacketFamily(other.m_PacketFamily)
+ , m_PacketId(other.m_PacketId)
+ , m_Length(other.m_Length)
+ , m_Data(std::move(other.m_Data))
+ {
+ other.m_Header = 0;
+ other.m_PacketFamily = 0;
+ other.m_PacketId = 0;
+ other.m_Length = 0;
+ }
+
+ ~Packet() = default;
+
+ Packet(const Packet& other) = delete;
+ Packet& operator=(const Packet&) = delete;
+ Packet& operator=(Packet&&) = default;
+
+ uint32_t GetHeader() const { return m_Header; }
+ uint32_t GetPacketFamily() const { return m_PacketFamily; }
+ uint32_t GetPacketId() const { return m_PacketId; }
+ uint32_t GetPacketClass() const { return m_PacketId >> 3; }
+ uint32_t GetPacketType() const { return m_PacketId & 7; }
+ uint32_t GetLength() const { return m_Length; }
+ const unsigned char* GetData() const { return m_Data.get(); }
+
+ bool IsEmpty() { return m_Header == 0 && m_Length == 0; }
+
+private:
+ uint32_t m_Header;
+ uint32_t m_PacketFamily;
+ uint32_t m_PacketId;
+ uint32_t m_Length;
+ std::unique_ptr<unsigned char[]> m_Data;
+};
+
+} // namespace profiling
+
+} // namespace armnn