• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/GetLog.h"
20 #include "include/GPU.h"
21 #include "include/FPS.h"
22 #include "include/profiler_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 
36 namespace OHOS {
37 namespace SmartPerf {
GetProfilerItem(MessageType messageType)38 SpProfiler *SpProfilerFactory::GetProfilerItem(MessageType messageType)
39 {
40     SpProfiler* profiler = nullptr;
41     switch (messageType) {
42         case MessageType::GET_CPU_FREQ_LOAD:
43             profiler = &CPU::GetInstance();
44             break;
45         case MessageType::GET_FPS_AND_JITTERS:
46         case MessageType::GET_CUR_FPS:
47             profiler = &ProfilerFPS::GetInstance();
48             break;
49         case MessageType::GET_GPU_FREQ:
50         case MessageType::GET_GPU_LOAD:
51             profiler = &GPU::GetInstance();
52             break;
53         case MessageType::GET_DDR_FREQ:
54             profiler = &DDR::GetInstance();
55             break;
56         case MessageType::GET_RAM_INFO:
57             profiler = &RAM::GetInstance();
58             break;
59         case MessageType::GET_LOG:
60             profiler = &GetLog::GetInstance();
61             break;
62         case MessageType::GET_PROCESS_THREADS:
63             profiler = &Threads::GetInstance();
64             break;
65         case MessageType::GET_PROCESS_FDS:
66             profiler = &FileDescriptor::GetInstance();
67             break;
68         default:
69             break;
70     }
71     if (profiler == nullptr) {
72         profiler = GetProfilerItemContinue(messageType);
73     }
74     return profiler;
75 }
76 
GetProfilerItemContinue(MessageType messageType)77 SpProfiler *SpProfilerFactory::GetProfilerItemContinue(MessageType messageType)
78 {
79     SpProfiler* profiler = nullptr;
80     switch (messageType) {
81         case MessageType::GET_TEMPERATURE:
82             profiler = &Temperature::GetInstance();
83             break;
84         case MessageType::GET_POWER:
85             profiler = &Power::GetInstance();
86             break;
87         case MessageType::CATCH_TRACE_CONFIG:
88             ProfilerFPS::GetInstance().SetTraceCatch();
89             break;
90         case MessageType::GET_CAPTURE:
91             Capture::GetInstance().SocketMessage();
92             profiler = &Capture::GetInstance();
93             break;
94         case MessageType::CATCH_NETWORK_TRAFFIC:
95         case MessageType::GET_NETWORK_TRAFFIC:
96             profiler = &Network::GetInstance();
97             break;
98         default:
99             break;
100     }
101     return profiler;
102 }
103 
SetProfilerPkg(const std::string & pkg)104 void SpProfilerFactory::SetProfilerPkg(const std::string &pkg)
105 {
106     LOGD("SpProfilerFactory setPKG:%s", pkg.c_str());
107     FPS &fps = FPS::GetInstance();
108     fps.SetPackageName(pkg);
109     ProfilerFPS &profilerFps = ProfilerFPS::GetInstance();
110     profilerFps.SetPackageName(pkg);
111     RAM &ram = RAM::GetInstance();
112     ram.SetPackageName(pkg);
113     CPU &cpu = CPU::GetInstance();
114     cpu.SetPackageName(pkg);
115     Threads &threads = Threads::GetInstance();
116     threads.SetPackageName(pkg);
117     FileDescriptor &fds = FileDescriptor::GetInstance();
118     fds.SetPackageName(pkg);
119 }
120 
SetProfilerPidByPkg(std::string & pid,std::string pids)121 void SpProfilerFactory::SetProfilerPidByPkg(std::string &pid, std::string pids)
122 {
123     LOGD("SpProfilerFactory setPID:%s", pid.c_str());
124     std::string bundleName;
125     SPUtils::GetBundleName(pid, bundleName);
126     FPS &fps = FPS::GetInstance();
127     fps.SetProcessId(pid);
128     fps.SetPackageName(bundleName);
129     ProfilerFPS &profilerFps = ProfilerFPS::GetInstance();
130     profilerFps.SetProcessId(pid);
131     profilerFps.SetPackageName(bundleName);
132     RAM &ram = RAM::GetInstance();
133     ram.SetProcessId(pids.empty() ? pid : pids);
134     CPU &cpu = CPU::GetInstance();
135     cpu.SetProcessId(pids.empty() ? pid : pids);
136     cpu.SetPackageName(bundleName);
137     Navigation &nav = Navigation::GetInstance();
138     nav.SetProcessId(pid);
139     AISchedule &as = AISchedule::GetInstance();
140     as.SetProcessId(pid);
141     Threads &threads = Threads::GetInstance();
142     threads.SetProcessId(pids.empty() ? pid : pids);
143     FileDescriptor &fds = FileDescriptor::GetInstance();
144     fds.SetProcessId(pids.empty() ? pid : pids);
145 }
146 
SetProfilerLayer(const std::string & layer)147 void SpProfilerFactory::SetProfilerLayer(const std::string &layer)
148 {
149     FPS &fps = FPS::GetInstance();
150     fps.SetLayerName(layer);
151 }
152 
SetProfilerGameLayer(const std::string & isGameView)153 void SpProfilerFactory::SetProfilerGameLayer(const std::string &isGameView)
154 {
155     ProfilerFPS &profilerFps = ProfilerFPS::GetInstance();
156     profilerFps.SetGameLayer(isGameView);
157 }
158 
SetByTrace(std::string message)159 void SpProfilerFactory::SetByTrace(std::string message)
160 {
161     std::vector<std::string> values;
162     std::string delimiter = "||";
163     std::string delim = "=";
164     SPUtils::StrSplit(message, delimiter, values);
165     int mSum = 0;
166     int mInterval = 0;
167     long long mThreshold = 0;
168     int lowFps = 0;
169     for (std::string vItem : values) {
170         std::vector<std::string> vItems;
171         SPUtils::StrSplit(vItem, delim, vItems);
172         if (vItems[0] == "traceSum") {
173             mSum = SPUtilesTye::StringToSometype<int>(vItems[1]);
174         }
175         if (vItems[0] == "fpsJitterTime") {
176             mThreshold = SPUtilesTye::StringToSometype<int>(vItems[1]);
177         }
178         if (vItems[0] == "catchInterval") {
179             mInterval = SPUtilesTye::StringToSometype<int>(vItems[1]);
180         }
181         if (vItems[0] == "lowFps") {
182             lowFps = SPUtilesTye::StringToSometype<int>(vItems[1]);
183         }
184     }
185     const ByTrace &bTrace = ByTrace::GetInstance();
186     if (message.find("traceSum") != std::string::npos) {
187         int mCurNum = 1;
188         bTrace.SetTraceConfig(mSum, mInterval, mThreshold, lowFps, mCurNum);
189     }
190 }
GetCmdProfilerItem(CommandType commandType,bool cmdFlag)191 SpProfiler *SpProfilerFactory::GetCmdProfilerItem(CommandType commandType, bool cmdFlag)
192 {
193     SpProfiler *profiler = nullptr;
194     switch (commandType) {
195         case CommandType::CT_C:
196             if (cmdFlag) {
197                 profiler = &CPU::GetInstance();
198             }
199             break;
200         case CommandType::CT_G:
201             profiler = &GPU::GetInstance();
202             break;
203         case CommandType::CT_F:
204             if (cmdFlag) {
205                 profiler = &FPS::GetInstance();
206             }
207             break;
208         case CommandType::CT_D:
209             profiler = &DDR::GetInstance();
210             break;
211         case CommandType::CT_P:
212             profiler = &Power::GetInstance();
213             break;
214         case CommandType::CT_T:
215             profiler = &Temperature::GetInstance();
216             break;
217         case CommandType::CT_R:
218             if (cmdFlag) {
219                 profiler = &RAM::GetInstance();
220             }
221             break;
222         case CommandType::CT_NET:
223             profiler = &Network::GetInstance();
224             break;
225         case CommandType::CT_NAV:
226             profiler = &Navigation::GetInstance();
227             break;
228         case CommandType::CT_TTRACE:
229             ProfilerFPS::GetInstance().SetTraceCatch();
230             break;
231         case CommandType::CT_AS:
232             profiler = &AISchedule::GetInstance();
233             break;
234         default:
235             break;
236     }
237     if (profiler == nullptr) {
238         profiler = GetCmdProfilerItemContinue(commandType, cmdFlag);
239     }
240     return profiler;
241 }
242 
GetCmdProfilerItemContinue(CommandType commandType,bool cmdFlag)243 SpProfiler *SpProfilerFactory::GetCmdProfilerItemContinue(CommandType commandType, bool cmdFlag)
244 {
245     SpProfiler *profiler = nullptr;
246     switch (commandType) {
247         case CommandType::CT_SNAPSHOT:
248             if (cmdFlag) {
249                 profiler = &Capture::GetInstance();
250             }
251             break;
252         case CommandType::CT_THREADS:
253             profiler = &Threads::GetInstance().GetInstance();
254             break;
255         case CommandType::CT_FDS:
256             if (cmdFlag) {
257                 profiler = &FileDescriptor::GetInstance().GetInstance();
258             }
259             break;
260         default:
261             break;
262     }
263     return profiler;
264 }
265 }
266 }
267