ArmNN
 22.08
TestTimelinePacketHandler.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 #include "TimelineModel.hpp"
9 
10 #include <client/include/ILocalPacketHandler.hpp>
11 
12 #include <client/src/ProfilingUtils.hpp>
13 
14 #include <common/include/Packet.hpp>
15 
16 #include <server/include/timelineDecoder/ITimelineDecoder.hpp>
17 #include <server/include/timelineDecoder/TimelineCaptureCommandHandler.hpp>
18 #include <server/include/timelineDecoder/TimelineDirectoryCaptureCommandHandler.hpp>
19 
20 #include <condition_variable>
21 #include <map>
22 #include <mutex>
23 #include <vector>
24 
25 namespace arm
26 {
27 
28 namespace pipe
29 {
30 
31 // forward declaration of class
32 class TestTimelinePacketHandler;
33 class TimelineMessageDecoder : public arm::pipe::ITimelineDecoder
34 {
35 public:
36  TimelineMessageDecoder(TimelineModel& model) : m_PacketHandler(nullptr), m_TimelineModel(model) {}
37  virtual TimelineStatus CreateEntity(const Entity&) override;
38  virtual TimelineStatus CreateEventClass(const EventClass&) override;
39  virtual TimelineStatus CreateEvent(const Event&) override;
40  virtual TimelineStatus CreateLabel(const Label&) override;
41  virtual TimelineStatus CreateRelationship(const Relationship&) override;
42  void SetPacketHandler(TestTimelinePacketHandler* packetHandler) {m_PacketHandler = packetHandler;};
43 private:
44  TestTimelinePacketHandler* m_PacketHandler;
45  TimelineModel& m_TimelineModel;
46 };
47 
48 class TestTimelinePacketHandler : public ILocalPacketHandler
49 {
50 public:
52  m_Connection(nullptr),
53  m_InferenceCompleted(false),
54  m_DirectoryHeader(CreateTimelinePacketHeader(1, 0, 0, 0, 0, 0).first),
55  m_MessageHeader(CreateTimelinePacketHeader(1, 0, 1, 0, 0, 0).first),
56  m_MessageDecoder(m_TimelineModel),
57  m_Decoder(1, 1, 0, m_MessageDecoder),
58  m_DirectoryDecoder(1, 0, 0, m_Decoder, true)
59  { m_MessageDecoder.SetPacketHandler(this); }
60 
61  virtual std::vector<uint32_t> GetHeadersAccepted() override; // ILocalPacketHandler
62 
63  virtual void HandlePacket(const arm::pipe::Packet& packet) override; // ILocalPacketHandler
64 
65  void Stop();
66 
67  void WaitOnInferenceCompletion(unsigned int timeout);
68  void SetInferenceComplete();
69 
70  const TimelineModel& GetTimelineModel() const {return m_TimelineModel;}
71 
72  virtual void SetConnection(IInternalProfilingConnection* profilingConnection) override // ILocalPacketHandler
73  {
74  m_Connection = profilingConnection;
75  }
76 
77 private:
78  void ProcessDirectoryPacket(const arm::pipe::Packet& packet);
79  void ProcessMessagePacket(const arm::pipe::Packet& packet);
80  IInternalProfilingConnection* m_Connection;
81  std::mutex m_InferenceCompletedMutex;
82  std::condition_variable m_InferenceCompletedConditionVariable;
83  bool m_InferenceCompleted;
84  TimelineModel m_TimelineModel;
85  uint32_t m_DirectoryHeader;
86  uint32_t m_MessageHeader;
87  TimelineMessageDecoder m_MessageDecoder;
88  arm::pipe::TimelineCaptureCommandHandler m_Decoder;
89  arm::pipe::TimelineDirectoryCaptureCommandHandler m_DirectoryDecoder;
90 };
91 
92 } // namespace pipe
93 
94 } // namespace arm
virtual TimelineStatus CreateRelationship(const Relationship &) override
virtual void SetConnection(IInternalProfilingConnection *profilingConnection) override
virtual TimelineStatus CreateEventClass(const EventClass &) override
const TimelineModel & GetTimelineModel() const
virtual TimelineStatus CreateEntity(const Entity &) override
virtual TimelineStatus CreateLabel(const Label &) override
void SetPacketHandler(TestTimelinePacketHandler *packetHandler)
virtual TimelineStatus CreateEvent(const Event &) override