blob: 2648bcaba0b9dfaf70c2f56004c4d2fc148bfdff [file] [log] [blame]
//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//
#pragma once
#include "ProfilingState.hpp"
#include <atomic>
#include <armnn/utility/IgnoreUnused.hpp>
namespace arm
{
namespace pipe
{
class ProfilingStateMachine
{
public:
ProfilingStateMachine() : m_State(ProfilingState::Uninitialised) {}
ProfilingStateMachine(ProfilingState state) : m_State(state) {}
ProfilingState GetCurrentState() const;
void TransitionToState(ProfilingState newState);
void Reset();
bool IsOneOfStates(ProfilingState state1)
{
armnn::IgnoreUnused(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 pipe
} // namespace arm