blob: bc0461f1c221052fa756524ec161c7404c044345 [file] [log] [blame]
FinnWilliamsArm4833cea2019-09-17 16:53:53 +01001//
Jim Flynnbbfe6032020-07-20 16:57:44 +01002// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
FinnWilliamsArm4833cea2019-09-17 16:53:53 +01003// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
FinnWilliamsArm4833cea2019-09-17 16:53:53 +01008#include "IProfilingConnection.hpp"
Jim Flynnbbfe6032020-07-20 16:57:44 +01009#include <common/include/PacketVersionResolver.hpp>
10
11#include <common/include/CommandHandlerRegistry.hpp>
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010012
13#include <atomic>
Jim Flynne195a042022-04-12 17:19:28 +010014#if !defined(ARMNN_DISABLE_THREADS)
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010015#include <thread>
Jim Flynne195a042022-04-12 17:19:28 +010016#endif
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010017
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000018namespace arm
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010019{
20
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000021namespace pipe
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010022{
23
Matteo Martincigh8a837172019-10-04 17:01:07 +010024class CommandHandler
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010025{
26public:
Matteo Martincigh8a837172019-10-04 17:01:07 +010027 CommandHandler(uint32_t timeout,
Keith Davis33ed2212020-03-30 10:43:41 +010028 bool stopAfterTimeout,
Jim Flynnbbfe6032020-07-20 16:57:44 +010029 arm::pipe::CommandHandlerRegistry& commandHandlerRegistry,
30 arm::pipe::PacketVersionResolver& packetVersionResolver)
Keith Davis33ed2212020-03-30 10:43:41 +010031 : m_Timeout(timeout),
32 m_StopAfterTimeout(stopAfterTimeout),
33 m_IsRunning(false),
34 m_KeepRunning(false),
Jim Flynne195a042022-04-12 17:19:28 +010035#if !defined(ARMNN_DISABLE_THREADS)
Keith Davis33ed2212020-03-30 10:43:41 +010036 m_CommandThread(),
Jim Flynne195a042022-04-12 17:19:28 +010037#endif
Keith Davis33ed2212020-03-30 10:43:41 +010038 m_CommandHandlerRegistry(commandHandlerRegistry),
39 m_PacketVersionResolver(packetVersionResolver)
Matteo Martincigh88813932019-10-04 14:40:04 +010040 {}
Matteo Martincigh8a837172019-10-04 17:01:07 +010041 ~CommandHandler() { Stop(); }
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010042
Matteo Martincighc2728f92019-10-07 12:35:21 +010043 void SetTimeout(uint32_t timeout) { m_Timeout.store(timeout); }
44 void SetStopAfterTimeout(bool stopAfterTimeout) { m_StopAfterTimeout.store(stopAfterTimeout); }
Matteo Martincigh8a837172019-10-04 17:01:07 +010045 void Start(IProfilingConnection& profilingConnection);
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010046 void Stop();
Matteo Martincighc2728f92019-10-07 12:35:21 +010047 bool IsRunning() const { return m_IsRunning.load(); }
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010048
49private:
Matteo Martincigh8a837172019-10-04 17:01:07 +010050 void HandleCommands(IProfilingConnection& profilingConnection);
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010051
Matteo Martincigh88813932019-10-04 14:40:04 +010052 std::atomic<uint32_t> m_Timeout;
Keith Davis33ed2212020-03-30 10:43:41 +010053 std::atomic<bool> m_StopAfterTimeout;
54 std::atomic<bool> m_IsRunning;
55 std::atomic<bool> m_KeepRunning;
Jim Flynne195a042022-04-12 17:19:28 +010056#if !defined(ARMNN_DISABLE_THREADS)
Keith Davis33ed2212020-03-30 10:43:41 +010057 std::thread m_CommandThread;
Jim Flynne195a042022-04-12 17:19:28 +010058#endif
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010059
Jim Flynnbbfe6032020-07-20 16:57:44 +010060 arm::pipe::CommandHandlerRegistry& m_CommandHandlerRegistry;
61 arm::pipe::PacketVersionResolver& m_PacketVersionResolver;
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010062};
63
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000064} // namespace pipe
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010065
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000066} // namespace arm