forked from Qortal/Brooklyn
64 lines
1.9 KiB
C++
64 lines
1.9 KiB
C++
//
|
|
// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
//
|
|
|
|
#pragma once
|
|
|
|
#include "ITimelineDecoder.hpp"
|
|
|
|
#include <common/include/CommandHandlerFunctor.hpp>
|
|
#include <common/include/Packet.hpp>
|
|
|
|
namespace arm
|
|
{
|
|
|
|
namespace pipe
|
|
{
|
|
|
|
class TimelineCaptureCommandHandler : public arm::pipe::CommandHandlerFunctor
|
|
{
|
|
// Utils
|
|
uint32_t uint32_t_size = sizeof(uint32_t);
|
|
uint32_t uint64_t_size = sizeof(uint64_t);
|
|
|
|
using ReadFunction = ITimelineDecoder::TimelineStatus (TimelineCaptureCommandHandler::*)(
|
|
const unsigned char*, uint32_t&);
|
|
|
|
public:
|
|
TimelineCaptureCommandHandler(uint32_t familyId,
|
|
uint32_t packetId,
|
|
uint32_t version,
|
|
ITimelineDecoder& timelineDecoder,
|
|
uint32_t threadIdSize = 0)
|
|
: CommandHandlerFunctor(familyId, packetId, version)
|
|
, m_TimelineDecoder(timelineDecoder)
|
|
, m_ThreadIdSize(threadIdSize)
|
|
, m_PacketLength(0)
|
|
{}
|
|
|
|
void operator()(const arm::pipe::Packet& packet) override;
|
|
|
|
|
|
void SetThreadIdSize(uint32_t size);
|
|
|
|
private:
|
|
void ParseData(const arm::pipe::Packet& packet);
|
|
|
|
ITimelineDecoder::TimelineStatus ReadLabel(const unsigned char* data, uint32_t& offset);
|
|
ITimelineDecoder::TimelineStatus ReadEntity(const unsigned char* data, uint32_t& offset);
|
|
ITimelineDecoder::TimelineStatus ReadEventClass(const unsigned char* data, uint32_t& offset);
|
|
ITimelineDecoder::TimelineStatus ReadRelationship(const unsigned char* data, uint32_t& offset);
|
|
ITimelineDecoder::TimelineStatus ReadEvent(const unsigned char* data, uint32_t& offset);
|
|
|
|
ITimelineDecoder& m_TimelineDecoder;
|
|
uint32_t m_ThreadIdSize;
|
|
unsigned int m_PacketLength;
|
|
static const ReadFunction m_ReadFunctions[];
|
|
|
|
};
|
|
|
|
} //namespace pipe
|
|
|
|
} //namespace arm
|