blob: 7d70a483661a488391c5c57442122569e1bbfeb9 [file] [log] [blame]
Nikhil Rajbc626052019-08-15 15:49:45 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5#pragma once
6
Aron Virginas-Tare898db92019-08-22 12:56:34 +01007#include <armnn/Exceptions.hpp>
Nikhil Rajbc626052019-08-15 15:49:45 +01008
9#include <boost/log/trivial.hpp>
10
Aron Virginas-Tare898db92019-08-22 12:56:34 +010011namespace armnn
12{
13
14namespace profiling
15{
Nikhil Rajbc626052019-08-15 15:49:45 +010016
17class Packet
18{
19public:
Matteo Martincigh24e8f922019-09-19 11:57:46 +010020 Packet()
21 : m_Header(0)
22 , m_Length(0)
23 , m_Data(nullptr)
24 {}
25
FinnWilliamsArma0c78712019-09-16 12:06:47 +010026 Packet(uint32_t header, uint32_t length, std::unique_ptr<char[]>& data)
Matteo Martincigh24e8f922019-09-19 11:57:46 +010027 : m_Header(header)
28 , m_Length(length)
29 , m_Data(std::move(data))
Matteo Martincigh149528e2019-09-05 12:02:04 +010030 {
31 m_PacketId = ((header >> 16) & 1023);
32 m_PacketFamily = (header >> 26);
Nikhil Rajbc626052019-08-15 15:49:45 +010033
Matteo Martincigh149528e2019-09-05 12:02:04 +010034 if (length == 0 && m_Data != nullptr)
35 {
36 throw armnn::InvalidArgumentException("Data should be null when length is zero");
37 }
38 }
Nikhil Rajbc626052019-08-15 15:49:45 +010039
FinnWilliamsArma0c78712019-09-16 12:06:47 +010040 Packet(Packet&& other) :
41 m_Header(other.m_Header),
42 m_PacketFamily(other.m_PacketFamily),
43 m_PacketId(other.m_PacketId),
44 m_Length(other.m_Length),
Matteo Martincigh24e8f922019-09-19 11:57:46 +010045 m_Data(std::move(other.m_Data))
46 {}
FinnWilliamsArma0c78712019-09-16 12:06:47 +010047
48 Packet(const Packet& other) = delete;
49 Packet& operator=(const Packet&) = delete;
50
Nikhil Rajbc626052019-08-15 15:49:45 +010051 uint32_t GetHeader() const;
52 uint32_t GetPacketFamily() const;
53 uint32_t GetPacketId() const;
54 uint32_t GetLength() const;
FinnWilliamsArma0c78712019-09-16 12:06:47 +010055 const char* const GetData() const;
Nikhil Rajbc626052019-08-15 15:49:45 +010056
57 uint32_t GetPacketClass() const;
58 uint32_t GetPacketType() const;
59
Matteo Martincigh24e8f922019-09-19 11:57:46 +010060 bool IsEmpty() { return m_Header == 0 && m_Length == 0; }
61
Nikhil Rajbc626052019-08-15 15:49:45 +010062private:
63 uint32_t m_Header;
64 uint32_t m_PacketFamily;
65 uint32_t m_PacketId;
66 uint32_t m_Length;
FinnWilliamsArma0c78712019-09-16 12:06:47 +010067 std::unique_ptr<char[]> m_Data;
Aron Virginas-Tare898db92019-08-22 12:56:34 +010068};
69
70} // namespace profiling
71
72} // namespace armnn