• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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