diff options
Diffstat (limited to 'src/profiling/ProfilingStateMachine.hpp')
-rw-r--r-- | src/profiling/ProfilingStateMachine.hpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/profiling/ProfilingStateMachine.hpp b/src/profiling/ProfilingStateMachine.hpp new file mode 100644 index 0000000000..66f8b2cd17 --- /dev/null +++ b/src/profiling/ProfilingStateMachine.hpp @@ -0,0 +1,69 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// +#pragma once + +#include <atomic> + +namespace armnn +{ + +namespace profiling +{ + +enum class ProfilingState +{ + Uninitialised, + NotConnected, + WaitingForAck, + Active +}; + +class ProfilingStateMachine +{ +public: + ProfilingStateMachine(): m_State(ProfilingState::Uninitialised) {}; + ProfilingStateMachine(ProfilingState state): m_State(state) {}; + + ProfilingState GetCurrentState() const; + void TransitionToState(ProfilingState newState); + + bool IsOneOfStates(ProfilingState state1) + { + return false; + } + + template<typename T, typename... Args > + bool IsOneOfStates(T state1, T state2, Args... args) + { + if (state1 == state2) + { + return true; + } + else + { + return IsOneOfStates(state1, args...); + } + } + +private: + std::atomic<ProfilingState> m_State; +}; + +constexpr char const* GetProfilingStateName(ProfilingState state) +{ + switch(state) + { + case ProfilingState::Uninitialised: return "Uninitialised"; + case ProfilingState::NotConnected: return "NotConnected"; + case ProfilingState::WaitingForAck: return "WaitingForAck"; + case ProfilingState::Active: return "Active"; + default: return "Unknown"; + } +} + +} //namespace profiling + +} //namespace armnn + |