blob: d070744b1b505aabab28e4c06bf79db29555c8ce [file] [log] [blame]
Nikhil Raj3ecc5102019-09-03 15:55:33 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
Matteo Martincigha84edee2019-10-02 12:50:57 +01005
Nikhil Raj3ecc5102019-09-03 15:55:33 +01006#pragma once
7
8#include <atomic>
9
10namespace armnn
11{
12
13namespace profiling
14{
15
16enum class ProfilingState
17{
18 Uninitialised,
19 NotConnected,
20 WaitingForAck,
21 Active
22};
23
24class ProfilingStateMachine
25{
26public:
Matteo Martincigha84edee2019-10-02 12:50:57 +010027 ProfilingStateMachine() : m_State(ProfilingState::Uninitialised) {}
28 ProfilingStateMachine(ProfilingState state) : m_State(state) {}
Nikhil Raj3ecc5102019-09-03 15:55:33 +010029
30 ProfilingState GetCurrentState() const;
31 void TransitionToState(ProfilingState newState);
Matteo Martincigha84edee2019-10-02 12:50:57 +010032 void Reset();
Nikhil Raj3ecc5102019-09-03 15:55:33 +010033
34 bool IsOneOfStates(ProfilingState state1)
35 {
36 return false;
37 }
38
39 template<typename T, typename... Args >
40 bool IsOneOfStates(T state1, T state2, Args... args)
41 {
42 if (state1 == state2)
43 {
44 return true;
45 }
46 else
47 {
48 return IsOneOfStates(state1, args...);
49 }
50 }
51
52private:
53 std::atomic<ProfilingState> m_State;
54};
55
56constexpr char const* GetProfilingStateName(ProfilingState state)
57{
Matteo Martincigha84edee2019-10-02 12:50:57 +010058 switch (state)
Nikhil Raj3ecc5102019-09-03 15:55:33 +010059 {
Matteo Martincigha84edee2019-10-02 12:50:57 +010060 case ProfilingState::Uninitialised: return "Uninitialised";
61 case ProfilingState::NotConnected: return "NotConnected";
62 case ProfilingState::WaitingForAck: return "WaitingForAck";
63 case ProfilingState::Active: return "Active";
64 default: return "Unknown";
Nikhil Raj3ecc5102019-09-03 15:55:33 +010065 }
66}
67
Matteo Martincigha84edee2019-10-02 12:50:57 +010068} // namespace profiling
Nikhil Raj3ecc5102019-09-03 15:55:33 +010069
Matteo Martincigha84edee2019-10-02 12:50:57 +010070} // namespace armnn
Nikhil Raj3ecc5102019-09-03 15:55:33 +010071