blob: b2c9725a34d0711216cf78974f06bd0383de49c9 [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>
14#include <thread>
15
16namespace armnn
17{
18
19namespace profiling
20{
21
Matteo Martincigh8a837172019-10-04 17:01:07 +010022class CommandHandler
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010023{
24public:
Matteo Martincigh8a837172019-10-04 17:01:07 +010025 CommandHandler(uint32_t timeout,
Keith Davis33ed2212020-03-30 10:43:41 +010026 bool stopAfterTimeout,
Jim Flynnbbfe6032020-07-20 16:57:44 +010027 arm::pipe::CommandHandlerRegistry& commandHandlerRegistry,
28 arm::pipe::PacketVersionResolver& packetVersionResolver)
Keith Davis33ed2212020-03-30 10:43:41 +010029 : m_Timeout(timeout),
30 m_StopAfterTimeout(stopAfterTimeout),
31 m_IsRunning(false),
32 m_KeepRunning(false),
33 m_CommandThread(),
34 m_CommandHandlerRegistry(commandHandlerRegistry),
35 m_PacketVersionResolver(packetVersionResolver)
Matteo Martincigh88813932019-10-04 14:40:04 +010036 {}
Matteo Martincigh8a837172019-10-04 17:01:07 +010037 ~CommandHandler() { Stop(); }
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010038
Matteo Martincighc2728f92019-10-07 12:35:21 +010039 void SetTimeout(uint32_t timeout) { m_Timeout.store(timeout); }
40 void SetStopAfterTimeout(bool stopAfterTimeout) { m_StopAfterTimeout.store(stopAfterTimeout); }
41
Matteo Martincigh8a837172019-10-04 17:01:07 +010042 void Start(IProfilingConnection& profilingConnection);
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010043 void Stop();
Matteo Martincighc2728f92019-10-07 12:35:21 +010044 bool IsRunning() const { return m_IsRunning.load(); }
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010045
46private:
Matteo Martincigh8a837172019-10-04 17:01:07 +010047 void HandleCommands(IProfilingConnection& profilingConnection);
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010048
Matteo Martincigh88813932019-10-04 14:40:04 +010049 std::atomic<uint32_t> m_Timeout;
Keith Davis33ed2212020-03-30 10:43:41 +010050 std::atomic<bool> m_StopAfterTimeout;
51 std::atomic<bool> m_IsRunning;
52 std::atomic<bool> m_KeepRunning;
53 std::thread m_CommandThread;
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010054
Jim Flynnbbfe6032020-07-20 16:57:44 +010055 arm::pipe::CommandHandlerRegistry& m_CommandHandlerRegistry;
56 arm::pipe::PacketVersionResolver& m_PacketVersionResolver;
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010057};
58
Matteo Martincigh88813932019-10-04 14:40:04 +010059} // namespace profiling
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010060
Matteo Martincigh88813932019-10-04 14:40:04 +010061} // namespace armnn