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/CPU.h"
17 #include "include/DDR.h"
18 #include "include/GPU.h"
19 #include "include/FPS.h"
20 #include "include/RAM.h"
21 #include "include/Network.h"
22 #include "include/Power.h"
23 #include "include/Temperature.h"
24 #include "include/ByTrace.h"
25 #include "include/sp_utils.h"
26 #include "include/sp_profiler_factory.h"
27 #include "include/Dubai.h"
28 #include "include/Capture.h"
29 namespace OHOS {
30 namespace SmartPerf {
GetProfilerItem(MessageType messageType)31 SpProfiler *SpProfilerFactory::GetProfilerItem(MessageType messageType)
32 {
33 SpProfiler *profiler = nullptr;
34 switch (messageType) {
35 case MessageType::GET_CPU_NUM:
36 case MessageType::GET_CPU_FREQ:
37 case MessageType::GET_CPU_LOAD:
38 profiler = &CPU::GetInstance();
39 break;
40 case MessageType::GET_FPS_AND_JITTERS:
41 profiler = &FPS::GetInstance();
42 break;
43 case MessageType::GET_GPU_FREQ:
44 case MessageType::GET_GPU_LOAD:
45 profiler = &GPU::GetInstance();
46 break;
47 case MessageType::GET_DDR_FREQ:
48 profiler = &DDR::GetInstance();
49 break;
50 case MessageType::GET_RAM_INFO:
51 profiler = &RAM::GetInstance();
52 break;
53 case MessageType::GET_TEMPERATURE:
54 profiler = &Temperature::GetInstance();
55 break;
56 case MessageType::GET_POWER:
57 profiler = &Power::GetInstance();
58 break;
59 case MessageType::CATCH_TRACE_CONFIG:
60 FPS::GetInstance().SetTraceCatch();
61 break;
62 case MessageType::GET_CAPTURE:
63 profiler = &Capture::GetInstance();
64 break;
65 case MessageType::SET_DUBAI_DB: {
66 Dubai::DumpDubaiBegin();
67 Dubai::DumpDubaiFinish();
68 Dubai::MoveDubaiDb();
69 break;
70 }
71 default:
72 break;
73 }
74 return profiler;
75 }
SetProfilerPkg(std::string pkg)76 void SpProfilerFactory::SetProfilerPkg(std::string pkg)
77 {
78 FPS &fps = FPS::GetInstance();
79 fps.SetPackageName(pkg);
80 RAM &ram = RAM::GetInstance();
81 ram.SetPackageName(pkg);
82 CPU &cpu = CPU::GetInstance();
83 cpu.SetPackageName(pkg);
84 }
SetProfilerLayer(std::string layer)85 void SpProfilerFactory::SetProfilerLayer(std::string layer)
86 {
87 FPS &fps = FPS::GetInstance();
88 fps.SetLayerName(layer);
89 }
SetByTraceCmd(std::string cmd)90 void SpProfilerFactory::SetByTraceCmd(std::string cmd)
91 {
92 ByTrace &bTrace = ByTrace::GetInstance();
93 bTrace.SetTraceCmd(cmd);
94 }
SetByTrace(std::string message)95 void SpProfilerFactory::SetByTrace(std::string message)
96 {
97 std::vector<std::string> values;
98 std::string delimiter = "||";
99 std::string delim = "=";
100 SPUtils::StrSplit(message, delimiter, values);
101 int mSum = 0;
102 int mInterval = 0;
103 long long mThreshold = 0;
104 int lowFps = 0;
105 int mCurNum = 1;
106 for (std::string vItem:values) {
107 std::vector<std::string> vItems;
108 SPUtils::StrSplit(vItem, delim, vItems);
109 if (vItems[0] == "traceSum") {
110 mSum = std::stoi(vItems[1]);
111 }
112 if (vItems[0] == "fpsJitterTime") {
113 mThreshold = std::stoi(vItems[1]);
114 }
115 if (vItems[0] == "catchInterval") {
116 mInterval = std::stoi(vItems[1]);
117 }
118 if (vItems[0] == "lowFps") {
119 lowFps = std::stoi(vItems[1]);
120 }
121 }
122 ByTrace &bTrace = ByTrace::GetInstance();
123 bTrace.SetTraceConfig(mSum, mInterval, mThreshold, lowFps, mCurNum);
124 }
GetCmdProfilerItem(CommandType commandType)125 SpProfiler *SpProfilerFactory::GetCmdProfilerItem(CommandType commandType)
126 {
127 SpProfiler *profiler = nullptr;
128 switch (commandType) {
129 case CommandType::CT_C:
130 profiler = &CPU::GetInstance();
131 break;
132 case CommandType::CT_G:
133 profiler = &GPU::GetInstance();
134 break;
135 case CommandType::CT_F:
136 case CommandType::CT_F1:
137 case CommandType::CT_F2:
138 profiler = &FPS::GetInstance();
139 break;
140 case CommandType::CT_D:
141 profiler = &DDR::GetInstance();
142 break;
143 case CommandType::CT_P:
144 profiler = &Power::GetInstance();
145 break;
146 case CommandType::CT_T:
147 profiler = &Temperature::GetInstance();
148 break;
149 case CommandType::CT_R:
150 profiler = &RAM::GetInstance();
151 break;
152 case CommandType::CT_NET:
153 profiler = &Network::GetInstance();
154 break;
155 case CommandType::CT_TTRACE:
156 FPS::GetInstance().SetTraceCatch();
157 break;
158 case CommandType::CT_SNAPSHOT:
159 profiler = &Capture::GetInstance();
160 break;
161 case CommandType::CT_HW:
162 break;
163 default:
164 break;
165 }
166 return profiler;
167 }
168 }
169 }
170