blob: 66f8b2cd17c6547a6552527859c0746764a0fcd2 [file] [log] [blame]
//
// 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