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
16 #include "trace_command_state.h"
17
18 #include "trace_state_machine.h"
19 #include "hiview_logger.h"
20
21 namespace OHOS::HiviewDFX {
22 namespace {
23 DEFINE_LOG_TAG("TraceStateMachine");
24 }
OpenTrace(TraceScenario scenario,const std::vector<std::string> & tagGroups)25 TraceRet CommandState::OpenTrace(TraceScenario scenario, const std::vector<std::string> &tagGroups)
26 {
27 HIVIEW_LOGW(":%{public}s, scenario:%{public}d is deny", GetTag().c_str(), static_cast<int>(scenario));
28 return TraceRet(TraceStateCode::DENY);
29 }
30
OpenTrace(TraceScenario scenario,const std::string & args)31 TraceRet CommandState::OpenTrace(TraceScenario scenario, const std::string &args)
32 {
33 HIVIEW_LOGW(":%{public}s, scenario:%{public}d is deny", GetTag().c_str(), static_cast<int>(scenario));
34 return TraceRet(TraceStateCode::DENY);
35 }
36
DumpTrace(TraceScenario scenario,uint32_t maxDuration,uint64_t happenTime,TraceRetInfo & info)37 TraceRet CommandState::DumpTrace(TraceScenario scenario, uint32_t maxDuration, uint64_t happenTime, TraceRetInfo &info)
38 {
39 if (scenario != TraceScenario::TRACE_COMMAND) {
40 HIVIEW_LOGW(":%{public}s, scenario:%{public}d is fail", GetTag().c_str(), static_cast<int>(scenario));
41 return TraceRet(TraceStateCode::FAIL);
42 }
43 info = Hitrace::DumpTrace(maxDuration, happenTime);
44 HIVIEW_LOGI(":%{public}s, DumpTrace result:%{public}d", GetTag().c_str(), info.errorCode);
45 return TraceRet(info.errorCode);
46 }
47
TraceDropOn(TraceScenario scenario)48 TraceRet CommandState::TraceDropOn(TraceScenario scenario)
49 {
50 if (scenario != TraceScenario::TRACE_COMMAND) {
51 HIVIEW_LOGW(":%{public}s, scenario:%{public}d is deny", GetTag().c_str(), static_cast<int>(scenario));
52 return TraceRet(TraceStateCode::FAIL);
53 }
54 if (TraceErrorCode ret = Hitrace::RecordTraceOn(); ret != TraceErrorCode::SUCCESS) {
55 HIVIEW_LOGE(":%{public}s, TraceDropOn error:%{public}d", GetTag().c_str(), ret);
56 return TraceRet(ret);
57 }
58 TraceStateMachine::GetInstance().TransToCommandDropState();
59 return {};
60 }
61
CloseTrace(TraceScenario scenario)62 TraceRet CommandState::CloseTrace(TraceScenario scenario)
63 {
64 if (scenario != TraceScenario::TRACE_COMMAND) {
65 HIVIEW_LOGW(":%{public}s, scenario:%{public}d is deny", GetTag().c_str(), static_cast<int>(scenario));
66 return TraceRet(TraceStateCode::FAIL);
67 }
68 auto ret = TraceBaseState::CloseTrace(scenario);
69 if (ret.IsSuccess()) {
70 TraceStateMachine::GetInstance().SetCommandState(false);
71 }
72 return ret;
73 }
74
OpenTrace(TraceScenario scenario,const std::vector<std::string> & tagGroups)75 TraceRet CommandDropState::OpenTrace(TraceScenario scenario, const std::vector<std::string> &tagGroups)
76 {
77 HIVIEW_LOGW(":%{public}s, scenario:%{public}d is deny", GetTag().c_str(), static_cast<int>(scenario));
78 return TraceRet(TraceStateCode::DENY);
79 }
80
OpenTrace(TraceScenario scenario,const std::string & args)81 TraceRet CommandDropState::OpenTrace(TraceScenario scenario, const std::string &args)
82 {
83 HIVIEW_LOGW(":%{public}s, scenario:%{public}d is deny", GetTag().c_str(), static_cast<int>(scenario));
84 return TraceRet(TraceStateCode::DENY);
85 }
86
TraceDropOff(TraceScenario scenario,TraceRetInfo & info)87 TraceRet CommandDropState::TraceDropOff(TraceScenario scenario, TraceRetInfo &info)
88 {
89 if (scenario != TraceScenario::TRACE_COMMAND) {
90 HIVIEW_LOGW(":%{public}s, scenario:%{public}d is fail", GetTag().c_str(), static_cast<int>(scenario));
91 return TraceRet(TraceStateCode::FAIL);
92 }
93 if (info = Hitrace::RecordTraceOff(); info.errorCode != TraceErrorCode::SUCCESS) {
94 HIVIEW_LOGE(":%{public}s, TraceDropOff error:%{public}d", GetTag().c_str(), info.errorCode);
95 return TraceRet(info.errorCode);
96 }
97 TraceStateMachine::GetInstance().TransToCommandState();
98 return {};
99 }
100
CloseTrace(TraceScenario scenario)101 TraceRet CommandDropState::CloseTrace(TraceScenario scenario)
102 {
103 if (scenario == TraceScenario::TRACE_COMMAND) {
104 return TraceBaseState::CloseTrace(TraceScenario::TRACE_COMMAND);
105 }
106 HIVIEW_LOGW(":%{public}s, invoke state fail", GetTag().c_str());
107 return TraceRet(TraceStateCode::FAIL);
108 }
109 }
110