xref: /aosp_15_r20/external/armnn/profiling/client/src/ProfilingStateMachine.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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 Worker constexpr 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