• 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 
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