1 /*
2 * Copyright (c) 2022-2024 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 #ifdef RESSCHED_RESOURCESCHEDULE_SOC_PERF_ENABLE
17 #include "socperf_plugin.h"
18 #include "app_mgr_constants.h"
19 #include "bundle_mgr_interface.h"
20 #include "config_info.h"
21 #include "dlfcn.h"
22 #include "fcntl.h"
23 #include "if_system_ability_manager.h"
24 #include "iservice_registry.h"
25 #include "plugin_mgr.h"
26 #include "res_type.h"
27 #include "socperf_log.h"
28 #include "system_ability_definition.h"
29
30 namespace OHOS {
31 namespace ResourceSchedule {
32 using namespace ResType;
33 namespace {
34 const std::string LIB_NAME = "libsocperf_plugin.z.so";
35 const std::string PLUGIN_NAME = "SOCPERF";
36 const std::string CONFIG_NAME_SOCPERF_FEATURE_SWITCH = "socperfFeatureSwitch";
37 const std::string CONFIG_NAME_SOCPERF_EVENT_ID = "socperfEventId";
38 const std::string SUB_ITEM_KEY_NAME_SOCPERF_ON_DEMAND = "socperf_on_demand";
39 const std::string SUB_ITEM_KEY_NAME_SOCPERF_GAME_BOOST = "socperf_game_boost";
40 const std::string CONFIG_NAME_SOCPERF_BUNDLE_NAME_BOOST_LIST = "socperfBundleNameBoostList";
41 const std::string SUB_ITEM_KEY_NAME_APP_USE_CAMERA_BOOST = "app_use_camera_boost";
42 const std::string CNOFIG_NAME_SOCPERF_CRUCIAL_FUNC = "socperfCrucialFunc";
43 const std::string SUB_ITEM_KEY_NAME_SOCPERF_RERQ_APPTYPE_PATH = "socperf_req_apptype_path";
44 const std::string SUB_ITEM_KEY_NAME_SOCPERF_RERQ_APPTYPE_FUNC = "socperf_req_apptype_func";
45 const std::string BUNDLE_NAME = "bundleName";
46 const std::string PID_NAME = "pid";
47 const std::string CLIENT_PID_NAME = "clientPid";
48 const std::string UID_NAME = "uid";
49 const std::string SOCPERF_TYPE_ID = "socperf_type_id";
50 const std::string SOCPERF_TYPE_RGM = "socperf_type_rgm";
51 const std::string EXTENSION_TYPE_KEY = "extensionType";
52 const std::string DEVICE_MODE_TYPE_KEY = "deviceModeType";
53 const std::string DEVICE_MODE_PAYMODE_NAME = "deviceMode";
54 const std::string DISPLAY_MODE_FULL = "displayFull";
55 const std::string DISPLAY_MODE_MAIN = "displayMain";
56 const std::string DISPLAY_MODE_SUB = "displaySub";
57 const std::string POWER_MODE_KEY = "power";
58 const std::string POWER_MODE = "powerMode";
59 const std::string PRELOAD_MODE = "isPreload";
60 const std::string WEAK_ACTION_STRING = "weakInterAction";
61 const std::string WEAK_ACTION_MODE = "actionmode:weakaction";
62 const std::string KEY_APP_TYPE = "key_app_type";
63 const int32_t INVALID_VALUE = -1;
64 const int32_t APP_TYPE_GAME = 2;
65 const int32_t INVALID_APP_TYPE = 0;
66 const int32_t POWERMODE_ON = 601;
67 const int64_t TIME_INTERVAL = 5000;
68 const int64_t SCREEN_OFF_TIME_DELAY = 5000000L;
69 const int32_t PERF_REQUEST_CMD_ID_RGM_BOOTING_START = 1000;
70 const int32_t PERF_REQUEST_CMD_ID_POWERMODE_CHANGED = 9000;
71 const int32_t PERF_REQUEST_CMD_ID_APP_START = 10000;
72 const int32_t PERF_REQUEST_CMD_ID_WARM_START = 10001;
73 const int32_t PERF_REQUEST_CMD_ID_WINDOW_SWITCH = 10002;
74 const int32_t PERF_REQUEST_CMD_ID_EVENT_CLICK = 10006;
75 const int32_t PERF_REQUEST_CMD_ID_LOAD_PAGE_START = 10007;
76 const int32_t PERF_REQUEST_CMD_ID_EVENT_SLIDE = 10008;
77 const int32_t PERF_REQUEST_CMD_ID_EVENT_SLIDE_OVER = 10009;
78 const int32_t PERF_REQUEST_CMD_ID_EVENT_TOUCH_DOWN = 10010;
79 const int32_t PERF_REQUEST_CMD_ID_LOAD_PAGE_COMPLETE = 10011;
80 const int32_t PERF_REQUEST_CMD_ID_EVENT_WEB_GESTURE = 10012;
81 const int32_t PERF_REQUEST_CMD_ID_POP_PAGE = 10016;
82 const int32_t PERF_REQUEST_CMD_ID_RESIZE_WINDOW = 10018;
83 const int32_t PERF_REQUEST_CMD_ID_MOVE_WINDOW = 10019;
84 const int32_t PERF_REQUEST_CMD_ID_WEB_GESTURE_MOVE = 10020;
85 const int32_t PERF_REQUEST_CMD_ID_WEB_SLIDE_NORMAL = 10025;
86 const int32_t PERF_REQUEST_CMD_ID_ROTATION = 10027;
87 const int32_t PERF_REQUEST_CMD_ID_SCREEN_ON = 10028;
88 const int32_t PERF_REQUEST_CMD_ID_SCREEN_OFF = 10029;
89 const int32_t PERF_REQUEST_CMD_ID_REMOTE_ANIMATION = 10030;
90 const int32_t PERF_REQUEST_CMD_ID_DRAG_STATUS_BAR = 10034;
91 const int32_t PERF_REQUEST_CMD_ID_GAME_START = 10036;
92 const int32_t PERF_REQUEST_CMD_ID_EVENT_TOUCH_UP = 10040;
93 const int32_t PERF_REQUEST_CMD_ID_REMOTE_UNLOCK = 10041;
94 const int32_t PERF_REQUEST_CMD_ID_ACCOUNT_ACTIVATING = 10043;
95 const int32_t PERF_REQUEST_CMD_ID_EVENT_KEY_DOWN = 10044;
96 #ifdef RESSCHED_RESOURCESCHEDULE_CROWN_POWER_KEY_ENABLE
97 const int32_t PERF_REQUEST_CMD_ID_POWER_KEY = 10045;
98 const int32_t PERF_REQUEST_CMD_ID_CROWN_ROTATION = 10046;
99 #endif // RESSCHED_RESOURCESCHEDULE_CROWN_POWER_KEY_ENABLE
100 const int32_t PERF_REQUEST_CMD_ID_LOAD_URL = 10070;
101 const int32_t PERF_REQUEST_CMD_ID_MOUSEWHEEL = 10071;
102 const int32_t PERF_REQUEST_CMD_ID_WEB_DRAG_RESIZE = 10073;
103 const int32_t PERF_REQUEST_CMD_ID_BMM_MONITER_START = 10081;
104 const int32_t PERF_REQUEST_CMD_ID_DISPLAY_MODE_FULL = 10082;
105 const int32_t PERF_REQUEST_CMD_ID_DISPLAY_MODE_MAIN = 10083;
106 const int32_t PERF_REQUEST_CMD_ID_GAME_BOOST = 10085;
107 const int32_t PERF_REQUEST_CMD_ID_APP_USE_CAMERA = 10086;
108 #ifdef RESSCHED_RESOURCESCHEDULE_FILE_COPY_SOC_PERF_ENABLE
109 const int32_t PERF_REQUEST_CMD_ID_FILE_COPY = 10087;
110 #endif
111 const int32_t PERF_REQUEST_CMD_ID_RECENT_BUILD = 10200;
112 }
IMPLEMENT_SINGLE_INSTANCE(SocPerfPlugin)113 IMPLEMENT_SINGLE_INSTANCE(SocPerfPlugin)
114
115 void SocPerfPlugin::Init()
116 {
117 InitEventId();
118 InitResTypes();
119 InitFunctionMap();
120 for (auto resType : resTypes) {
121 PluginMgr::GetInstance().SubscribeResource(LIB_NAME, resType);
122 }
123 InitPerfCrucialSo();
124 InitBundleNameBoostList();
125 InitWeakInterAction();
126 SOC_PERF_LOGI("SocPerfPlugin::Init success");
127 }
128
InitPerfCrucialSo()129 void SocPerfPlugin::InitPerfCrucialSo()
130 {
131 PluginConfig itemLists = PluginMgr::GetInstance().GetConfig(PLUGIN_NAME, CNOFIG_NAME_SOCPERF_CRUCIAL_FUNC);
132 for (const Item& item : itemLists.itemList) {
133 for (SubItem sub : item.subItemList) {
134 if (sub.name == SUB_ITEM_KEY_NAME_SOCPERF_RERQ_APPTYPE_PATH) {
135 perfReqAppTypeSoPath_ = sub.value;
136 }
137 if (sub.name == SUB_ITEM_KEY_NAME_SOCPERF_RERQ_APPTYPE_FUNC) {
138 perfReqAppTypeSoFunc_ = sub.value;
139 }
140 }
141 }
142
143 if (!perfReqAppTypeSoPath_.empty() && !perfReqAppTypeSoFunc_.empty()) {
144 InitPerfCrucialFunc(perfReqAppTypeSoPath_.c_str(), perfReqAppTypeSoFunc_.c_str());
145 }
146 PluginMgr::GetInstance().RemoveConfig(PLUGIN_NAME, CNOFIG_NAME_SOCPERF_CRUCIAL_FUNC);
147 }
148
InitWeakInterAction()149 void SocPerfPlugin::InitWeakInterAction()
150 {
151 PluginConfig itemLists = PluginMgr::GetInstance().GetConfig(PLUGIN_NAME, WEAK_ACTION_STRING);
152 for (const Item& item : itemLists.itemList) {
153 for (SubItem sub : item.subItemList) {
154 if (sub.name == BUNDLE_NAME) {
155 AddKeyAppName(sub.value);
156 } else if (sub.name == KEY_APP_TYPE) {
157 AddKeyAppType(sub.value);
158 }
159 }
160 }
161 PluginMgr::GetInstance().RemoveConfig(PLUGIN_NAME, WEAK_ACTION_STRING);
162 }
163
AddKeyAppName(const std::string & subValue)164 void SocPerfPlugin::AddKeyAppName(const std::string& subValue)
165 {
166 if (subValue.empty()) {
167 return;
168 }
169 keyAppName_.insert(subValue);
170 }
171
AddKeyAppType(const std::string & subValue)172 void SocPerfPlugin::AddKeyAppType(const std::string& subValue)
173 {
174 if (subValue.empty()) {
175 return;
176 }
177 keyAppType_.insert(atoi(subValue.c_str()));
178 }
179
InitPerfCrucialFunc(const char * perfSoPath,const char * perfSoFunc)180 void SocPerfPlugin::InitPerfCrucialFunc(const char* perfSoPath, const char* perfSoFunc)
181 {
182 if (!perfSoPath || !perfSoFunc) {
183 return;
184 }
185 handle_ = dlopen(perfSoPath, RTLD_NOW);
186 if (!handle_) {
187 SOC_PERF_LOGE("perf so doesn't exist");
188 return;
189 }
190
191 reqAppTypeFunc_ = reinterpret_cast<ReqAppTypeFunc>(dlsym(handle_, perfSoFunc));
192 if (!reqAppTypeFunc_) {
193 SOC_PERF_LOGE("perf func req app type doesn't exist");
194 dlclose(handle_);
195 handle_ = nullptr;
196 }
197 }
198
InitEventId()199 void SocPerfPlugin::InitEventId()
200 {
201 PluginConfig itemLists = PluginMgr::GetInstance().GetConfig(PLUGIN_NAME, CONFIG_NAME_SOCPERF_EVENT_ID);
202 for (const Item& item : itemLists.itemList) {
203 for (SubItem sub : item.subItemList) {
204 if (sub.name == SOCPERF_TYPE_ID) {
205 RES_TYPE_SCENE_BOARD_ID = atoi(sub.value.c_str());
206 } else if (sub.name == SOCPERF_TYPE_RGM) {
207 RES_TYPE_RGM_BOOTING_STATUS = atoi(sub.value.c_str());
208 }
209 }
210 }
211 PluginMgr::GetInstance().RemoveConfig(PLUGIN_NAME, CONFIG_NAME_SOCPERF_EVENT_ID);
212 }
213
InitBundleNameBoostList()214 bool SocPerfPlugin::InitBundleNameBoostList()
215 {
216 PluginConfig itemLists = PluginMgr::GetInstance().GetConfig(PLUGIN_NAME,
217 CONFIG_NAME_SOCPERF_BUNDLE_NAME_BOOST_LIST);
218 bool ret = false;
219 for (const Item& item : itemLists.itemList) {
220 for (SubItem sub : item.subItemList) {
221 if (sub.name == SUB_ITEM_KEY_NAME_APP_USE_CAMERA_BOOST) {
222 ret = HandleSubValue(sub.value.c_str());
223 }
224 }
225 }
226 PluginMgr::GetInstance().RemoveConfig(PLUGIN_NAME, CONFIG_NAME_SOCPERF_BUNDLE_NAME_BOOST_LIST);
227 return ret;
228 }
229
HandleSubValue(const std::string & subValue)230 bool SocPerfPlugin::HandleSubValue(const std::string& subValue)
231 {
232 if (subValue.empty()) {
233 return false;
234 }
235 std::stringstream sstream(subValue);
236 std::string bundleName;
237 while (std::getline(sstream, bundleName, ',')) {
238 appNameUseCamera_.insert(bundleName);
239 }
240 return true;
241 }
242
InitFunctionMap()243 void SocPerfPlugin::InitFunctionMap()
244 {
245 functionMap = {
246 { RES_TYPE_WINDOW_FOCUS,
247 [this](const std::shared_ptr<ResData>& data) { HandleWindowFocus(data); } },
248 { RES_TYPE_CLICK_RECOGNIZE,
249 [this](const std::shared_ptr<ResData>& data) { HandleEventClick(data); } },
250 { RES_TYPE_LOAD_PAGE,
251 [this](const std::shared_ptr<ResData>& data) { HandleLoadPage(data); } },
252 { RES_TYPE_SLIDE_RECOGNIZE,
253 [this](const std::shared_ptr<ResData>& data) { HandleEventSlide(data); } },
254 { RES_TYPE_WEB_GESTURE,
255 [this](const std::shared_ptr<ResData>& data) { HandleEventWebGesture(data); } },
256 { RES_TYPE_POP_PAGE,
257 [this](const std::shared_ptr<ResData>& data) { HandlePopPage(data); } },
258 { RES_TYPE_APP_ABILITY_START,
259 [this](const std::shared_ptr<ResData>& data) { HandleAppAbilityStart(data); } },
260 { RES_TYPE_RESIZE_WINDOW,
261 [this](const std::shared_ptr<ResData>& data) { HandleResizeWindow(data); } },
262 { RES_TYPE_MOVE_WINDOW,
263 [this](const std::shared_ptr<ResData>& data) { HandleMoveWindow(data); } },
264 { RES_TYPE_SHOW_REMOTE_ANIMATION,
265 [this](const std::shared_ptr<ResData>& data) { HandleRemoteAnimation(data); } },
266 { RES_TYPE_DRAG_STATUS_BAR,
267 [this](const std::shared_ptr<ResData>& data) { HandleDragStatusBar(data); } },
268 { RES_TYPE_WEB_GESTURE_MOVE,
269 [this](const std::shared_ptr<ResData>& data) { HandleWebGestureMove(data); } },
270 { RES_TYPE_WEB_SLIDE_NORMAL,
271 [this](const std::shared_ptr<ResData>& data) { HandleWebSlideNormal(data); } },
272 { RES_TYPE_LOAD_URL,
273 [this](const std::shared_ptr<ResData>& data) { HandleLoadUrl(data); } },
274 { RES_TYPE_MOUSEWHEEL,
275 [this](const std::shared_ptr<ResData>& data) { HandleMousewheel(data); } },
276 { RES_TYPE_APP_STATE_CHANGE,
277 [this](const std::shared_ptr<ResData>& data) { HandleAppStateChange(data); } },
278 { RES_TYPE_DEVICE_MODE_STATUS,
279 [this](const std::shared_ptr<ResData>& data) { HandleDeviceModeStatusChange(data); } },
280 { RES_TYPE_ACCOUNT_ACTIVATING,
281 [this](const std::shared_ptr<ResData>& data) { HandleSocperfAccountActivating(data); } },
282 { RES_TYPE_WEB_DRAG_RESIZE,
283 [this](const std::shared_ptr<ResData>& data) { HandleWebDragResize(data); } },
284 #ifdef RESSCHED_RESOURCESCHEDULE_FILE_COPY_SOC_PERF_ENABLE
285 { RES_TYPE_FILE_COPY_STATUS,
286 [this](const std::shared_ptr<ResData>& data) { HandleFileCopyStatus(data); } },
287 #endif
288 };
289 AddEventToFunctionMap();
290 }
291
AddEventToFunctionMap()292 void SocPerfPlugin::AddEventToFunctionMap()
293 {
294 #ifdef RESSCHED_RESOURCESCHEDULE_CUST_SOC_PERF_ENABLE
295 functionMap.insert(std::make_pair(RES_TYPE_ANCO_CUST,
296 [this](const std::shared_ptr<ResData>& data) { HandleCustEvent(data); }));
297 functionMap.insert(std::make_pair(RES_TYPE_SOCPERF_CUST_EVENT_BEGIN,
298 [this](const std::shared_ptr<ResData>& data) { HandleCustEventBegin(data); }));
299 functionMap.insert(std::make_pair(RES_TYPE_SOCPERF_CUST_EVENT_END,
300 [this](const std::shared_ptr<ResData>& data) { HandleCustEventEnd(data); }));
301 #endif // RESSCHED_RESOURCESCHEDULE_CUST_SOC_PERF_ENABLE
302 functionMap.insert(std::make_pair(RES_TYPE_ONLY_PERF_APP_COLD_START,
303 [this](const std::shared_ptr<ResData>& data) { HandleAppColdStartEx(data); }));
304 functionMap.insert(std::make_pair(RES_TYPE_SCENE_ROTATION,
305 [this](const std::shared_ptr<ResData>& data) { HandleSceneRotation(data); }));
306 functionMap.insert(std::make_pair(RES_TYPE_BMM_MONITER_CHANGE_EVENT,
307 [this](const std::shared_ptr<ResData>& data) { HandleBmmMoniterStatus(data); }));
308 functionMap.insert(std::make_pair(RES_TYPE_POWER_MODE_CHANGED,
309 [this](const std::shared_ptr<ResData>& data) { HandlePowerModeChanged(data); }));
310 functionMap.insert(std::make_pair(RES_TYPE_SCREEN_STATUS,
311 [this](const std::shared_ptr<ResData>& data) { HandleScreenStatusAnalysis(data); }));
312 functionMap.insert(std::make_pair(RES_TYPE_APP_GAME_BOOST_EVENT,
313 [this](const std::shared_ptr<ResData>& data) { HandleGameBoost(data); }));
314 functionMap.insert(std::make_pair(RES_TYPE_KEY_EVENT,
315 [this](const std::shared_ptr<ResData>& data) { HandleEventKey(data); }));
316 #ifdef RESSCHED_RESOURCESCHEDULE_CROWN_POWER_KEY_ENABLE
317 functionMap.insert(std::make_pair(RES_TYPE_MMI_INPUT_POWER_KEY,
318 [this](const std::shared_ptr<ResData>& data) { HandlePowerEventKey(data); }));
319 functionMap.insert(std::make_pair(RES_TYPE_CROWN_ROTATION_STATUS,
320 [this](const std::shared_ptr<ResData>& data) { HandleCrownRotation(data); }));
321 #endif // RESSCHED_RESOURCESCHEDULE_CROWN_POWER_KEY_ENABLE
322 functionMap.insert(std::make_pair(RES_TYPE_APP_INSTALL_UNINSTALL,
323 [this](const std::shared_ptr<ResData>& data) { HandleUninstallEvent(data); }));
324 functionMap.insert(std::make_pair(RES_TYPE_PROCESS_STATE_CHANGE,
325 [this](const std::shared_ptr<ResData>& data) { HandleProcessStateChange(data); }));
326 functionMap.insert(std::make_pair(RES_TYPE_REPORT_CAMERA_STATE,
327 [this](const std::shared_ptr<ResData>& data) { HandleCameraStateChange(data); }));
328 if (RES_TYPE_SCENE_BOARD_ID != 0) {
329 functionMap.insert(std::make_pair(RES_TYPE_SCENE_BOARD_ID,
330 [this](const std::shared_ptr<ResData>& data) { HandleSocperfSceneBoard(data); }));
331 }
332 if (RES_TYPE_RGM_BOOTING_STATUS != 0) {
333 functionMap.insert(std::make_pair(RES_TYPE_RGM_BOOTING_STATUS,
334 [this](const std::shared_ptr<ResData>& data) { HandleRgmBootingStatus(data); }));
335 }
336 AddOtherEventToFunctionMap();
337 }
338
AddOtherEventToFunctionMap()339 void SocPerfPlugin::AddOtherEventToFunctionMap()
340 {
341 functionMap.insert(std::make_pair(RES_TYPE_RECENT_BUILD,
342 [this](const std::shared_ptr<ResData>& data) { HandleRecentBuild(data); }));
343 socperfGameBoostSwitch_ = InitFeatureSwitch(SUB_ITEM_KEY_NAME_SOCPERF_GAME_BOOST);
344 }
345
InitResTypes()346 void SocPerfPlugin::InitResTypes()
347 {
348 resTypes = {
349 RES_TYPE_WINDOW_FOCUS,
350 RES_TYPE_CLICK_RECOGNIZE,
351 RES_TYPE_KEY_EVENT,
352 RES_TYPE_LOAD_PAGE,
353 RES_TYPE_SLIDE_RECOGNIZE,
354 RES_TYPE_WEB_GESTURE,
355 RES_TYPE_POP_PAGE,
356 RES_TYPE_APP_ABILITY_START,
357 RES_TYPE_RESIZE_WINDOW,
358 RES_TYPE_MOVE_WINDOW,
359 RES_TYPE_SHOW_REMOTE_ANIMATION,
360 RES_TYPE_DRAG_STATUS_BAR,
361 RES_TYPE_WEB_GESTURE_MOVE,
362 RES_TYPE_WEB_SLIDE_NORMAL,
363 RES_TYPE_LOAD_URL,
364 RES_TYPE_MOUSEWHEEL,
365 RES_TYPE_APP_STATE_CHANGE,
366 RES_TYPE_DEVICE_MODE_STATUS,
367 RES_TYPE_ACCOUNT_ACTIVATING,
368 #ifdef RESSCHED_RESOURCESCHEDULE_CUST_SOC_PERF_ENABLE
369 RES_TYPE_ANCO_CUST,
370 RES_TYPE_SOCPERF_CUST_EVENT_BEGIN,
371 RES_TYPE_SOCPERF_CUST_EVENT_END,
372 #endif // RESSCHED_RESOURCESCHEDULE_CUST_SOC_PERF_ENABLE
373 RES_TYPE_ONLY_PERF_APP_COLD_START,
374 RES_TYPE_SCENE_ROTATION,
375 RES_TYPE_BMM_MONITER_CHANGE_EVENT,
376 RES_TYPE_POWER_MODE_CHANGED,
377 RES_TYPE_SCREEN_STATUS,
378 RES_TYPE_APP_GAME_BOOST_EVENT,
379 RES_TYPE_APP_INSTALL_UNINSTALL,
380 RES_TYPE_MMI_INPUT_POWER_KEY,
381 RES_TYPE_CROWN_ROTATION_STATUS,
382 RES_TYPE_WEB_DRAG_RESIZE,
383 RES_TYPE_PROCESS_STATE_CHANGE,
384 RES_TYPE_REPORT_CAMERA_STATE,
385 #ifdef RESSCHED_RESOURCESCHEDULE_FILE_COPY_SOC_PERF_ENABLE
386 RES_TYPE_FILE_COPY_STATUS,
387 #endif
388 };
389 InitOtherResTypes();
390 }
391
InitOtherResTypes()392 void SocPerfPlugin::InitOtherResTypes()
393 {
394 resTypes.insert(RES_TYPE_RECENT_BUILD);
395 if (RES_TYPE_SCENE_BOARD_ID != 0) {
396 resTypes.insert(RES_TYPE_SCENE_BOARD_ID);
397 }
398 if (RES_TYPE_RGM_BOOTING_STATUS != 0) {
399 resTypes.insert(RES_TYPE_RGM_BOOTING_STATUS);
400 }
401 }
402
Disable()403 void SocPerfPlugin::Disable()
404 {
405 functionMap.clear();
406 for (auto resType : resTypes) {
407 PluginMgr::GetInstance().UnSubscribeResource(LIB_NAME, resType);
408 }
409 resTypes.clear();
410 if (handle_ != nullptr) {
411 dlclose(handle_);
412 handle_ = nullptr;
413 }
414 SOC_PERF_LOGI("SocPerfPlugin::Disable success");
415 }
416
DispatchResource(const std::shared_ptr<ResData> & data)417 void SocPerfPlugin::DispatchResource(const std::shared_ptr<ResData>& data)
418 {
419 auto funcIter = functionMap.find(data->resType);
420 if (funcIter != functionMap.end()) {
421 auto function = funcIter->second;
422 if (function) {
423 function(data);
424 }
425 }
426 }
427
InitFeatureSwitch(std::string featureName)428 bool SocPerfPlugin::InitFeatureSwitch(std::string featureName)
429 {
430 PluginConfig itemLists = PluginMgr::GetInstance().GetConfig(PLUGIN_NAME, CONFIG_NAME_SOCPERF_FEATURE_SWITCH);
431 for (const Item& item : itemLists.itemList) {
432 for (SubItem sub : item.subItemList) {
433 if (sub.name == featureName) {
434 return sub.value == "1";
435 }
436 }
437 }
438 return false;
439 }
440
ParsePayload(const std::shared_ptr<ResData> & data,const std::string & key)441 static int32_t ParsePayload(const std::shared_ptr<ResData>& data, const std::string& key)
442 {
443 if (!data->payload.contains(key)) {
444 return INVALID_VALUE;
445 }
446 if (data->payload.at(key).is_string()) {
447 return atoi(data->payload[key].get<std::string>().c_str());
448 }
449 if (data->payload.at(key).is_number_integer()) {
450 return data->payload[key].get<int32_t>();
451 }
452 return INVALID_VALUE;
453 }
454
HandleAppAbilityStart(const std::shared_ptr<ResData> & data)455 void SocPerfPlugin::HandleAppAbilityStart(const std::shared_ptr<ResData>& data)
456 {
457 if (data->value == AppStartType::APP_COLD_START) {
458 if (data->payload != nullptr && data->payload.contains(PRELOAD_MODE) &&
459 atoi(data->payload[PRELOAD_MODE].get<std::string>().c_str()) == 1) {
460 SOC_PERF_LOGI("SocPerfPlugin: socperf->APP_COLD_START is invalid as preload");
461 return;
462 }
463 SOC_PERF_LOGI("SocPerfPlugin: socperf->APP_COLD_START");
464 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_APP_START, "");
465 int32_t appType = INVALID_VALUE;
466 if (reqAppTypeFunc_ != nullptr && data->payload != nullptr && data->payload.contains(BUNDLE_NAME)) {
467 std::string bundleName = data->payload[BUNDLE_NAME].get<std::string>().c_str();
468 appType = reqAppTypeFunc_(bundleName);
469 UpdateUidToAppMsgMap(data, appType, bundleName);
470 }
471 if (appType == APP_TYPE_GAME) {
472 SOC_PERF_LOGI("SocPerfPlugin: socperf->Game cold start");
473 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_GAME_START, "");
474 }
475 } else if (data->value == AppStartType::APP_WARM_START) {
476 SOC_PERF_LOGI("SocPerfPlugin: socperf->APP_WARM_START");
477 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_WARM_START, "");
478 }
479 }
480
UpdateUidToAppMsgMap(const std::shared_ptr<ResData> & data,int32_t appType,const std::string & bundleName)481 bool SocPerfPlugin::UpdateUidToAppMsgMap(const std::shared_ptr<ResData>& data, int32_t appType,
482 const std::string& bundleName)
483 {
484 int32_t uid = GetUidByData(data);
485 if (appType != INVALID_VALUE && appType != INVALID_APP_TYPE && uid != INVALID_VALUE) {
486 AppKeyMessage appMsg(appType, bundleName);
487 uidToAppMsgMap_[uid] = appMsg;
488 return true;
489 }
490 return false;
491 }
492
HandleWindowFocus(const std::shared_ptr<ResData> & data)493 void SocPerfPlugin::HandleWindowFocus(const std::shared_ptr<ResData>& data)
494 {
495 if (data->value == WindowFocusStatus::WINDOW_FOCUS) {
496 SOC_PERF_LOGI("SocPerfPlugin: socperf->WINDOW_SWITCH focus");
497 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_WINDOW_SWITCH, "");
498 UpdateFocusAppType(data, true);
499 } else if (data->value == WindowFocusStatus::WINDOW_UNFOCUS) {
500 UpdateFocusAppType(data, false);
501 }
502 }
503
UpdateWeakActionStatus()504 void SocPerfPlugin::UpdateWeakActionStatus()
505 {
506 bool status = true;
507 for (const int32_t& appUid : focusAppUids_) {
508 if (uidToAppMsgMap_.find(appUid) != uidToAppMsgMap_.end()) {
509 if (keyAppName_.find(uidToAppMsgMap_[appUid].GetBundleName()) != keyAppName_.end()) {
510 status = false;
511 break;
512 } else if (keyAppType_.find(uidToAppMsgMap_[appUid].GetAppType()) != keyAppType_.end()) {
513 status = false;
514 break;
515 }
516 }
517 }
518 if (status != weakActionStatus_) {
519 weakActionStatus_ = status;
520 OHOS::SOCPERF::SocPerfClient::GetInstance().RequestDeviceMode(WEAK_ACTION_MODE, weakActionStatus_);
521 }
522 }
523
UpdateFocusAppType(const std::shared_ptr<ResData> & data,bool focusStatus)524 bool SocPerfPlugin::UpdateFocusAppType(const std::shared_ptr<ResData>& data, bool focusStatus)
525 {
526 int32_t uid = GetUidByData(data);
527 if (uid == INVALID_VALUE) {
528 return false;
529 }
530 SOC_PERF_LOGI("SocPerfPlugin: socperf->UpdateFocusAppType, %{public}d", uid);
531 if (!focusStatus) {
532 focusAppUids_.erase(uid);
533 UpdateWeakActionStatus();
534 isFocusAppsGameType_ = IsFocusAppsAllGame();
535 return true;
536 }
537 focusAppUids_.insert(uid);
538 UpdateWeakActionStatus();
539 int32_t pid = GetPidByData(data, PID_NAME);
540 if (uidToAppMsgMap_.find(uid) != uidToAppMsgMap_.end()) {
541 if (pid != INVALID_VALUE) {
542 pidToAppTypeMap_[pid] = uidToAppMsgMap_[uid].GetAppType();
543 }
544 isFocusAppsGameType_ = UpdatesFocusAppsType(uidToAppMsgMap_[uid].GetAppType());
545 return true;
546 }
547 if (reqAppTypeFunc_ == nullptr) {
548 SOC_PERF_LOGD("SocPerfPlugin: socperf->WINDOW_SWITCH reqAppTypeFunc_ is null");
549 return false;
550 }
551 std::string bundleName = GetBundleNameByUid(uid);
552 int32_t focusAppType = reqAppTypeFunc_(bundleName);
553 if (focusAppType != INVALID_VALUE && focusAppType != INVALID_APP_TYPE) {
554 if (pid != INVALID_VALUE) {
555 pidToAppTypeMap_[pid] = focusAppType;
556 }
557 AppKeyMessage appMsg(focusAppType, bundleName);
558 uidToAppMsgMap_[uid] = appMsg;
559 }
560 isFocusAppsGameType_ = UpdatesFocusAppsType(focusAppType);
561 return true;
562 }
563
IsFocusAppsAllGame()564 bool SocPerfPlugin::IsFocusAppsAllGame()
565 {
566 if (focusAppUids_.empty() || uidToAppMsgMap_.empty()) {
567 unsigned long focusSize = static_cast<unsigned long>(focusAppUids_.size());
568 unsigned long mapSize = static_cast<unsigned long>(uidToAppMsgMap_.size());
569 SOC_PERF_LOGD("SocPerfPlugin: IsFoucsAppsAllGame data is empty, %{public}lu, %{public}lu",
570 focusSize, mapSize);
571 return false;
572 }
573 bool isAllGame = true;
574 for (const int32_t& uid : focusAppUids_) {
575 if (uidToAppMsgMap_.find(uid) == uidToAppMsgMap_.end() ||
576 uidToAppMsgMap_[uid].GetAppType() != APP_TYPE_GAME) {
577 isAllGame = false;
578 break;
579 }
580 }
581 SOC_PERF_LOGI("SocPerfPlugin: IsFoucsAppsAllGame is %{public}d", isAllGame);
582 return isAllGame;
583 }
584
UpdatesFocusAppsType(int32_t appType)585 bool SocPerfPlugin::UpdatesFocusAppsType(int32_t appType)
586 {
587 if (focusAppUids_.size() == 1) {
588 return appType == APP_TYPE_GAME;
589 }
590 return isFocusAppsGameType_ && (appType == APP_TYPE_GAME);
591 }
592
GetBundleNameByUid(const int32_t uid)593 std::string SocPerfPlugin::GetBundleNameByUid(const int32_t uid)
594 {
595 std::string bundleName = "";
596 OHOS::sptr<OHOS::ISystemAbilityManager> systemAbilityManager =
597 OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
598 if (systemAbilityManager == nullptr) {
599 return bundleName;
600 }
601 OHOS::sptr<OHOS::IRemoteObject> object =
602 systemAbilityManager->GetSystemAbility(OHOS::BUNDLE_MGR_SERVICE_SYS_ABILITY_ID);
603 sptr<AppExecFwk::IBundleMgr> iBundleMgr = OHOS::iface_cast<OHOS::AppExecFwk::IBundleMgr>(object);
604 if (!iBundleMgr) {
605 SOC_PERF_LOGD("%{public}s null bundle manager.", __func__);
606 return bundleName;
607 }
608
609 ErrCode ret = iBundleMgr->GetNameForUid(uid, bundleName);
610 if (ret != ERR_OK) {
611 SOC_PERF_LOGE("%{public}s get bundle name failed for %{public}d, err_code:%{public}d.", __func__, uid, ret);
612 }
613 return bundleName;
614 }
615
HandleEventClick(const std::shared_ptr<ResData> & data)616 void SocPerfPlugin::HandleEventClick(const std::shared_ptr<ResData>& data)
617 {
618 if (socperfGameBoostSwitch_ && (isFocusAppsGameType_ || IsGameEvent(data))) {
619 SOC_PERF_LOGD("SocPerfPlugin: socperf->EVENT_CLICK game can not get click");
620 return;
621 }
622 SOC_PERF_LOGD("SocPerfPlugin: socperf->EVENT_CLICK: %{public}lld", (long long)data->value);
623 // touch down event
624 if (data->value == ClickEventType::TOUCH_EVENT_DOWN_MMI) {
625 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_EVENT_TOUCH_DOWN, "");
626 } else if (data->value == ClickEventType::TOUCH_EVENT_DOWN) {
627 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_EVENT_TOUCH_DOWN, "");
628 } else if (data->value == ClickEventType::TOUCH_EVENT_UP) {
629 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_EVENT_TOUCH_DOWN, "");
630 } else if (data->value == ClickEventType::CLICK_EVENT) {
631 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_EVENT_CLICK, "");
632 }
633 }
634
HandleEventKey(const std::shared_ptr<ResData> & data)635 void SocPerfPlugin::HandleEventKey(const std::shared_ptr<ResData>& data)
636 {
637 if (socperfGameBoostSwitch_ && isFocusAppsGameType_) {
638 SOC_PERF_LOGD("SocPerfPlugin: socperf->EVENT_KEY game can not get key_event");
639 return;
640 }
641 SOC_PERF_LOGD("SocPerfPlugin: socperf->EVENT_KEY: %{public}lld", (long long)data->value);
642 // key down event
643 if (data->value == KeyEventType::KEY_EVENT_DOWN) {
644 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_EVENT_KEY_DOWN, "");
645 } else if (data->value == KeyEventType::KEY_EVENT_UP) {
646 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_EVENT_KEY_DOWN, "");
647 }
648 }
649
650 #ifdef RESSCHED_RESOURCESCHEDULE_CROWN_POWER_KEY_ENABLE
HandlePowerEventKey(const std::shared_ptr<ResData> & data)651 void SocPerfPlugin::HandlePowerEventKey(const std::shared_ptr<ResData>& data)
652 {
653 if (data == nullptr) {
654 SOC_PERF_LOGD("SocPerfPlugin: socperf->POWER_KEY null data");
655 return;
656 }
657 SOC_PERF_LOGD("SocPerfPlugin:socperf->POWER_KEY: %{public}lld", (long long)data->value);
658 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_POWER_KEY, "powerkey");
659 }
660
HandleCrownRotation(const std::shared_ptr<ResData> & data)661 void SocPerfPlugin::HandleCrownRotation(const std::shared_ptr<ResData>& data)
662 {
663 if (data == nullptr) {
664 SOC_PERF_LOGD("SocPerfPlugin: socperf->CROWN_ROTATION_STATUS null data");
665 return;
666 }
667 SOC_PERF_LOGD("SocPerfPlugin:socperf->CROWN_ROTATION_STATUS: %{public}lld", (long long)data->value);
668 if (data->value == CrownRotationStatus::CROWN_ROTATION_START) {
669 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_CROWN_ROTATION, true, "");
670 } else if (data->value == CrownRotationStatus::CROWN_ROTATION_END) {
671 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_CROWN_ROTATION, false, "");
672 }
673 }
674 #endif // RESSCHED_RESOURCESCHEDULE_CROWN_POWER_KEY_ENABLE
675
HandleGameBoost(const std::shared_ptr<ResData> & data)676 bool SocPerfPlugin::HandleGameBoost(const std::shared_ptr<ResData>& data)
677 {
678 if (!socperfGameBoostSwitch_ || data == nullptr) {
679 SOC_PERF_LOGD("SocPerfPlugin: socperf->GAME_BOOST null data");
680 return false;
681 }
682 SOC_PERF_LOGD("SocPerfPlugin:socperf->GAME_BOOST: %{public}lld", (long long)data->value);
683 if (data->value == GameBoostState::BOOST_START) {
684 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_GAME_BOOST, true, "");
685 } else if (data->value == GameBoostState::BOOST_END) {
686 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_GAME_BOOST, false, "");
687 }
688 return true;
689 }
690
IsGameEvent(const std::shared_ptr<ResData> & data)691 bool SocPerfPlugin::IsGameEvent(const std::shared_ptr<ResData>& data)
692 {
693 int32_t pid = GetPidByData(data, CLIENT_PID_NAME);
694 if (pid == INVALID_VALUE) {
695 SOC_PERF_LOGD("SocPerfPlugin:socperf->IsGameEvent: %{public}d", pid);
696 return false;
697 }
698 return pidToAppTypeMap_[pid] == APP_TYPE_GAME;
699 }
700
HandleUninstallEvent(const std::shared_ptr<ResData> & data)701 bool SocPerfPlugin::HandleUninstallEvent(const std::shared_ptr<ResData>& data)
702 {
703 if (data == nullptr) {
704 SOC_PERF_LOGD("SocPerfPlugin: socperf->UNINSTALL null data");
705 return false;
706 }
707 if (data->value != AppInstallStatus::APP_UNINSTALL) {
708 return false;
709 }
710 int32_t uid = INVALID_VALUE;
711 if (data->payload == nullptr || !data->payload.contains(UID_NAME) ||
712 !data->payload.at(UID_NAME).is_number_integer()) {
713 return false;
714 }
715 uid = data->payload[UID_NAME].get<std::int32_t>();
716 if (uid == INVALID_VALUE) {
717 return false;
718 }
719 SOC_PERF_LOGI("SocPerfPlugin: socperf->UNINSTALL:%{public}d", uid);
720 uidToAppMsgMap_.erase(uid);
721 return true;
722 }
723
GetUidByData(const std::shared_ptr<ResData> & data)724 int32_t SocPerfPlugin::GetUidByData(const std::shared_ptr<ResData>& data)
725 {
726 int32_t uid = INVALID_VALUE;
727 if (data->payload == nullptr || !data->payload.contains(UID_NAME) || !data->payload.at(UID_NAME).is_string()) {
728 return uid;
729 }
730 uid = atoi(data->payload[UID_NAME].get<std::string>().c_str());
731 return uid;
732 }
733
HandleLoadPage(const std::shared_ptr<ResData> & data)734 void SocPerfPlugin::HandleLoadPage(const std::shared_ptr<ResData>& data)
735 {
736 if (data->value == LOAD_PAGE_START) {
737 SOC_PERF_LOGI("SocPerfPlugin: socperf->PUSH_PAGE_START");
738 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_LOAD_PAGE_START, true, "");
739 } else if (data->value == LOAD_PAGE_COMPLETE) {
740 SOC_PERF_LOGI("SocPerfPlugin: socperf->PUSH_PAGE_COMPLETE");
741 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_LOAD_PAGE_START, false, "");
742 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_LOAD_PAGE_COMPLETE, "");
743 }
744 }
745
HandlePopPage(const std::shared_ptr<ResData> & data)746 void SocPerfPlugin::HandlePopPage(const std::shared_ptr<ResData>& data)
747 {
748 SOC_PERF_LOGI("SocPerfPlugin: socperf->POP_PAGE: %{public}lld", (long long)data->value);
749 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_POP_PAGE, "");
750 }
751
HandleEventSlide(const std::shared_ptr<ResData> & data)752 void SocPerfPlugin::HandleEventSlide(const std::shared_ptr<ResData>& data)
753 {
754 if (socperfGameBoostSwitch_ && (isFocusAppsGameType_ || IsGameEvent(data))) {
755 SOC_PERF_LOGD("SocPerfPlugin: socperf->EVENT_SLIDE game can not get slide");
756 return;
757 }
758 SOC_PERF_LOGD("SocPerfPlugin: socperf->SLIDE_NORMAL: %{public}lld", (long long)data->value);
759 static int counter = 0;
760 static uint64_t lastTime = 0;
761 if (data->value == SlideEventStatus::SLIDE_EVENT_ON || data->value == SlideEventStatus::SLIDE_NORMAL_BEGIN) {
762 auto now = std::chrono::system_clock::now();
763 uint64_t curMs = static_cast<uint64_t>(
764 std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count());
765 if (curMs - lastTime > TIME_INTERVAL) {
766 counter = 0;
767 }
768 lastTime = curMs;
769 counter++;
770 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_EVENT_SLIDE, true, "");
771 } else if (data->value == SlideEventStatus::SLIDE_EVENT_OFF || data->value == SlideEventStatus::SLIDE_NORMAL_END) {
772 counter--;
773 if (counter == 0) {
774 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_EVENT_SLIDE, false, "");
775 }
776 }
777 }
778
HandleEventWebGesture(const std::shared_ptr<ResData> & data)779 void SocPerfPlugin::HandleEventWebGesture(const std::shared_ptr<ResData>& data)
780 {
781 if (data == nullptr) {
782 return;
783 }
784 SOC_PERF_LOGD("SocPerfPlugin: socperf->WEB_GESTURE: %{public}lld", (long long)data->value);
785 if (data->value == WebGesture::WEB_GESTURE_START) {
786 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_EVENT_WEB_GESTURE, true, "");
787 } else if (data->value == WebGesture::WEB_GESTURE_END) {
788 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_EVENT_WEB_GESTURE, false, "");
789 }
790 }
791
HandleResizeWindow(const std::shared_ptr<ResData> & data)792 void SocPerfPlugin::HandleResizeWindow(const std::shared_ptr<ResData>& data)
793 {
794 if (data == nullptr) {
795 return;
796 }
797 SOC_PERF_LOGI("SocPerfPlugin: socperf->RESIZE_WINDOW: %{public}lld", (long long)data->value);
798 if (data->value == WindowResizeType::WINDOW_RESIZING) {
799 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_RESIZE_WINDOW, "");
800 } else if (data->value == WindowResizeType::WINDOW_RESIZE_STOP) {
801 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_RESIZE_WINDOW, false, "");
802 }
803 }
804
HandleMoveWindow(const std::shared_ptr<ResData> & data)805 void SocPerfPlugin::HandleMoveWindow(const std::shared_ptr<ResData>& data)
806 {
807 if (data == nullptr) {
808 return;
809 }
810 SOC_PERF_LOGI("SocPerfPlugin: socperf->MOVE_WINDOW: %{public}lld", (long long)data->value);
811 if (data->value == WindowMoveType::WINDOW_MOVING) {
812 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_MOVE_WINDOW, "");
813 } else if (data->value == WindowMoveType::WINDOW_MOVE_STOP) {
814 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_MOVE_WINDOW, false, "");
815 }
816 }
817
HandleRemoteAnimation(const std::shared_ptr<ResData> & data)818 void SocPerfPlugin::HandleRemoteAnimation(const std::shared_ptr<ResData>& data)
819 {
820 SOC_PERF_LOGI("SocPerfPlugin: socperf->REMOTE_ANIMATION: %{public}lld", (long long)data->value);
821 if (data->value == ShowRemoteAnimationStatus::ANIMATION_BEGIN) {
822 SOC_PERF_LOGI("SocPerfPlugin: socperf->REMOTE_ANIMATION: %{public}lld", (long long)data->value);
823 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_REMOTE_ANIMATION, true, "");
824 } else if (data->value == ShowRemoteAnimationStatus::ANIMATION_END) {
825 SOC_PERF_LOGI("SocPerfPlugin: socperf->REMOTE_ANIMATION: %{public}lld", (long long)data->value);
826 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_REMOTE_ANIMATION, false, "");
827 } else if (data->value == ShowRemoteAnimationStatus::ANIMATION_UNLOCK_BEGIN) {
828 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_REMOTE_UNLOCK, true, "");
829 } else if (data->value == ShowRemoteAnimationStatus::ANIMATION_UNLOCK_END) {
830 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_REMOTE_UNLOCK, false, "");
831 }
832 }
833
HandleDragStatusBar(const std::shared_ptr<ResData> & data)834 void SocPerfPlugin::HandleDragStatusBar(const std::shared_ptr<ResData>& data)
835 {
836 if (data == nullptr) {
837 return;
838 }
839 SOC_PERF_LOGI("SocPerfPlugin: socperf->DRAG_STATUS_BAR: %{public}lld", (long long)data->value);
840 if (data->value == StatusBarDragStatus::DRAG_START) {
841 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_DRAG_STATUS_BAR, "");
842 } else if (data->value == StatusBarDragStatus::DRAG_END) {
843 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_DRAG_STATUS_BAR, false, "");
844 }
845 }
846
HandleWebGestureMove(const std::shared_ptr<ResData> & data)847 void SocPerfPlugin::HandleWebGestureMove(const std::shared_ptr<ResData>& data)
848 {
849 if (data == nullptr) {
850 return;
851 }
852 SOC_PERF_LOGI("SocPerfPlugin: socperf->WEB_GESTURE_MOVE: %{public}lld", (long long)data->value);
853 if (data->value == WebGestureMove::WEB_GESTURE_MOVE_START) {
854 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_WEB_GESTURE_MOVE, true, "");
855 } else if (data->value == WebGestureMove::WEB_GESTURE_MOVE_END) {
856 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_WEB_GESTURE_MOVE, false, "");
857 }
858 }
859
HandleWebSlideNormal(const std::shared_ptr<ResData> & data)860 void SocPerfPlugin::HandleWebSlideNormal(const std::shared_ptr<ResData>& data)
861 {
862 if (data == nullptr) {
863 return;
864 }
865 SOC_PERF_LOGD("SocPerfPlugin: socperf->WEB_SLIDE_NORMAL: %{public}lld", (long long)data->value);
866 if (data->value == WebSlideNormal::WEB_SLIDE_NORMAL_START) {
867 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_WEB_SLIDE_NORMAL, true, "");
868 } else if (data->value == WebSlideNormal::WEB_SLIDE_NORMAL_END) {
869 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_WEB_SLIDE_NORMAL, false, "");
870 }
871 }
872
HandleLoadUrl(const std::shared_ptr<ResData> & data)873 void SocPerfPlugin::HandleLoadUrl(const std::shared_ptr<ResData>& data)
874 {
875 SOC_PERF_LOGI("SocPerfPlugin: socperf->LOAD_URL");
876 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_LOAD_URL, "");
877 }
878
HandleMousewheel(const std::shared_ptr<ResData> & data)879 void SocPerfPlugin::HandleMousewheel(const std::shared_ptr<ResData>& data)
880 {
881 SOC_PERF_LOGI("SocPerfPlugin: socperf->MOUSEWHEEL");
882 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_MOUSEWHEEL, "");
883 }
884
HandleAppStateChange(const std::shared_ptr<ResData> & data)885 bool SocPerfPlugin::HandleAppStateChange(const std::shared_ptr<ResData>& data)
886 {
887 if (data->value != ResType::ProcessStatus::PROCESS_CREATED) {
888 return false;
889 }
890 int extensionType = ParsePayload(data, EXTENSION_TYPE_KEY);
891 if (std::find(ResType::UI_SENSITIVE_EXTENSION.begin(), ResType::UI_SENSITIVE_EXTENSION.end(), extensionType) !=
892 ResType::UI_SENSITIVE_EXTENSION.end()) {
893 if (data->payload != nullptr && data->payload.contains(PRELOAD_MODE) &&
894 atoi(data->payload[PRELOAD_MODE].get<std::string>().c_str()) == 1) {
895 SOC_PERF_LOGI("SocPerfPlugin: socperf->APPSTATECHANGE is invalid as preload");
896 return false;
897 }
898 SOC_PERF_LOGI("SocPerfPlugin: socperf->APPSTATECHANGE");
899 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_APP_START, "");
900 UpdateUidToAppMsgMap(data);
901 return true;
902 }
903 return false;
904 }
905
HandleSocperfSceneBoard(const std::shared_ptr<ResData> & data)906 bool SocPerfPlugin::HandleSocperfSceneBoard(const std::shared_ptr<ResData> &data)
907 {
908 if (data == nullptr) {
909 return false;
910 }
911 SOC_PERF_LOGD("SocPerfPlugin: socperf->ANIMATION: %{public}lld", (long long)data->value);
912 if (data->value == ShowRemoteAnimationStatus::ANIMATION_BEGIN) {
913 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_REMOTE_ANIMATION, true, "");
914 } else if (data->value == ShowRemoteAnimationStatus::ANIMATION_END) {
915 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_REMOTE_ANIMATION, false, "");
916 }
917 return true;
918 }
919
UpdateUidToAppMsgMap(const std::shared_ptr<ResData> & data)920 bool SocPerfPlugin::UpdateUidToAppMsgMap(const std::shared_ptr<ResData>& data)
921 {
922 int32_t uid = GetUidByData(data);
923 if (uid == INVALID_VALUE) {
924 return false;
925 }
926 if (uidToAppMsgMap_.find(uid) != uidToAppMsgMap_.end()) {
927 return true;
928 }
929 if (reqAppTypeFunc_ == nullptr || !data->payload.contains(BUNDLE_NAME)) {
930 return false;
931 }
932 std::string bundleName = data->payload[BUNDLE_NAME].get<std::string>().c_str();
933 int32_t appType = reqAppTypeFunc_(bundleName);
934 if (appType != INVALID_VALUE && appType != INVALID_APP_TYPE) {
935 AppKeyMessage appMsg(appType, bundleName);
936 uidToAppMsgMap_[uid] = appMsg;
937 }
938 return true;
939 }
940
HandleScreenOn()941 void SocPerfPlugin::HandleScreenOn()
942 {
943 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_SCREEN_OFF, false, "");
944 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_SCREEN_ON, true, "");
945 if (deviceMode_ == DISPLAY_MODE_FULL) {
946 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_DISPLAY_MODE_FULL, true, "");
947 } else if (deviceMode_ == DISPLAY_MODE_MAIN) {
948 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_DISPLAY_MODE_MAIN, true, "");
949 }
950 }
951
HandleScreenOff()952 void SocPerfPlugin::HandleScreenOff()
953 {
954 std::lock_guard<ffrt::mutex> xmlLock(screenMutex_);
955 if (screenStatus_ == SCREEN_OFF) {
956 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_SCREEN_ON, false, "");
957 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_SCREEN_OFF, true, "");
958 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_DISPLAY_MODE_FULL, false, "");
959 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_DISPLAY_MODE_MAIN, false, "");
960 }
961 }
962
HandleScreenStatusAnalysis(const std::shared_ptr<ResData> & data)963 bool SocPerfPlugin::HandleScreenStatusAnalysis(const std::shared_ptr<ResData>& data)
964 {
965 if (data == nullptr) {
966 return false;
967 }
968 std::lock_guard<ffrt::mutex> xmlLock(screenMutex_);
969 screenStatus_ = data->value;
970 SOC_PERF_LOGI("SocPerfPlugin: socperf->HandleScreenStatusAnalysis: %{public}lld", (long long)screenStatus_);
971 if (screenStatus_ == SCREEN_ON) {
972 HandleScreenOn();
973 } else if (screenStatus_ == SCREEN_OFF) {
974 // post screen off task with 5000 milliseconds delay, to avoid frequent screen status change.
975 std::function<void()> screenOffFunc = [this]() {
976 HandleScreenOff();
977 };
978 ffrt::submit(screenOffFunc, {}, {}, ffrt::task_attr().delay(SCREEN_OFF_TIME_DELAY));
979 }
980 return true;
981 }
982
HandleDeviceModeStatusChange(const std::shared_ptr<ResData> & data)983 void SocPerfPlugin::HandleDeviceModeStatusChange(const std::shared_ptr<ResData>& data)
984 {
985 if ((data->value != DeviceModeStatus::MODE_ENTER) && (data->value != DeviceModeStatus::MODE_QUIT)) {
986 SOC_PERF_LOGW("SocPerfPlugin: device mode status value is error");
987 return;
988 }
989
990 if (!data->payload.contains(DEVICE_MODE_TYPE_KEY) || !data->payload[DEVICE_MODE_TYPE_KEY].is_string() ||
991 !data->payload.contains(DEVICE_MODE_PAYMODE_NAME) || !data->payload[DEVICE_MODE_PAYMODE_NAME].is_string()) {
992 SOC_PERF_LOGW("SocPerfPlugin: device mode status payload is error");
993 return;
994 }
995 std::lock_guard<ffrt::mutex> xmlLock(screenMutex_);
996 deviceMode_ = data->payload[DEVICE_MODE_PAYMODE_NAME];
997 bool status = (data->value == DeviceModeStatus::MODE_ENTER);
998 const std::string deviceModeType = data->payload[DEVICE_MODE_TYPE_KEY];
999 const std::string deviceModeStr = deviceModeType + ":" + deviceMode_;
1000 OHOS::SOCPERF::SocPerfClient::GetInstance().RequestDeviceMode(deviceModeStr, status);
1001 SOC_PERF_LOGI("SocPerfPlugin: device mode %{public}s status%{public}d", deviceModeStr.c_str(), status);
1002
1003 if (deviceMode_ == DISPLAY_MODE_FULL && screenStatus_ == SCREEN_ON) {
1004 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_DISPLAY_MODE_MAIN, false, "");
1005 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_DISPLAY_MODE_FULL, true, "");
1006 } else if (deviceMode_ == DISPLAY_MODE_MAIN && screenStatus_ == SCREEN_ON) {
1007 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_DISPLAY_MODE_FULL, false, "");
1008 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_DISPLAY_MODE_MAIN, true, "");
1009 }
1010 }
1011
HandlePowerModeChanged(const std::shared_ptr<ResData> & data)1012 bool SocPerfPlugin::HandlePowerModeChanged(const std::shared_ptr<ResData> &data)
1013 {
1014 if (data == nullptr) {
1015 return false;
1016 }
1017 SOC_PERF_LOGI("SocPerfPlugin: socperf->HandlePowerModeChanged: %{public}lld", (long long)data->value);
1018 const std::string powerModeStr = POWER_MODE_KEY + ":" + POWER_MODE;
1019 if (data->value == POWERMODE_ON) {
1020 OHOS::SOCPERF::SocPerfClient::GetInstance().RequestDeviceMode(powerModeStr, true);
1021 } else {
1022 OHOS::SOCPERF::SocPerfClient::GetInstance().RequestDeviceMode(powerModeStr, false);
1023 }
1024 return true;
1025 }
1026
HandleCameraStateChange(const std::shared_ptr<ResData> & data)1027 bool SocPerfPlugin::HandleCameraStateChange(const std::shared_ptr<ResData>& data)
1028 {
1029 if (data == nullptr) {
1030 return false;
1031 }
1032 SOC_PERF_LOGI("SocPerfPlugin: socperf->CAMERA_STATE_CHANGE: %{public}lld", (long long)data->value);
1033 if (data->value == CameraState::CAMERA_CONNECT) {
1034 if (IsAllowBoostScene()) {
1035 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_APP_USE_CAMERA, true, "");
1036 }
1037 } else if (data->value == CameraState::CAMERA_DISCONNECT) {
1038 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_APP_USE_CAMERA, false, "");
1039 }
1040 return true;
1041 }
1042
IsAllowBoostScene()1043 bool SocPerfPlugin::IsAllowBoostScene()
1044 {
1045 bool ret = false;
1046 if (focusAppUids_.empty()) {
1047 return ret;
1048 }
1049
1050 for (const int32_t& uid : focusAppUids_) {
1051 if (uidToAppMsgMap_.find(uid) != uidToAppMsgMap_.end() &&
1052 appNameUseCamera_.find(uidToAppMsgMap_[uid].GetBundleName()) != appNameUseCamera_.end()) {
1053 ret = true;
1054 break;
1055 }
1056 }
1057 return ret;
1058 }
1059
HandleProcessStateChange(const std::shared_ptr<ResData> & data)1060 bool SocPerfPlugin::HandleProcessStateChange(const std::shared_ptr<ResData> &data)
1061 {
1062 if (data != nullptr && data->value == ResType::ProcessStatus::PROCESS_DIED) {
1063 HandleDeadProcess(data);
1064 }
1065 return true;
1066 }
1067
HandleDeadProcess(const std::shared_ptr<ResData> & data)1068 bool SocPerfPlugin::HandleDeadProcess(const std::shared_ptr<ResData>& data)
1069 {
1070 int32_t pid = GetPidByData(data, PID_NAME);
1071 if (pid == INVALID_VALUE) {
1072 return false;
1073 }
1074 pidToAppTypeMap_.erase(pid);
1075 return true;
1076 }
1077
GetPidByData(const std::shared_ptr<ResData> & data,const std::string & key)1078 int32_t SocPerfPlugin::GetPidByData(const std::shared_ptr<ResData>& data, const std::string& key)
1079 {
1080 if (data->payload == nullptr || !data->payload.contains(key) ||
1081 !data->payload.at(key).is_string()) {
1082 SOC_PERF_LOGD("SocPerfPlugin: socperf->HandleDeadProcess invalid data");
1083 return INVALID_VALUE;
1084 }
1085 return atoi(data->payload[key].get<std::string>().c_str());
1086 }
1087
HandleSocperfAccountActivating(const std::shared_ptr<ResData> & data)1088 bool SocPerfPlugin::HandleSocperfAccountActivating(const std::shared_ptr<ResData> &data)
1089 {
1090 if (data == nullptr) {
1091 return false;
1092 }
1093 SOC_PERF_LOGD("SocPerfPlugin: socperf->AccountActivating: %{public}lld", (long long)data->value);
1094 if (data->value == AccountActivatingStatus::ACCOUNT_ACTIVATING_START) {
1095 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_ACCOUNT_ACTIVATING, true, "");
1096 }
1097 return true;
1098 }
1099
1100 #ifdef RESSCHED_RESOURCESCHEDULE_CUST_SOC_PERF_ENABLE
HandleCustEvent(const std::shared_ptr<ResData> & data)1101 bool SocPerfPlugin::HandleCustEvent(const std::shared_ptr<ResData> &data)
1102 {
1103 if (data == nullptr || data->value <= 0) {
1104 return false;
1105 }
1106 SOC_PERF_LOGD("SocPerfPlugin: socperf->Anco: %{public}lld", (long long)data->value);
1107 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(data->value, "");
1108 return true;
1109 }
1110
HandleCustEventBegin(const std::shared_ptr<ResData> & data)1111 bool SocPerfPlugin::HandleCustEventBegin(const std::shared_ptr<ResData> &data)
1112 {
1113 if (data == nullptr || data->value <= 0) {
1114 return false;
1115 }
1116 SOC_PERF_LOGD("SocPerfPlugin: socperf->SOCPERF_CUST_EVENT_BEGIN: %{public}lld", (long long)data->value);
1117 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(data->value, true, "");
1118 return true;
1119 }
1120
HandleCustEventEnd(const std::shared_ptr<ResData> & data)1121 bool SocPerfPlugin::HandleCustEventEnd(const std::shared_ptr<ResData> &data)
1122 {
1123 if (data == nullptr || data->value <= 0) {
1124 return false;
1125 }
1126 SOC_PERF_LOGD("SocPerfPlugin: socperf->SOCPERF_CUST_EVENT_END: %{public}lld", (long long)data->value);
1127 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(data->value, false, "");
1128 return true;
1129 }
1130 #endif // RESSCHED_RESOURCESCHEDULE_CUST_SOC_PERF_ENABLE
1131
HandleRgmBootingStatus(const std::shared_ptr<ResData> & data)1132 bool SocPerfPlugin::HandleRgmBootingStatus(const std::shared_ptr<ResData> &data)
1133 {
1134 if (data == nullptr) {
1135 return false;
1136 }
1137 SOC_PERF_LOGD("SocPerfPlugin: socperf->RGM_BOOTING_STATUS: %{public}lld", (long long)data->value);
1138 if (data->value == 0) {
1139 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_RGM_BOOTING_START, true, "");
1140 }
1141 return true;
1142 }
1143
HandleAppColdStartEx(const std::shared_ptr<ResData> & data)1144 bool SocPerfPlugin::HandleAppColdStartEx(const std::shared_ptr<ResData> &data)
1145 {
1146 if (data == nullptr) {
1147 return false;
1148 }
1149 SOC_PERF_LOGD("SocPerfPlugin: socperf->APP_START_ONLY_PERF: %{public}lld", (long long)data->value);
1150 if (data->value == 0) {
1151 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_APP_START, true, "");
1152 } else if (data->value == 1) {
1153 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_APP_START, false, "");
1154 }
1155 return true;
1156 }
1157
HandleSceneRotation(const std::shared_ptr<ResData> & data)1158 bool SocPerfPlugin::HandleSceneRotation(const std::shared_ptr<ResData> &data)
1159 {
1160 if (data == nullptr) {
1161 return false;
1162 }
1163 SOC_PERF_LOGD("SocPerfPlugin: socperf->PERF_REQUEST_CMD_ID_ROTATION: %{public}lld", (long long)data->value);
1164 if (data->value == 0) {
1165 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_ROTATION, true, "");
1166 } else if (data->value == 1) {
1167 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_ROTATION, false, "");
1168 }
1169 return true;
1170 }
1171
HandleBmmMoniterStatus(const std::shared_ptr<ResData> & data)1172 bool SocPerfPlugin::HandleBmmMoniterStatus(const std::shared_ptr<ResData> &data)
1173 {
1174 if (data == nullptr) {
1175 return false;
1176 }
1177 SOC_PERF_LOGD("SocPerfPlugin: socperf->PERF_REQUEST_CMD_ID_BMM_MONITER_CHANGE: %{public}lld",
1178 (long long)data->value);
1179 if (data->value == BmmMoniterStatus::BMM_BACKGROUND) {
1180 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_BMM_MONITER_START, true, "");
1181 return true;
1182 }
1183 if (data->value == BmmMoniterStatus::BMM_CLOSE) {
1184 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_BMM_MONITER_START, false, "");
1185 return true;
1186 }
1187 return false;
1188 }
1189
HandleWebDragResize(const std::shared_ptr<ResData> & data)1190 void SocPerfPlugin::HandleWebDragResize(const std::shared_ptr<ResData>& data)
1191 {
1192 if (data == nullptr) {
1193 return;
1194 }
1195 SOC_PERF_LOGI("SocPerfPlugin: socperf->WEB_DRAG_RESIZE: %{public}lld", (long long)data->value);
1196 if (data->value == WebDragResizeStatus::WEB_DRAG_START) {
1197 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequest(PERF_REQUEST_CMD_ID_WEB_DRAG_RESIZE, "");
1198 } else if (data->value == WebDragResizeStatus::WEB_DRAG_END) {
1199 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_WEB_DRAG_RESIZE, false, "");
1200 }
1201 }
1202
1203 #ifdef RESSCHED_RESOURCESCHEDULE_FILE_COPY_SOC_PERF_ENABLE
HandleFileCopyStatus(const std::shared_ptr<ResData> & data)1204 bool SocPerfPlugin::HandleFileCopyStatus(const std::shared_ptr<ResData> &data)
1205 {
1206 if (data == nullptr) {
1207 return false;
1208 }
1209 SOC_PERF_LOGD("SocPerfPlugin: socperf->COPY_STATUS: %{public}lld", (long long)data->value);
1210 if (data->value == CopyStatus::COPY_START) {
1211 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_FILE_COPY, true, "");
1212 return true;
1213 }
1214 if (data->value == CopyStatus::COPY_STOP) {
1215 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_FILE_COPY, false, "");
1216 return true;
1217 }
1218 return false;
1219 }
1220 #endif
HandleRecentBuild(const std::shared_ptr<ResData> & data)1221 bool SocPerfPlugin::HandleRecentBuild(const std::shared_ptr<ResData>& data)
1222 {
1223 if (data == nullptr) {
1224 return false;
1225 }
1226 SOC_PERF_LOGD("SocPerfPlugin: socperf->HandleRecentBuild: %{public}lld", (long long)data->value);
1227 if (data->value == RecentBuildStatus::RECENT_BUILD_START) {
1228 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_RECENT_BUILD, true, "");
1229 } else if (data->value == RecentBuildStatus::RECENT_BUILD_STOP) {
1230 OHOS::SOCPERF::SocPerfClient::GetInstance().PerfRequestEx(PERF_REQUEST_CMD_ID_RECENT_BUILD, false, "");
1231 }
1232 return true;
1233 }
1234
OnPluginInit(std::string & libName)1235 extern "C" bool OnPluginInit(std::string& libName)
1236 {
1237 if (libName != LIB_NAME) {
1238 SOC_PERF_LOGE("SocPerfPlugin::OnPluginInit lib name is not match");
1239 return false;
1240 }
1241 SocPerfPlugin::GetInstance().Init();
1242 return true;
1243 }
1244
OnPluginDisable()1245 extern "C" void OnPluginDisable()
1246 {
1247 SocPerfPlugin::GetInstance().Disable();
1248 }
1249
OnDispatchResource(const std::shared_ptr<ResData> & data)1250 extern "C" void OnDispatchResource(const std::shared_ptr<ResData>& data)
1251 {
1252 SocPerfPlugin::GetInstance().DispatchResource(data);
1253 }
1254 } // namespace ResourceSchedule
1255 } // namespace OHOS
1256 #endif // RESSCHED_RESOURCESCHEDULE_SOC_PERF_ENABLE
1257