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