blob: 2980556ca80ed3d127f6be2cc702cd93d186ab00 [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
Jan Eilers8eb25602020-03-09 12:13:48 +000010#include <armnn/utility/IgnoreUnused.hpp>
Derek Lamberti1dd75b32019-12-10 21:23:23 +000011
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000012namespace arm
Nikhil Raj3ecc5102019-09-03 15:55:33 +010013{
14
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000015namespace pipe
Nikhil Raj3ecc5102019-09-03 15:55:33 +010016{
17
18enum class ProfilingState
19{
20 Uninitialised,
21 NotConnected,
22 WaitingForAck,
23 Active
24};
25
26class ProfilingStateMachine
27{
28public:
Matteo Martincigha84edee2019-10-02 12:50:57 +010029 ProfilingStateMachine() : m_State(ProfilingState::Uninitialised) {}
30 ProfilingStateMachine(ProfilingState state) : m_State(state) {}
Nikhil Raj3ecc5102019-09-03 15:55:33 +010031
32 ProfilingState GetCurrentState() const;
33 void TransitionToState(ProfilingState newState);
Matteo Martincigha84edee2019-10-02 12:50:57 +010034 void Reset();
Nikhil Raj3ecc5102019-09-03 15:55:33 +010035
36 bool IsOneOfStates(ProfilingState state1)
37 {
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000038 armnn::IgnoreUnused(state1);
Nikhil Raj3ecc5102019-09-03 15:55:33 +010039 return false;
40 }
41
42 template<typename T, typename... Args >
43 bool IsOneOfStates(T state1, T state2, Args... args)
44 {
45 if (state1 == state2)
46 {
47 return true;
48 }
49 else
50 {
51 return IsOneOfStates(state1, args...);
52 }
53 }
54
55private:
56 std::atomic<ProfilingState> m_State;
57};
58
59constexpr char const* GetProfilingStateName(ProfilingState state)
60{
Matteo Martincigha84edee2019-10-02 12:50:57 +010061 switch (state)
Nikhil Raj3ecc5102019-09-03 15:55:33 +010062 {
Matteo Martincigha84edee2019-10-02 12:50:57 +010063 case ProfilingState::Uninitialised: return "Uninitialised";
64 case ProfilingState::NotConnected: return "NotConnected";
65 case ProfilingState::WaitingForAck: return "WaitingForAck";
66 case ProfilingState::Active: return "Active";
67 default: return "Unknown";
Nikhil Raj3ecc5102019-09-03 15:55:33 +010068 }
69}
70
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000071} // namespace pipe
Nikhil Raj3ecc5102019-09-03 15:55:33 +010072
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000073} // namespace arm
Nikhil Raj3ecc5102019-09-03 15:55:33 +010074