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 }