blob: 0cc23429cde9445595c27c19e19e8d36a149eb4b [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,
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010025 bool stopAfterTimeout,
26 CommandHandlerRegistry& commandHandlerRegistry,
Matteo Martincigh8a837172019-10-04 17:01:07 +010027 PacketVersionResolver& packetVersionResolver)
Matteo Martincigh88813932019-10-04 14:40:04 +010028 : 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;
49 std::atomic<bool> m_StopAfterTimeout;
FinnWilliamsArm4833cea2019-09-17 16:53:53 +010050 std::atomic<bool> m_IsRunning;
51 std::atomic<bool> m_KeepRunning;
52 std::thread m_CommandThread;
53
54 CommandHandlerRegistry& m_CommandHandlerRegistry;
55 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