blob: 4bf820c5dbdbb46a60dfd33d0e729ef062213ab4 [file] [log] [blame]
FinnWilliamsArm4833cea2019-09-17 16:53:53 +01001//
2// Copyright © 2019 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include "CommandHandlerRegistry.hpp"
9#include "IProfilingConnection.hpp"
10#include "PacketVersionResolver.hpp"
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010011
12#include <atomic>
13#include <thread>
14
15namespace armnn
16{
17
18namespace profiling
19{
20
Matteo Martincigh8a837172019-10-04 17:01:07 +010021class CommandHandler
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010022{
23public:
Matteo Martincigh8a837172019-10-04 17:01:07 +010024 CommandHandler(uint32_t timeout,
Keith Davis33ed2212020-03-30 10:43:41 +010025 bool stopAfterTimeout,
26 CommandHandlerRegistry& commandHandlerRegistry,
27 PacketVersionResolver& packetVersionResolver)
28 : m_Timeout(timeout),
29 m_StopAfterTimeout(stopAfterTimeout),
30 m_IsRunning(false),
31 m_KeepRunning(false),
32 m_CommandThread(),
33 m_CommandHandlerRegistry(commandHandlerRegistry),
34 m_PacketVersionResolver(packetVersionResolver)
Matteo Martincigh88813932019-10-04 14:40:04 +010035 {}
Matteo Martincigh8a837172019-10-04 17:01:07 +010036 ~CommandHandler() { Stop(); }
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010037
Matteo Martincighc2728f92019-10-07 12:35:21 +010038 void SetTimeout(uint32_t timeout) { m_Timeout.store(timeout); }
39 void SetStopAfterTimeout(bool stopAfterTimeout) { m_StopAfterTimeout.store(stopAfterTimeout); }
40
Matteo Martincigh8a837172019-10-04 17:01:07 +010041 void Start(IProfilingConnection& profilingConnection);
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010042 void Stop();
Matteo Martincighc2728f92019-10-07 12:35:21 +010043 bool IsRunning() const { return m_IsRunning.load(); }
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010044
45private:
Matteo Martincigh8a837172019-10-04 17:01:07 +010046 void HandleCommands(IProfilingConnection& profilingConnection);
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010047
Matteo Martincigh88813932019-10-04 14:40:04 +010048 std::atomic<uint32_t> m_Timeout;
Keith Davis33ed2212020-03-30 10:43:41 +010049 std::atomic<bool> m_StopAfterTimeout;
50 std::atomic<bool> m_IsRunning;
51 std::atomic<bool> m_KeepRunning;
52 std::thread m_CommandThread;
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010053
54 CommandHandlerRegistry& m_CommandHandlerRegistry;
Keith Davis33ed2212020-03-30 10:43:41 +010055 PacketVersionResolver& m_PacketVersionResolver;
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010056};
57
Matteo Martincigh88813932019-10-04 14:40:04 +010058} // namespace profiling
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010059
Matteo Martincigh88813932019-10-04 14:40:04 +010060} // namespace armnn