blob: fbed2287b1ed14f9c689990db020d8d09bd642f2 [file] [log] [blame]
Jim Flynn4e755a52020-03-29 17:48:26 +01001//
Jim Flynn6398a982020-05-27 17:05:21 +01002// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
Jim Flynn4e755a52020-03-29 17:48:26 +01003// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
Jim Flynn4e755a52020-03-29 17:48:26 +01008#include "TimelineModel.hpp"
9
Jim Flynn27761832022-03-20 21:52:17 +000010#include <client/include/ILocalPacketHandler.hpp>
11
Jim Flynn3e9bc192022-03-23 23:01:26 +000012#include <client/src/ProfilingUtils.hpp>
13
Jim Flynnbbfe6032020-07-20 16:57:44 +010014#include <common/include/Packet.hpp>
15
Jim Flynn27761832022-03-20 21:52:17 +000016#include <server/include/timelineDecoder/ITimelineDecoder.hpp>
17#include <server/include/timelineDecoder/TimelineCaptureCommandHandler.hpp>
18#include <server/include/timelineDecoder/TimelineDirectoryCaptureCommandHandler.hpp>
19
Jim Flynn4e755a52020-03-29 17:48:26 +010020#include <condition_variable>
21#include <map>
22#include <mutex>
23#include <vector>
24
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000025namespace arm
Jim Flynn4e755a52020-03-29 17:48:26 +010026{
27
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000028namespace pipe
Jim Flynn4e755a52020-03-29 17:48:26 +010029{
30
31// forward declaration of class
32class TestTimelinePacketHandler;
Jim Flynnbbfe6032020-07-20 16:57:44 +010033class TimelineMessageDecoder : public arm::pipe::ITimelineDecoder
Jim Flynn4e755a52020-03-29 17:48:26 +010034{
35public:
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;};
43private:
44 TestTimelinePacketHandler* m_PacketHandler;
45 TimelineModel& m_TimelineModel;
46};
47
48class TestTimelinePacketHandler : public ILocalPacketHandler
49{
50public:
51 TestTimelinePacketHandler() :
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
Jim Flynnbbfe6032020-07-20 16:57:44 +010063 virtual void HandlePacket(const arm::pipe::Packet& packet) override; // ILocalPacketHandler
Jim Flynn4e755a52020-03-29 17:48:26 +010064
65 void Stop();
66
67 void WaitOnInferenceCompletion(unsigned int timeout);
68 void SetInferenceComplete();
69
70 const TimelineModel& GetTimelineModel() const {return m_TimelineModel;}
71
Jim Flynn01d02812020-04-29 21:12:13 +010072 virtual void SetConnection(IInternalProfilingConnection* profilingConnection) override // ILocalPacketHandler
Jim Flynn4e755a52020-03-29 17:48:26 +010073 {
74 m_Connection = profilingConnection;
75 }
76
77private:
Jim Flynnbbfe6032020-07-20 16:57:44 +010078 void ProcessDirectoryPacket(const arm::pipe::Packet& packet);
79 void ProcessMessagePacket(const arm::pipe::Packet& packet);
Jim Flynn01d02812020-04-29 21:12:13 +010080 IInternalProfilingConnection* m_Connection;
Jim Flynn4e755a52020-03-29 17:48:26 +010081 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;
Jim Flynnbbfe6032020-07-20 16:57:44 +010088 arm::pipe::TimelineCaptureCommandHandler m_Decoder;
89 arm::pipe::TimelineDirectoryCaptureCommandHandler m_DirectoryDecoder;
Jim Flynn4e755a52020-03-29 17:48:26 +010090};
91
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000092} // namespace pipe
Jim Flynn4e755a52020-03-29 17:48:26 +010093
Jim Flynn27761832022-03-20 21:52:17 +000094} // namespace arm