• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #ifndef HIVIEWDFX_HIVIEW_TELEMETRY_STATE_MACHINE_H
16 #define HIVIEWDFX_HIVIEW_TELEMETRY_STATE_MACHINE_H
17 #include <memory>
18 
19 #include "trace_common.h"
20 
21 namespace OHOS::HiviewDFX::Telemetry {
22 class TeleMetryStateMachine;
23 class BaseState {
24 public:
25     friend class TeleMetryStateMachine;
26     virtual ~BaseState() = default;
27     virtual bool IsTraceOn() = 0;
28     virtual TraceRet TraceOn() = 0;
29     virtual TraceRet TraceOff() = 0;
30     virtual TraceRet PostOn(uint64_t time) = 0;
31     virtual TraceRet TimeOut() = 0;
32 
33 protected:
34     virtual std::string GetTag() = 0;
35 };
36 
37 class InitState : public BaseState {
38 public:
InitState(std::shared_ptr<TeleMetryStateMachine> stateMachine)39     explicit InitState(std::shared_ptr<TeleMetryStateMachine> stateMachine) : stateMachine_(stateMachine) {}
40 
41     bool IsTraceOn() override;
42     TraceRet TraceOn() override;
43     TraceRet TraceOff() override;
44     TraceRet PostOn(uint64_t time) override;
45     TraceRet TimeOut() override;
46 protected:
47     std::string GetTag() override;
48 
49 private:
50     std::weak_ptr<TeleMetryStateMachine> stateMachine_;
51 };
52 
53 class TraceOnState : public BaseState {
54 public:
TraceOnState(std::weak_ptr<TeleMetryStateMachine> stateMachine)55     explicit TraceOnState(std::weak_ptr<TeleMetryStateMachine> stateMachine) : stateMachine_(stateMachine) {}
56 
57     bool IsTraceOn() override;
58     TraceRet TraceOn() override;
59     TraceRet TraceOff() override;
60     TraceRet PostOn(uint64_t time) override;
61     TraceRet TimeOut() override;
62 
SetPostEndTime(uint64_t postEndTime)63     void SetPostEndTime(uint64_t postEndTime)
64     {
65         postEndTime_ = postEndTime;
66     }
67 
SetTraceOnCount(uint32_t traceOnCount)68     void SetTraceOnCount(uint32_t traceOnCount)
69     {
70         traceOnCount_ = traceOnCount;
71     }
72 
73 protected:
74     std::string GetTag() override;
75 private:
76     std::weak_ptr<TeleMetryStateMachine> stateMachine_;
77     uint32_t traceOnCount_ = 0;
78     uint64_t postEndTime_ = 0;
79 };
80 
81 class TeleMetryStateMachine {
82 public:
83     friend class InitState;
84     friend class TraceOnState;
85 
IsTraceOn()86     bool IsTraceOn()
87     {
88         return currentState_->IsTraceOn();
89     }
90 
TraceOn()91     TraceRet TraceOn()
92     {
93         return currentState_->TraceOn();
94     }
95 
TraceOff()96     TraceRet TraceOff()
97     {
98         return currentState_->TraceOff();
99     }
100 
PostOn(uint64_t time)101     TraceRet PostOn(uint64_t time)
102     {
103         return currentState_->PostOn(time);
104     }
105 
TimeOut()106     TraceRet TimeOut()
107     {
108         return currentState_->TimeOut();
109     }
110 
RegisterTelemetryCallback(std::shared_ptr<TelemetryCallback> stateCallback)111     void RegisterTelemetryCallback(std::shared_ptr<TelemetryCallback> stateCallback)
112     {
113         stateCallback_ = stateCallback;
114     }
115 
SetInitState(std::shared_ptr<InitState> initStateState)116     void SetInitState(std::shared_ptr<InitState> initStateState)
117     {
118         initStateState_ = initStateState;
119     }
120 
SetTraceOnState(std::shared_ptr<TraceOnState> traceOnState)121     void SetTraceOnState(std::shared_ptr<TraceOnState> traceOnState)
122     {
123         traceOnState_ = traceOnState;
124     }
125 
126     TraceRet TransToInitState();
127     TraceRet TransToTraceOnState(uint32_t traceOnCount, uint64_t postEndTime);
128 
129 private:
130     std::shared_ptr<BaseState> currentState_;
131     std::shared_ptr<InitState> initStateState_;
132     std::shared_ptr<TraceOnState> traceOnState_;
133     std::shared_ptr<TelemetryCallback> stateCallback_;
134 };
135 }
136 #endif //HIVIEWDFX_HIVIEW_TELEMETRY_STATE_MACHINE_H
137