ArmNN
 20.05
TestTimelinePacketHandler.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2020 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
10 #include <Packet.hpp>
11 
12 #include "ProfilingUtils.hpp"
15 #include "TimelineModel.hpp"
16 
17 #include <condition_variable>
18 #include <map>
19 #include <mutex>
20 #include <vector>
21 
22 namespace armnn
23 {
24 
25 namespace profiling
26 {
27 
28 // forward declaration of class
29 class TestTimelinePacketHandler;
31 {
32 public:
33  TimelineMessageDecoder(TimelineModel& model) : m_PacketHandler(nullptr), m_TimelineModel(model) {}
34  virtual TimelineStatus CreateEntity(const Entity&) override;
35  virtual TimelineStatus CreateEventClass(const EventClass&) override;
36  virtual TimelineStatus CreateEvent(const Event&) override;
37  virtual TimelineStatus CreateLabel(const Label&) override;
38  virtual TimelineStatus CreateRelationship(const Relationship&) override;
39  void SetPacketHandler(TestTimelinePacketHandler* packetHandler) {m_PacketHandler = packetHandler;};
40 private:
41  TestTimelinePacketHandler* m_PacketHandler;
42  TimelineModel& m_TimelineModel;
43 };
44 
46 {
47 public:
49  m_Connection(nullptr),
50  m_InferenceCompleted(false),
51  m_DirectoryHeader(CreateTimelinePacketHeader(1, 0, 0, 0, 0, 0).first),
52  m_MessageHeader(CreateTimelinePacketHeader(1, 0, 1, 0, 0, 0).first),
53  m_MessageDecoder(m_TimelineModel),
54  m_Decoder(1, 1, 0, m_MessageDecoder),
55  m_DirectoryDecoder(1, 0, 0, m_Decoder, true)
56  { m_MessageDecoder.SetPacketHandler(this); }
57 
58  virtual std::vector<uint32_t> GetHeadersAccepted() override; // ILocalPacketHandler
59 
60  virtual void HandlePacket(const Packet& packet) override; // ILocalPacketHandler
61 
62  void Stop();
63 
64  void WaitOnInferenceCompletion(unsigned int timeout);
65  void SetInferenceComplete();
66 
67  const TimelineModel& GetTimelineModel() const {return m_TimelineModel;}
68 
69  virtual void SetConnection(IProfilingConnection* profilingConnection) override // ILocalPacketHandler
70  {
71  m_Connection = profilingConnection;
72  }
73 
74 private:
75  void ProcessDirectoryPacket(const Packet& packet);
76  void ProcessMessagePacket(const Packet& packet);
77  IProfilingConnection* m_Connection;
78  std::mutex m_InferenceCompletedMutex;
79  std::condition_variable m_InferenceCompletedConditionVariable;
80  bool m_InferenceCompleted;
81  TimelineModel m_TimelineModel;
82  uint32_t m_DirectoryHeader;
83  uint32_t m_MessageHeader;
84  TimelineMessageDecoder m_MessageDecoder;
87 };
88 
89 } // namespace profiling
90 
91 } // namespace armnn
DataLayout::NHWC false
virtual TimelineStatus CreateRelationship(const Relationship &) override
virtual TimelineStatus CreateEvent(const Event &) override
std::pair< uint32_t, uint32_t > CreateTimelinePacketHeader(uint32_t packetFamily, uint32_t packetClass, uint32_t packetType, uint32_t streamId, uint32_t sequenceNumbered, uint32_t dataLength)
Creates a timeline packet header.
virtual TimelineStatus CreateLabel(const Label &) override
Copyright (c) 2020 ARM Limited.
virtual TimelineStatus CreateEventClass(const EventClass &) override
virtual TimelineStatus CreateEntity(const Entity &) override
DataLayout::NCHW DataLayout::NCHW DataLayout::NHWC DataLayout::NHWC true
virtual void SetConnection(IProfilingConnection *profilingConnection) override
Set a profiling connection on the handler.
void SetPacketHandler(TestTimelinePacketHandler *packetHandler)