• 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 #include "trace_base_state.h"
16 
17 #include <hitrace_option/hitrace_option.h>
18 
19 #include "trace_state_machine.h"
20 #include "hiview_logger.h"
21 
22 namespace OHOS::HiviewDFX {
23 namespace {
24 DEFINE_LOG_TAG("TraceStateMachine");
25 const std::vector<std::string> TELEMETRY_TAG_GROUPS_DEFAULT = {"telemetry"};
26 }
27 
CloseTrace(TraceScenario scenario)28 TraceRet TraceBaseState::CloseTrace(TraceScenario scenario)
29 {
30     if (TraceErrorCode ret = Hitrace::CloseTrace(); ret != TraceErrorCode::SUCCESS) {
31         HIVIEW_LOGE(":%{public}s, CloseTrace error:%{public}d", GetTag().c_str(), ret);
32         return TraceRet(ret);
33     }
34     return {};
35 }
36 
OpenTrace(TraceScenario scenario,const std::vector<std::string> & tagGroups)37 TraceRet TraceBaseState::OpenTrace(TraceScenario scenario, const std::vector<std::string> &tagGroups)
38 {
39     if (auto ret = Hitrace::OpenTrace(tagGroups); ret != TraceErrorCode::SUCCESS) {
40         HIVIEW_LOGE(":%{public}s, scenario:%{public}d error:%{public}d", GetTag().c_str(), static_cast<int>(scenario),
41                     ret);
42         return TraceRet(ret);
43     }
44     HIVIEW_LOGI(":%{public}s, OpenTrace success scenario:%{public}d", GetTag().c_str(), static_cast<int>(scenario));
45     switch (scenario) {
46         case TraceScenario::TRACE_COMMAND:
47             TraceStateMachine::GetInstance().TransToCommandState();
48             break;
49         case TraceScenario::TRACE_COMMON:
50             TraceStateMachine::GetInstance().TransToCommonState();
51             break;
52         default:
53             break;
54     }
55     return {};
56 }
57 
OpenTrace(TraceScenario scenario,const std::string & args)58 TraceRet TraceBaseState::OpenTrace(TraceScenario scenario, const std::string &args)
59 {
60     if (TraceErrorCode ret = Hitrace::OpenTrace(args); ret != TraceErrorCode::SUCCESS) {
61         HIVIEW_LOGE(":%{public}s, scenario:%{public}d error:%{public}d", GetTag().c_str(), static_cast<int>(scenario),
62                     ret);
63         return TraceRet(ret);
64     }
65     HIVIEW_LOGI(":%{public}s,OpenTrace success with scenario:%{public}d", GetTag().c_str(), static_cast<int>(scenario));
66     switch (scenario) {
67         case TraceScenario::TRACE_COMMAND:
68             TraceStateMachine::GetInstance().TransToCommandState();
69             break;
70         case TraceScenario::TRACE_COMMON:
71             TraceStateMachine::GetInstance().TransToCommonState();
72             break;
73         default:
74             break;
75     }
76     return {};
77 }
78 
TraceCacheOn()79 TraceRet TraceBaseState::TraceCacheOn()
80 {
81     HIVIEW_LOGW(":%{public}s,  invoke state fail", GetTag().c_str());
82     return TraceRet(TraceStateCode::FAIL);
83 }
84 
TraceCacheOff()85 TraceRet TraceBaseState::TraceCacheOff()
86 {
87     HIVIEW_LOGW(":%{public}s, invoke state fail", GetTag().c_str());
88     return TraceRet(TraceStateCode::FAIL);
89 }
90 
SetCacheParams(int32_t totalFileSize,int32_t sliceMaxDuration)91 TraceRet TraceBaseState::SetCacheParams(int32_t totalFileSize, int32_t sliceMaxDuration)
92 {
93     return TraceRet(TraceStateCode::FAIL);
94 }
95 
OpenTelemetryTrace(const std::string & args,TelemetryPolicy policy)96 TraceRet TraceBaseState::OpenTelemetryTrace(const std::string &args, TelemetryPolicy policy)
97 {
98     HIVIEW_LOGW(":%{public}s, invoke state deny", GetTag().c_str());
99     return TraceRet(TraceStateCode::DENY);
100 }
101 
OpenAppTrace(int32_t appPid)102 TraceRet TraceBaseState::OpenAppTrace(int32_t appPid)
103 {
104     HIVIEW_LOGW(":%{public}s, invoke state deny", GetTag().c_str());
105     return TraceRet(TraceStateCode::DENY);
106 }
107 
DumpTrace(TraceScenario scenario,uint32_t maxDuration,uint64_t happenTime,TraceRetInfo & info)108 TraceRet TraceBaseState::DumpTrace(TraceScenario scenario, uint32_t maxDuration, uint64_t happenTime,
109     TraceRetInfo &info)
110 {
111     HIVIEW_LOGW(":%{public}s, scenario:%{public}d is fail", GetTag().c_str(), static_cast<int>(scenario));
112     return TraceRet(TraceStateCode::FAIL);
113 }
114 
DumpTraceAsync(const DumpTraceArgs & args,int64_t fileSizeLimit,TraceRetInfo & info,DumpTraceCallback callback)115 TraceRet TraceBaseState::DumpTraceAsync(const DumpTraceArgs &args, int64_t fileSizeLimit,
116     TraceRetInfo &info, DumpTraceCallback callback)
117 {
118     HIVIEW_LOGW(":%{public}s, scenario:%{public}d is fail", GetTag().c_str(), static_cast<int>(args.scenario));
119     return TraceRet(TraceStateCode::FAIL);
120 }
121 
TraceDropOn(TraceScenario scenario)122 TraceRet TraceBaseState::TraceDropOn(TraceScenario scenario)
123 {
124     HIVIEW_LOGW(":%{public}s, scenario:%{public}d is fail", GetTag().c_str(), static_cast<int>(scenario));
125     return TraceRet(TraceStateCode::FAIL);
126 }
127 
TraceDropOff(TraceScenario scenario,TraceRetInfo & info)128 TraceRet TraceBaseState::TraceDropOff(TraceScenario scenario, TraceRetInfo &info)
129 {
130     HIVIEW_LOGW(":%{public}s, scenario:%{public}d is fail", GetTag().c_str(), static_cast<int>(scenario));
131     return TraceRet(TraceStateCode::FAIL);
132 }
133 
DumpTraceWithFilter(uint32_t maxDuration,uint64_t happenTime,TraceRetInfo & info)134 TraceRet TraceBaseState::DumpTraceWithFilter(uint32_t maxDuration, uint64_t happenTime, TraceRetInfo &info)
135 {
136     HIVIEW_LOGW("%{public}s is fail", GetTag().c_str());
137     return TraceRet(TraceStateCode::FAIL);
138 }
139 
TraceTelemetryOn()140 TraceRet TraceBaseState::TraceTelemetryOn()
141 {
142     HIVIEW_LOGW("%{public}s, state fail", GetTag().c_str());
143     return TraceRet(TraceStateCode::FAIL);
144 }
145 
TraceTelemetryOff()146 TraceRet TraceBaseState::TraceTelemetryOff()
147 {
148     HIVIEW_LOGW("%{public}s, state fail", GetTag().c_str());
149     return TraceRet(TraceStateCode::FAIL);
150 }
151 
SetAppFilterInfo(const std::string & bundleName)152 int32_t TraceBaseState::SetAppFilterInfo(const std::string &bundleName)
153 {
154     return Hitrace::SetFilterAppName(bundleName);
155 }
156 
SetFilterPidInfo(pid_t pid)157 int32_t TraceBaseState::SetFilterPidInfo(pid_t pid)
158 {
159     return Hitrace::AddFilterPid(pid);
160 }
161 
PowerTelemetryOn()162 TraceRet TraceBaseState::PowerTelemetryOn()
163 {
164     HIVIEW_LOGW("%{public}s, state fail", GetTag().c_str());
165     return TraceRet(TraceStateCode::FAIL);
166 }
167 
PowerTelemetryOff()168 TraceRet TraceBaseState::PowerTelemetryOff()
169 {
170     HIVIEW_LOGW("%{public}s, state fail", GetTag().c_str());
171     return TraceRet(TraceStateCode::FAIL);
172 }
173 
PostTelemetryOn(uint64_t time)174 TraceRet TraceBaseState::PostTelemetryOn(uint64_t time)
175 {
176     HIVIEW_LOGW("%{public}s, state fail", GetTag().c_str());
177     return TraceRet(TraceStateCode::FAIL);
178 }
179 
PostTelemetryTimeOut()180 TraceRet TraceBaseState::PostTelemetryTimeOut()
181 {
182     HIVIEW_LOGW("%{public}s, state fail", GetTag().c_str());
183     return TraceRet(TraceStateCode::FAIL);
184 }
185 
InitTelemetryStatus(bool isStatusOn)186 void TraceBaseState::InitTelemetryStatus(bool isStatusOn)
187 {
188     HIVIEW_LOGW("%{public}s, state fail", GetTag().c_str());
189 }
190 
OpenTelemetryTrace(const std::string & args,TelemetryPolicy policy)191 TraceRet CloseState::OpenTelemetryTrace(const std::string &args, TelemetryPolicy policy)
192 {
193     auto ret = args.empty() ? Hitrace::OpenTrace(TELEMETRY_TAG_GROUPS_DEFAULT) : Hitrace::OpenTrace(args);
194     HIVIEW_LOGI("%{public}s: args:%{public}s: result:%{public}d", GetTag().c_str(), args.c_str(), ret);
195     if (ret != TraceErrorCode::SUCCESS) {
196         return TraceRet(ret);
197     }
198     TraceStateMachine::GetInstance().TransToTeleMetryState(policy);
199     return {};
200 }
201 
OpenAppTrace(int32_t appPid)202 TraceRet CloseState::OpenAppTrace(int32_t appPid)
203 {
204     std::string appArgs = "tags:graphic,ace,app clockType:boot bufferSize:10240 overwrite:1 fileLimit:20 ";
205     appArgs.append("appPid:").append(std::to_string(appPid));
206     if (auto ret = Hitrace::OpenTrace(appArgs); ret != TraceErrorCode::SUCCESS) {
207         HIVIEW_LOGE("%{public}s: args:%{public}s, result:%{public}d", GetTag().c_str(), appArgs.c_str(), ret);
208         return TraceRet(ret);
209     }
210     TraceStateMachine::GetInstance().TransToDynamicState(appPid);
211     return {};
212 }
213 
CloseTrace(TraceScenario scenario)214 TraceRet CloseState::CloseTrace(TraceScenario scenario)
215 {
216     return {};
217 }
218 }