1 /*
2 * Copyright (C) 2021 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 <iostream>
16 #include "include/AI_schedule.h"
17 #include "include/CPU.h"
18 #include "include/DDR.h"
19 #include "include/GameEvent.h"
20 #include "include/GetLog.h"
21 #include "include/GPU.h"
22 #include "include/FPS.h"
23 #include "include/RAM.h"
24 #include "include/Network.h"
25 #include "include/Power.h"
26 #include "include/Temperature.h"
27 #include "include/ByTrace.h"
28 #include "include/sp_utils.h"
29 #include "include/sp_profiler_factory.h"
30 #include "include/Capture.h"
31 #include "include/navigation.h"
32 #include "include/sp_log.h"
33 #include "include/FileDescriptor.h"
34 #include "include/Threads.h"
35 #include "include/GpuCounter.h"
36 #include "effective.h"
37 #include "include/cpu_info.h"
38 #include "include/lock_frequency.h"
39 #include "include/hiperf.h"
40 #include "include/sdk_data_recv.h"
41
42 namespace OHOS {
43 namespace SmartPerf {
GetProfilerItem(MessageType messageType)44 SpProfiler *SpProfilerFactory::GetProfilerItem(MessageType messageType)
45 {
46 SpProfiler* profiler = nullptr;
47 switch (messageType) {
48 case MessageType::GET_CPU_FREQ_LOAD:
49 profiler = &CPU::GetInstance();
50 break;
51 case MessageType::GET_FPS_AND_JITTERS:
52 case MessageType::GET_CUR_FPS:
53 profiler = &FPS::GetInstance();
54 break;
55 case MessageType::GET_GPU_FREQ:
56 case MessageType::GET_GPU_LOAD:
57 profiler = &GPU::GetInstance();
58 break;
59 case MessageType::GET_DDR_FREQ:
60 profiler = &DDR::GetInstance();
61 break;
62 case MessageType::GET_RAM_INFO:
63 profiler = &RAM::GetInstance();
64 break;
65 case MessageType::GET_LOG:
66 profiler = &GetLog::GetInstance();
67 break;
68 case MessageType::GET_PROCESS_THREADS:
69 profiler = &Threads::GetInstance();
70 break;
71 case MessageType::GET_PROCESS_FDS:
72 profiler = &FileDescriptor::GetInstance();
73 break;
74 default:
75 break;
76 }
77 if (profiler == nullptr) {
78 profiler = GetProfilerItemContinue(messageType);
79 }
80 return profiler;
81 }
GetProfilerItemContinue(MessageType messageType)82 SpProfiler *SpProfilerFactory::GetProfilerItemContinue(MessageType messageType)
83 {
84 SpProfiler* profiler = nullptr;
85 switch (messageType) {
86 case MessageType::GET_TEMPERATURE:
87 profiler = &Temperature::GetInstance();
88 break;
89 case MessageType::GET_POWER:
90 profiler = &Power::GetInstance();
91 break;
92 case MessageType::GET_CAPTURE:
93 Capture::GetInstance().SocketMessage();
94 profiler = &Capture::GetInstance();
95 break;
96 case MessageType::CATCH_NETWORK_TRAFFIC:
97 case MessageType::GET_NETWORK_TRAFFIC:
98 profiler = &Network::GetInstance();
99 break;
100 default:
101 break;
102 }
103 return profiler;
104 }
105
SetProfilerPkg(const std::string & pkg)106 void SpProfilerFactory::SetProfilerPkg(const std::string &pkg)
107 {
108 LOGD("SpProfilerFactory setPKG:%s", pkg.c_str());
109 FPS::GetInstance().SetPackageName(pkg);
110 RAM::GetInstance().SetPackageName(pkg);
111 CPU::GetInstance().SetPackageName(pkg);
112 Threads::GetInstance().SetPackageName(pkg);
113 FileDescriptor::GetInstance().SetPackageName(pkg);
114 }
115
SetProfilerPidByPkg(std::string & pid,std::string pids)116 void SpProfilerFactory::SetProfilerPidByPkg(std::string &pid, std::string pids)
117 {
118 LOGD("SpProfilerFactory setPID:%s", pid.c_str());
119 FPS::GetInstance().SetProcessId(pid);
120 Hiperf::GetInstance().SetProcessId(pid);
121 RAM::GetInstance().SetProcessId(pids.empty() ? pid : pids);
122 CPU::GetInstance().SetProcessId(pids.empty() ? pid : pids);
123 Navigation::GetInstance().SetProcessId(pid);
124 AISchedule::GetInstance().SetProcessId(pid);
125 Threads::GetInstance().SetProcessId(pids.empty() ? pid : pids);
126 FileDescriptor::GetInstance().SetProcessId(pids.empty() ? pid : pids);
127 CPUInfo::GetInstance().SetPids(pids.empty() ? pid : pids);
128 }
129
GetCmdProfilerItem(CommandType commandType,bool cmdFlag)130 SpProfiler *SpProfilerFactory::GetCmdProfilerItem(CommandType commandType, bool cmdFlag)
131 {
132 SpProfiler *profiler = nullptr;
133 switch (commandType) {
134 case CommandType::CT_C:
135 if (cmdFlag) {
136 profiler = &CPU::GetInstance();
137 }
138 break;
139 case CommandType::CT_G:
140 profiler = &GPU::GetInstance();
141 break;
142 case CommandType::CT_F:
143 if (cmdFlag) {
144 profiler = &FPS::GetInstance();
145 }
146 break;
147 case CommandType::CT_D:
148 profiler = &DDR::GetInstance();
149 break;
150 case CommandType::CT_P:
151 profiler = &Power::GetInstance();
152 break;
153 case CommandType::CT_T:
154 profiler = &Temperature::GetInstance();
155 break;
156 case CommandType::CT_R:
157 if (cmdFlag) {
158 profiler = &RAM::GetInstance();
159 }
160 break;
161 default:
162 break;
163 }
164 if (profiler == nullptr) {
165 profiler = GetCmdProfilerItemOption(commandType, cmdFlag);
166 }
167 return profiler;
168 }
169
GetCmdProfilerItemOption(CommandType commandType,bool cmdFlag)170 SpProfiler *SpProfilerFactory::GetCmdProfilerItemOption(CommandType commandType, bool cmdFlag)
171 {
172 SpProfiler *profiler = nullptr;
173 switch (commandType) {
174 case CommandType::CT_NET:
175 profiler = &Network::GetInstance();
176 break;
177 case CommandType::CT_NAV:
178 profiler = &Navigation::GetInstance();
179 break;
180 case CommandType::CT_TRACE:
181 ByTrace::GetInstance().SetByTrace();
182 FPS::GetInstance().SetTraceCatch();
183 profiler = &ByTrace::GetInstance();
184 break;
185 case CommandType::CT_AS:
186 profiler = &AISchedule::GetInstance();
187 break;
188 default:
189 break;
190 }
191 if (profiler == nullptr) {
192 profiler = GetCmdProfilerItemContinue(commandType, cmdFlag);
193 }
194 return profiler;
195 }
196
GetCmdProfilerItemContinue(CommandType commandType,bool cmdFlag)197 SpProfiler *SpProfilerFactory::GetCmdProfilerItemContinue(CommandType commandType, bool cmdFlag)
198 {
199 SpProfiler *profiler = nullptr;
200 switch (commandType) {
201 case CommandType::CT_SNAPSHOT:
202 if (cmdFlag) {
203 profiler = &Capture::GetInstance();
204 }
205 break;
206 case CommandType::CT_THREADS:
207 profiler = &Threads::GetInstance().GetInstance();
208 break;
209 case CommandType::CT_FDS:
210 if (cmdFlag) {
211 profiler = &FileDescriptor::GetInstance().GetInstance();
212 }
213 break;
214 case CommandType::CT_GE:
215 profiler = &GameEvent::GetInstance();
216 break;
217 case CommandType::CT_GC: {
218 profiler = &GpuCounter::GetInstance();
219 break;
220 }
221 case CommandType::CT_O: {
222 profiler = &SdkDataRecv::GetInstance();
223 break;
224 }
225 case CommandType::CT_FL:
226 case CommandType::CT_FTL: {
227 profiler = &Effective::GetInstance();
228 break;
229 }
230 case CommandType::CT_CI: {
231 profiler = &CPUInfo::GetInstance();
232 break;
233 }
234 case CommandType::CT_LF: {
235 profiler = &LockFrequency::GetInstance();
236 break;
237 }
238 case CommandType::CT_HCI: {
239 profiler = &Hiperf::GetInstance();
240 break;
241 }
242 default:
243 break;
244 }
245 return profiler;
246 }
247 }
248 }
249