ArmNN
 21.02
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 
9 #include <server/include/timelineDecoder/ITimelineDecoder.hpp>
10 
11 #include "ProfilingUtils.hpp"
12 #include <server/include/timelineDecoder/TimelineCaptureCommandHandler.hpp>
13 #include <server/include/timelineDecoder/TimelineDirectoryCaptureCommandHandler.hpp>
14 #include "TimelineModel.hpp"
15 
16 #include <common/include/Packet.hpp>
17 
18 #include <condition_variable>
19 #include <map>
20 #include <mutex>
21 #include <vector>
22 
23 namespace armnn
24 {
25 
26 namespace profiling
27 {
28 
29 // forward declaration of class
30 class TestTimelinePacketHandler;
31 class TimelineMessageDecoder : public arm::pipe::ITimelineDecoder
32 {
33 public:
34  TimelineMessageDecoder(TimelineModel& model) : m_PacketHandler(nullptr), m_TimelineModel(model) {}
35  virtual TimelineStatus CreateEntity(const Entity&) override;
36  virtual TimelineStatus CreateEventClass(const EventClass&) override;
37  virtual TimelineStatus CreateEvent(const Event&) override;
38  virtual TimelineStatus CreateLabel(const Label&) override;
39  virtual TimelineStatus CreateRelationship(const Relationship&) override;
40  void SetPacketHandler(TestTimelinePacketHandler* packetHandler) {m_PacketHandler = packetHandler;};
41 private:
42  TestTimelinePacketHandler* m_PacketHandler;
43  TimelineModel& m_TimelineModel;
44 };
45 
47 {
48 public:
50  m_Connection(nullptr),
51  m_InferenceCompleted(false),
52  m_DirectoryHeader(CreateTimelinePacketHeader(1, 0, 0, 0, 0, 0).first),
53  m_MessageHeader(CreateTimelinePacketHeader(1, 0, 1, 0, 0, 0).first),
54  m_MessageDecoder(m_TimelineModel),
55  m_Decoder(1, 1, 0, m_MessageDecoder),
56  m_DirectoryDecoder(1, 0, 0, m_Decoder, true)
57  { m_MessageDecoder.SetPacketHandler(this); }
58 
59  virtual std::vector<uint32_t> GetHeadersAccepted() override; // ILocalPacketHandler
60 
61  virtual void HandlePacket(const arm::pipe::Packet& packet) override; // ILocalPacketHandler
62 
63  void Stop();
64 
65  void WaitOnInferenceCompletion(unsigned int timeout);
66  void SetInferenceComplete();
67 
68  const TimelineModel& GetTimelineModel() const {return m_TimelineModel;}
69 
70  virtual void SetConnection(IInternalProfilingConnection* profilingConnection) override // ILocalPacketHandler
71  {
72  m_Connection = profilingConnection;
73  }
74 
75 private:
76  void ProcessDirectoryPacket(const arm::pipe::Packet& packet);
77  void ProcessMessagePacket(const arm::pipe::Packet& packet);
78  IInternalProfilingConnection* m_Connection;
79  std::mutex m_InferenceCompletedMutex;
80  std::condition_variable m_InferenceCompletedConditionVariable;
81  bool m_InferenceCompleted;
82  TimelineModel m_TimelineModel;
83  uint32_t m_DirectoryHeader;
84  uint32_t m_MessageHeader;
85  TimelineMessageDecoder m_MessageDecoder;
86  arm::pipe::TimelineCaptureCommandHandler m_Decoder;
87  arm::pipe::TimelineDirectoryCaptureCommandHandler m_DirectoryDecoder;
88 };
89 
90 } // namespace profiling
91 
92 } // namespace armnn
Event class records measurements reported by BeginEvent()/EndEvent() and returns measurements when Ev...
DataLayout::NCHW false
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.
Copyright (c) 2021 ARM Limited and Contributors.
virtual void SetConnection(IInternalProfilingConnection *profilingConnection) override
Set a profiling connection on the handler.
virtual TimelineStatus CreateLabel(const Label &) override
virtual TimelineStatus CreateEventClass(const EventClass &) override
virtual TimelineStatus CreateEvent(const Event &) override
virtual TimelineStatus CreateRelationship(const Relationship &) override
DataLayout::NCHW DataLayout::NCHW DataLayout::NHWC DataLayout::NHWC true
virtual TimelineStatus CreateEntity(const Entity &) override
void SetPacketHandler(TestTimelinePacketHandler *packetHandler)