blob: c51cfd32cd04743b1b4f3c5052c187fc1127679c [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
Jim Flynnbbfe6032020-07-20 16:57:44 +01008#include "ITimelineDecoder.hpp"
Finn Williams8a2b4682020-02-26 10:25:26 +00009
Jim Flynnbbfe6032020-07-20 16:57:44 +010010#include <common/include/CommandHandlerFunctor.hpp>
11#include <common/include/Packet.hpp>
Finn Williamse63a0262019-10-22 10:30:49 +010012
Jim Flynnbbfe6032020-07-20 16:57:44 +010013namespace arm
Finn Williamse63a0262019-10-22 10:30:49 +010014{
15
Jim Flynnbbfe6032020-07-20 16:57:44 +010016namespace pipe
Finn Williamse63a0262019-10-22 10:30:49 +010017{
18
Jim Flynnbbfe6032020-07-20 16:57:44 +010019class TimelineCaptureCommandHandler : public arm::pipe::CommandHandlerFunctor
Finn Williamse63a0262019-10-22 10:30:49 +010020{
21 // Utils
22 uint32_t uint32_t_size = sizeof(uint32_t);
23 uint32_t uint64_t_size = sizeof(uint64_t);
Finn Williamse63a0262019-10-22 10:30:49 +010024
Jim Flynnaa2eb742020-06-26 13:52:38 +010025 using ReadFunction = ITimelineDecoder::TimelineStatus (TimelineCaptureCommandHandler::*)(
26 const unsigned char*, uint32_t&);
Finn Williamse63a0262019-10-22 10:30:49 +010027
28public:
29 TimelineCaptureCommandHandler(uint32_t familyId,
30 uint32_t packetId,
31 uint32_t version,
Finn Williams510f6182020-02-21 11:14:08 +000032 ITimelineDecoder& timelineDecoder,
Finn Williamse6a2ccd2020-02-27 16:21:41 +000033 uint32_t threadIdSize = 0)
34 : CommandHandlerFunctor(familyId, packetId, version)
35 , m_TimelineDecoder(timelineDecoder)
36 , m_ThreadIdSize(threadIdSize)
37 , m_PacketLength(0)
Finn Williamse63a0262019-10-22 10:30:49 +010038 {}
39
Jim Flynnbbfe6032020-07-20 16:57:44 +010040 void operator()(const arm::pipe::Packet& packet) override;
Finn Williamse63a0262019-10-22 10:30:49 +010041
Finn Williamse63a0262019-10-22 10:30:49 +010042
Finn Williamse6a2ccd2020-02-27 16:21:41 +000043 void SetThreadIdSize(uint32_t size);
44
Finn Williamse63a0262019-10-22 10:30:49 +010045private:
Jim Flynnbbfe6032020-07-20 16:57:44 +010046 void ParseData(const arm::pipe::Packet& packet);
Finn Williamse63a0262019-10-22 10:30:49 +010047
Jim Flynnaa2eb742020-06-26 13:52:38 +010048 ITimelineDecoder::TimelineStatus ReadLabel(const unsigned char* data, uint32_t& offset);
49 ITimelineDecoder::TimelineStatus ReadEntity(const unsigned char* data, uint32_t& offset);
50 ITimelineDecoder::TimelineStatus ReadEventClass(const unsigned char* data, uint32_t& offset);
51 ITimelineDecoder::TimelineStatus ReadRelationship(const unsigned char* data, uint32_t& offset);
52 ITimelineDecoder::TimelineStatus ReadEvent(const unsigned char* data, uint32_t& offset);
53
Finn Williams510f6182020-02-21 11:14:08 +000054 ITimelineDecoder& m_TimelineDecoder;
Finn Williamse6a2ccd2020-02-27 16:21:41 +000055 uint32_t m_ThreadIdSize;
Keith Davis5238aff2020-03-11 12:17:05 +000056 unsigned int m_PacketLength;
Finn Williamse63a0262019-10-22 10:30:49 +010057 static const ReadFunction m_ReadFunctions[];
Keith Davis5238aff2020-03-11 12:17:05 +000058
Finn Williamse63a0262019-10-22 10:30:49 +010059};
60
Jim Flynnbbfe6032020-07-20 16:57:44 +010061} //namespace pipe
Finn Williamse63a0262019-10-22 10:30:49 +010062
Jim Flynnbbfe6032020-07-20 16:57:44 +010063} //namespace arm