blob: 0431e9ca496a8dd15dea12309b29c7b2ebbb0c56 [file] [log] [blame]
Finn Williamse63a0262019-10-22 10:30:49 +01001//
Jim Flynnaa2eb742020-06-26 13:52:38 +01002// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
Finn Williamse63a0262019-10-22 10:30:49 +01003// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
Finn Williams0c8cb992020-05-07 10:38:15 +01008#include <armnn/profiling/ITimelineDecoder.hpp>
Finn Williams8a2b4682020-02-26 10:25:26 +00009
Finn Williamse6a2ccd2020-02-27 16:21:41 +000010#include <CommandHandlerFunctor.hpp>
Finn Williamse63a0262019-10-22 10:30:49 +010011#include <Packet.hpp>
12#include <ProfilingUtils.hpp>
13
14namespace armnn
15{
16
Finn Williams8a2b4682020-02-26 10:25:26 +000017namespace timelinedecoder
Finn Williamse63a0262019-10-22 10:30:49 +010018{
19
Keith Davis5238aff2020-03-11 12:17:05 +000020class TimelineCaptureCommandHandler :
21 public profiling::CommandHandlerFunctor
Finn Williamse63a0262019-10-22 10:30:49 +010022{
23 // Utils
24 uint32_t uint32_t_size = sizeof(uint32_t);
25 uint32_t uint64_t_size = sizeof(uint64_t);
Finn Williamse63a0262019-10-22 10:30:49 +010026
Jim Flynnaa2eb742020-06-26 13:52:38 +010027 using ReadFunction = ITimelineDecoder::TimelineStatus (TimelineCaptureCommandHandler::*)(
28 const unsigned char*, uint32_t&);
Finn Williamse63a0262019-10-22 10:30:49 +010029
30public:
31 TimelineCaptureCommandHandler(uint32_t familyId,
32 uint32_t packetId,
33 uint32_t version,
Finn Williams510f6182020-02-21 11:14:08 +000034 ITimelineDecoder& timelineDecoder,
Finn Williamse6a2ccd2020-02-27 16:21:41 +000035 uint32_t threadIdSize = 0)
36 : CommandHandlerFunctor(familyId, packetId, version)
37 , m_TimelineDecoder(timelineDecoder)
38 , m_ThreadIdSize(threadIdSize)
39 , m_PacketLength(0)
Finn Williamse63a0262019-10-22 10:30:49 +010040 {}
41
42 void operator()(const armnn::profiling::Packet& packet) override;
43
Finn Williamse63a0262019-10-22 10:30:49 +010044
Finn Williamse6a2ccd2020-02-27 16:21:41 +000045 void SetThreadIdSize(uint32_t size);
46
Finn Williamse63a0262019-10-22 10:30:49 +010047private:
48 void ParseData(const armnn::profiling::Packet& packet);
49
Jim Flynnaa2eb742020-06-26 13:52:38 +010050 ITimelineDecoder::TimelineStatus ReadLabel(const unsigned char* data, uint32_t& offset);
51 ITimelineDecoder::TimelineStatus ReadEntity(const unsigned char* data, uint32_t& offset);
52 ITimelineDecoder::TimelineStatus ReadEventClass(const unsigned char* data, uint32_t& offset);
53 ITimelineDecoder::TimelineStatus ReadRelationship(const unsigned char* data, uint32_t& offset);
54 ITimelineDecoder::TimelineStatus ReadEvent(const unsigned char* data, uint32_t& offset);
55
Finn Williams510f6182020-02-21 11:14:08 +000056 ITimelineDecoder& m_TimelineDecoder;
Finn Williamse6a2ccd2020-02-27 16:21:41 +000057 uint32_t m_ThreadIdSize;
Keith Davis5238aff2020-03-11 12:17:05 +000058 unsigned int m_PacketLength;
Finn Williamse63a0262019-10-22 10:30:49 +010059 static const ReadFunction m_ReadFunctions[];
Keith Davis5238aff2020-03-11 12:17:05 +000060
Finn Williamse63a0262019-10-22 10:30:49 +010061};
62
63} //namespace gatordmock
64
65} //namespace armnn