1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 Arm Ltd. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker 6*89c4ff92SAndroid Build Coastguard Worker #pragma once 7*89c4ff92SAndroid Build Coastguard Worker 8*89c4ff92SAndroid Build Coastguard Worker #include <client/include/ProfilingState.hpp> 9*89c4ff92SAndroid Build Coastguard Worker 10*89c4ff92SAndroid Build Coastguard Worker #include <common/include/IgnoreUnused.hpp> 11*89c4ff92SAndroid Build Coastguard Worker 12*89c4ff92SAndroid Build Coastguard Worker #include <atomic> 13*89c4ff92SAndroid Build Coastguard Worker 14*89c4ff92SAndroid Build Coastguard Worker namespace arm 15*89c4ff92SAndroid Build Coastguard Worker { 16*89c4ff92SAndroid Build Coastguard Worker 17*89c4ff92SAndroid Build Coastguard Worker namespace pipe 18*89c4ff92SAndroid Build Coastguard Worker { 19*89c4ff92SAndroid Build Coastguard Worker 20*89c4ff92SAndroid Build Coastguard Worker class ProfilingStateMachine 21*89c4ff92SAndroid Build Coastguard Worker { 22*89c4ff92SAndroid Build Coastguard Worker public: ProfilingStateMachine()23*89c4ff92SAndroid Build Coastguard Worker ProfilingStateMachine() : m_State(ProfilingState::Uninitialised) {} ProfilingStateMachine(ProfilingState state)24*89c4ff92SAndroid Build Coastguard Worker ProfilingStateMachine(ProfilingState state) : m_State(state) {} 25*89c4ff92SAndroid Build Coastguard Worker 26*89c4ff92SAndroid Build Coastguard Worker ProfilingState GetCurrentState() const; 27*89c4ff92SAndroid Build Coastguard Worker void TransitionToState(ProfilingState newState); 28*89c4ff92SAndroid Build Coastguard Worker void Reset(); 29*89c4ff92SAndroid Build Coastguard Worker IsOneOfStates(ProfilingState state1)30*89c4ff92SAndroid Build Coastguard Worker bool IsOneOfStates(ProfilingState state1) 31*89c4ff92SAndroid Build Coastguard Worker { 32*89c4ff92SAndroid Build Coastguard Worker arm::pipe::IgnoreUnused(state1); 33*89c4ff92SAndroid Build Coastguard Worker return false; 34*89c4ff92SAndroid Build Coastguard Worker } 35*89c4ff92SAndroid Build Coastguard Worker 36*89c4ff92SAndroid Build Coastguard Worker template<typename T, typename... Args > IsOneOfStates(T state1,T state2,Args...args)37*89c4ff92SAndroid Build Coastguard Worker bool IsOneOfStates(T state1, T state2, Args... args) 38*89c4ff92SAndroid Build Coastguard Worker { 39*89c4ff92SAndroid Build Coastguard Worker if (state1 == state2) 40*89c4ff92SAndroid Build Coastguard Worker { 41*89c4ff92SAndroid Build Coastguard Worker return true; 42*89c4ff92SAndroid Build Coastguard Worker } 43*89c4ff92SAndroid Build Coastguard Worker else 44*89c4ff92SAndroid Build Coastguard Worker { 45*89c4ff92SAndroid Build Coastguard Worker return IsOneOfStates(state1, args...); 46*89c4ff92SAndroid Build Coastguard Worker } 47*89c4ff92SAndroid Build Coastguard Worker } 48*89c4ff92SAndroid Build Coastguard Worker 49*89c4ff92SAndroid Build Coastguard Worker private: 50*89c4ff92SAndroid Build Coastguard Worker std::atomic<ProfilingState> m_State; 51*89c4ff92SAndroid Build Coastguard Worker }; 52*89c4ff92SAndroid Build Coastguard Worker GetProfilingStateName(ProfilingState state)53*89c4ff92SAndroid Build Coastguard Workerconstexpr char const* GetProfilingStateName(ProfilingState state) 54*89c4ff92SAndroid Build Coastguard Worker { 55*89c4ff92SAndroid Build Coastguard Worker switch (state) 56*89c4ff92SAndroid Build Coastguard Worker { 57*89c4ff92SAndroid Build Coastguard Worker case ProfilingState::Uninitialised: return "Uninitialised"; 58*89c4ff92SAndroid Build Coastguard Worker case ProfilingState::NotConnected: return "NotConnected"; 59*89c4ff92SAndroid Build Coastguard Worker case ProfilingState::WaitingForAck: return "WaitingForAck"; 60*89c4ff92SAndroid Build Coastguard Worker case ProfilingState::Active: return "Active"; 61*89c4ff92SAndroid Build Coastguard Worker default: return "Unknown"; 62*89c4ff92SAndroid Build Coastguard Worker } 63*89c4ff92SAndroid Build Coastguard Worker } 64*89c4ff92SAndroid Build Coastguard Worker 65*89c4ff92SAndroid Build Coastguard Worker } // namespace pipe 66*89c4ff92SAndroid Build Coastguard Worker 67*89c4ff92SAndroid Build Coastguard Worker } // namespace arm 68