blob: 2648bcaba0b9dfaf70c2f56004c4d2fc148bfdff [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
Jim Flynnaf947722022-03-02 11:04:47 +00008#include "ProfilingState.hpp"
9
Nikhil Raj3ecc5102019-09-03 15:55:33 +010010#include <atomic>
11
Jan Eilers8eb25602020-03-09 12:13:48 +000012#include <armnn/utility/IgnoreUnused.hpp>
Derek Lamberti1dd75b32019-12-10 21:23:23 +000013
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000014namespace arm
Nikhil Raj3ecc5102019-09-03 15:55:33 +010015{
16
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000017namespace pipe
Nikhil Raj3ecc5102019-09-03 15:55:33 +010018{
19
Nikhil Raj3ecc5102019-09-03 15:55:33 +010020class ProfilingStateMachine
21{
22public:
Matteo Martincigha84edee2019-10-02 12:50:57 +010023 ProfilingStateMachine() : m_State(ProfilingState::Uninitialised) {}
24 ProfilingStateMachine(ProfilingState state) : m_State(state) {}
Nikhil Raj3ecc5102019-09-03 15:55:33 +010025
26 ProfilingState GetCurrentState() const;
27 void TransitionToState(ProfilingState newState);
Matteo Martincigha84edee2019-10-02 12:50:57 +010028 void Reset();
Nikhil Raj3ecc5102019-09-03 15:55:33 +010029
30 bool IsOneOfStates(ProfilingState state1)
31 {
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000032 armnn::IgnoreUnused(state1);
Nikhil Raj3ecc5102019-09-03 15:55:33 +010033 return false;
34 }
35
36 template<typename T, typename... Args >
37 bool IsOneOfStates(T state1, T state2, Args... args)
38 {
39 if (state1 == state2)
40 {
41 return true;
42 }
43 else
44 {
45 return IsOneOfStates(state1, args...);
46 }
47 }
48
49private:
50 std::atomic<ProfilingState> m_State;
51};
52
53constexpr char const* GetProfilingStateName(ProfilingState state)
54{
Matteo Martincigha84edee2019-10-02 12:50:57 +010055 switch (state)
Nikhil Raj3ecc5102019-09-03 15:55:33 +010056 {
Matteo Martincigha84edee2019-10-02 12:50:57 +010057 case ProfilingState::Uninitialised: return "Uninitialised";
58 case ProfilingState::NotConnected: return "NotConnected";
59 case ProfilingState::WaitingForAck: return "WaitingForAck";
60 case ProfilingState::Active: return "Active";
61 default: return "Unknown";
Nikhil Raj3ecc5102019-09-03 15:55:33 +010062 }
63}
64
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000065} // namespace pipe
Nikhil Raj3ecc5102019-09-03 15:55:33 +010066
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000067} // namespace arm