xref: /aosp_15_r20/external/armnn/profiling/client/include/ILocalPacketHandler.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2020 Arm Ltd. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker 
6*89c4ff92SAndroid Build Coastguard Worker #pragma once
7*89c4ff92SAndroid Build Coastguard Worker 
8*89c4ff92SAndroid Build Coastguard Worker 
9*89c4ff92SAndroid Build Coastguard Worker #include <common/include/IgnoreUnused.hpp>
10*89c4ff92SAndroid Build Coastguard Worker #include <common/include/TargetEndianess.hpp>
11*89c4ff92SAndroid Build Coastguard Worker 
12*89c4ff92SAndroid Build Coastguard Worker #include <cstdint>
13*89c4ff92SAndroid Build Coastguard Worker #include <memory>
14*89c4ff92SAndroid Build Coastguard Worker #include <vector>
15*89c4ff92SAndroid Build Coastguard Worker 
16*89c4ff92SAndroid Build Coastguard Worker // forward declare to prevent a circular dependency
17*89c4ff92SAndroid Build Coastguard Worker namespace arm
18*89c4ff92SAndroid Build Coastguard Worker {
19*89c4ff92SAndroid Build Coastguard Worker namespace pipe
20*89c4ff92SAndroid Build Coastguard Worker {
21*89c4ff92SAndroid Build Coastguard Worker 
22*89c4ff92SAndroid Build Coastguard Worker class Packet;
23*89c4ff92SAndroid Build Coastguard Worker 
24*89c4ff92SAndroid Build Coastguard Worker // the handlers need to be able to do two
25*89c4ff92SAndroid Build Coastguard Worker // things to service the FileOnlyProfilingConnection
26*89c4ff92SAndroid Build Coastguard Worker // and any other implementation of IProfilingConnection
27*89c4ff92SAndroid Build Coastguard Worker // set the endianness and write a packet back i.e.
28*89c4ff92SAndroid Build Coastguard Worker // return a packet and close the connection
29*89c4ff92SAndroid Build Coastguard Worker class IInternalProfilingConnection
30*89c4ff92SAndroid Build Coastguard Worker {
31*89c4ff92SAndroid Build Coastguard Worker public:
~IInternalProfilingConnection()32*89c4ff92SAndroid Build Coastguard Worker     virtual ~IInternalProfilingConnection() {};
33*89c4ff92SAndroid Build Coastguard Worker 
34*89c4ff92SAndroid Build Coastguard Worker     virtual void SetEndianess(const TargetEndianness& endianness) = 0;
35*89c4ff92SAndroid Build Coastguard Worker 
36*89c4ff92SAndroid Build Coastguard Worker     virtual void ReturnPacket(Packet& packet) = 0;
37*89c4ff92SAndroid Build Coastguard Worker 
38*89c4ff92SAndroid Build Coastguard Worker     virtual void Close() = 0;
39*89c4ff92SAndroid Build Coastguard Worker };
40*89c4ff92SAndroid Build Coastguard Worker 
41*89c4ff92SAndroid Build Coastguard Worker class ILocalPacketHandler
42*89c4ff92SAndroid Build Coastguard Worker {
43*89c4ff92SAndroid Build Coastguard Worker public:
~ILocalPacketHandler()44*89c4ff92SAndroid Build Coastguard Worker     virtual ~ILocalPacketHandler() {};
45*89c4ff92SAndroid Build Coastguard Worker 
46*89c4ff92SAndroid Build Coastguard Worker     /// @return lists the headers of the packets that this handler accepts
47*89c4ff92SAndroid Build Coastguard Worker     ///         only these packets will get sent to this handler.
48*89c4ff92SAndroid Build Coastguard Worker     ///         If this function returns an empty list then ALL packets
49*89c4ff92SAndroid Build Coastguard Worker     ///         will be sent to the PacketHandler i.e. a universal handler.
50*89c4ff92SAndroid Build Coastguard Worker     virtual std::vector<uint32_t> GetHeadersAccepted() = 0;
51*89c4ff92SAndroid Build Coastguard Worker 
52*89c4ff92SAndroid Build Coastguard Worker     /// process the packet
53*89c4ff92SAndroid Build Coastguard Worker     virtual void HandlePacket(const Packet& packet) = 0;
54*89c4ff92SAndroid Build Coastguard Worker 
55*89c4ff92SAndroid Build Coastguard Worker     /// Set a profiling connection on the handler. Only need to implement this
56*89c4ff92SAndroid Build Coastguard Worker     /// function if the handler will be writing data back to the profiled application.
SetConnection(IInternalProfilingConnection * profilingConnection)57*89c4ff92SAndroid Build Coastguard Worker     virtual void SetConnection(IInternalProfilingConnection* profilingConnection)
58*89c4ff92SAndroid Build Coastguard Worker     {
59*89c4ff92SAndroid Build Coastguard Worker         arm::pipe::IgnoreUnused(profilingConnection);
60*89c4ff92SAndroid Build Coastguard Worker     }
61*89c4ff92SAndroid Build Coastguard Worker };
62*89c4ff92SAndroid Build Coastguard Worker 
63*89c4ff92SAndroid Build Coastguard Worker using ILocalPacketHandlerPtr = std::unique_ptr<ILocalPacketHandler>;
64*89c4ff92SAndroid Build Coastguard Worker using ILocalPacketHandlerSharedPtr = std::shared_ptr<ILocalPacketHandler>;
65*89c4ff92SAndroid Build Coastguard Worker 
66*89c4ff92SAndroid Build Coastguard Worker } // namespace pipe
67*89c4ff92SAndroid Build Coastguard Worker 
68*89c4ff92SAndroid Build Coastguard Worker } // namespace arm
69