• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2025 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 #include "res_sched_mgr.h"
17 
18 #include <cinttypes>
19 #include <map>
20 
21 #include "app_mgr_interface.h"
22 #include "if_system_ability_manager.h"
23 #include "iservice_registry.h"
24 #include "notifier_mgr.h"
25 #include "res_exe_type.h"
26 #include "res_sa_init.h"
27 #include "res_sched_exe_client.h"
28 #include "res_sched_log.h"
29 #include "res_type.h"
30 #include "plugin_mgr.h"
31 #include "hitrace_meter.h"
32 #include "scene_recognizer_mgr.h"
33 #include "system_ability_definition.h"
34 
35 namespace OHOS {
36 namespace ResourceSchedule {
37 using namespace AppExecFwk;
38 namespace {
39     static const std::map<uint32_t, std::string> resTypeToStr = {
40         { ResType::SYNC_RES_TYPE_THAW_ONE_APP, "SYNC_RES_TYPE_THAW_ONE_APP"},
41         { ResType::SYNC_RES_TYPE_GET_ALL_SUSPEND_STATE, "SYNC_RES_TYPE_GET_ALL_SUSPEND_STATE"},
42         { ResType::SYNC_RES_TYPE_GET_THERMAL_DATA, "SYNC_RES_TYPE_GET_THERMAL_DATA"},
43         { ResType::RES_TYPE_SCREEN_STATUS, "SCREEN_STATUS" },
44         { ResType::RES_TYPE_APP_STATE_CHANGE, "APP_STATE_CHANGE" },
45         { ResType::RES_TYPE_ABILITY_STATE_CHANGE, "ABILITY_STATE_CHANGE" },
46         { ResType::RES_TYPE_EXTENSION_STATE_CHANGE, "EXTENSION_STATE_CHANGE" },
47         { ResType::RES_TYPE_PROCESS_STATE_CHANGE, "PROCESS_STATE_CHANGE" },
48         { ResType::RES_TYPE_WINDOW_FOCUS, "WINDOW_FOCUS" },
49         { ResType::RES_TYPE_TRANSIENT_TASK, "TRANSIENT_TASK" },
50         { ResType::RES_TYPE_CONTINUOUS_TASK, "CONTINUOUS_TASK" },
51         { ResType::RES_TYPE_CGROUP_ADJUSTER, "CGROUP_ADJUSTER" },
52         { ResType::RES_TYPE_CLICK_RECOGNIZE, "CLICK_RECOGNIZE" },
53         { ResType::RES_TYPE_PUSH_PAGE, "PUSH_PAGE" },
54         { ResType::RES_TYPE_SLIDE_RECOGNIZE, "SLIDE_RECOGNIZE" },
55         { ResType::RES_TYPE_WINDOW_VISIBILITY_CHANGE, "WINDOW_VISIBILITY_CHANGE" },
56         { ResType::RES_TYPE_REPORT_MMI_PROCESS, "REPORT_MMI_PROCESS" },
57         { ResType::RES_TYPE_REPORT_RENDER_THREAD, "REPORT_RENDER_THREAD" },
58         { ResType::RES_TYPE_APP_INSTALL_UNINSTALL, "APP_INSTALL_UNINSTALL" },
59         { ResType::RES_TYPE_WIFI_CONNECT_STATE_CHANGE, "WIFI_CONNECT_STATE_CHANGE" },
60         { ResType::RES_TYPE_USER_SWITCH, "USER_SWITCH" },
61         { ResType::RES_TYPE_USER_REMOVE, "USER_REMOVE" },
62         { ResType::RES_TYPE_SCREEN_LOCK, "SCREEN_LOCK" },
63         { ResType::RES_TYPE_BLUETOOTH_A2DP_CONNECT_STATE_CHANGE, "BLUETOOTH_A2DP_CONNECT_STATE_CHANGE" },
64         { ResType::RES_TYPE_NETWORK_LATENCY_REQUEST, "NETWORK_LATENCY_REQUEST" },
65         { ResType::RES_TYPE_CALL_STATE_UPDATE, "CALL_STATE_UPDATE" },
66         { ResType::RES_TYPE_THREAD_QOS_CHANGE, "THREAD_QOS_CHANGE" },
67         { ResType::RES_TYPE_AUDIO_RENDER_STATE_CHANGE, "AUDIO_RENDER_STATE_CHANGE" },
68         { ResType::RES_TYPE_AUDIO_RING_MODE_CHANGE, "AUDIO_RING_MODE_CHANGE" },
69         { ResType::RES_TYPE_AUDIO_VOLUME_KEY_CHANGE, "AUDIO_VOLUME_KEY_CHANGE" },
70         { ResType::RES_TYPE_APP_ABILITY_START, "APP_ABILITY_START" },
71         { ResType::RES_TYPE_PRELOAD_APPLICATION, "RES_TYPE_PRELOAD_APPLICATION" },
72         { ResType::RES_TYPE_POP_PAGE, "POP_PAGE" },
73         { ResType::RES_TYPE_WEB_GESTURE, "WEB_GESTURE" },
74         { ResType::RES_TYPE_DEVICE_STILL_STATE_CHANGE, "DEVICE_STILL_STATE_CHANGE" },
75         { ResType::RES_TYPE_RESIZE_WINDOW, "RES_TYPE_RESIZE_WINDOW" },
76         { ResType::RES_TYPE_MOVE_WINDOW, "RES_TYPE_MOVE_WINDOW" },
77         { ResType::RES_TYPE_SHOW_REMOTE_ANIMATION, "RES_TYPE_SHOW_REMOTE_ANIMATION" },
78         { ResType::RES_TYPE_LOAD_PAGE, "RES_TYPE_LOAD_PAGE" },
79         { ResType::RES_TYPE_REPORT_CAMERA_STATE, "RES_TYPE_REPORT_CAMERA_STATE" },
80         { ResType::RES_TYPE_RUNNINGLOCK_STATE, "RES_TYPE_RUNNINGLOCK_STATE" },
81         { ResType::RES_TYPE_DRAG_STATUS_BAR, "RES_TYPE_DRAG_STATUS_BAR" },
82         { ResType::RES_TYPE_REPORT_SCENE_BOARD, "RES_TYPE_REPORT_SCENE_BOARD" },
83         { ResType::RES_TYPE_REPORT_KEY_THREAD, "RES_TYPE_REPORT_KEY_THREAD" },
84         { ResType::RES_TYPE_REPORT_WINDOW_STATE, "RES_TYPE_REPORT_WINDOW_STATE" },
85         { ResType::RES_TYPE_REPORT_SCENE_SCHED, "RES_TYPE_REPORT_SCENE_SCHED" },
86         { ResType::RES_TYPE_WEB_GESTURE_MOVE, "RES_TYPE_WEB_GESTURE_MOVE" },
87         { ResType::RES_TYPE_WEB_SLIDE_NORMAL, "RES_TYPE_WEB_SLIDE_NORMAL" },
88         { ResType::RES_TYPE_LOAD_URL, "RES_TYPE_LOAD_URL" },
89         { ResType::RES_TYPE_MOUSEWHEEL, "RES_TYPE_MOUSEWHEEL" },
90         { ResType::RES_TYPE_WEBVIEW_AUDIO_STATUS_CHANGE, "RES_TYPE_WEBVIEW_AUDIO_STATUS_CHANGE" },
91         { ResType::RES_TYPE_MMI_INPUT_STATE, "RES_TYPE_MMI_INPUT_STATE" },
92         { ResType::RES_TYPE_ANCO_CUST, "RES_TYPE_ANCO_CUST" },
93         { ResType::RES_TYPE_TIMEZONE_CHANGED, "RES_TYPE_TIMEZONE_CHANGED" },
94         { ResType::RES_TYPE_TIME_CHANGED, "RES_TYPE_TIME_CHANGED" },
95         { ResType::RES_TYPE_NITZ_TIME_CHANGED, "RES_TYPE_NITZ_TIME_CHANGED" },
96         { ResType::RES_TYPE_NITZ_TIMEZONE_CHANGED, "RES_TYPE_NITZ_TIMEZONE_CHANGED" },
97         { ResType::RES_TYPE_CHARGING_DISCHARGING, "RES_TYPE_CHARGING_DISCHARGING" },
98         { ResType::RES_TYPE_USB_DEVICE, "RES_TYPE_USB_DEVICE" },
99         { ResType::RES_TYPE_CALL_STATE_CHANGED, "RES_TYPE_CALL_STATE_CHANGED" },
100         { ResType::RES_TYPE_WIFI_P2P_STATE_CHANGED, "RES_TYPE_WIFI_P2P_STATE_CHANGED" },
101         { ResType::RES_TYPE_CONNECTION_OBSERVER, "RES_TYPE_CONNECTION_OBSERVER" },
102         { ResType::RES_TYPE_AV_SESSION_ON_SESSION_CREATE, "RES_TYPE_AV_SESSION_ON_SESSION_CREATE" },
103         { ResType::RES_TYPE_AV_SESSION_ON_SESSION_RELEASE, "RES_TYPE_AV_SESSION_ON_SESSION_RELEASE" },
104         { ResType::RES_TYPE_AV_SESSION_ON_TOP_SESSION_CHANGE, "RES_TYPE_AV_SESSION_ON_TOP_SESSION_CHANGE" },
105         { ResType::RES_TYPE_ON_APP_STATE_CHANGED, "RES_TYPE_ON_APP_STATE_CHANGED" },
106         { ResType::RES_TYPE_EFFICIENCY_RESOURCES_STATE_CHANGED, "RES_TYPE_EFFICIENCY_RESOURCES_STATE_CHANGED" },
107         { ResType::RES_TYPE_AV_CODEC_STATE, "RES_TYPE_AV_CODEC_STATE" },
108         { ResType::RES_TYPE_APP_ASSOCIATED_START, "RES_TYPE_APP_ASSOCIATED_START" },
109         { ResType::RES_TYPE_THERMAL_STATE, "RES_TYPE_THERMAL_STATE"},
110         { ResType::RES_TYPE_SOCPERF_CUST_EVENT_BEGIN, "RES_TYPE_SOCPERF_CUST_EVENT_BEGIN" },
111         { ResType::RES_TYPE_SOCPERF_CUST_EVENT_END, "RES_TYPE_SOCPERF_CUST_EVENT_END" },
112         { ResType::RES_TYPE_WINDOW_DRAWING_CONTENT_CHANGE, "RES_TYPE_WINDOW_DRAWING_CONTENT_CHANGE" },
113         { ResType::RES_TYPE_REPORT_SCREEN_CAPTURE, "RES_TYPE_REPORT_SCREEN_CAPTURE" },
114         { ResType::RES_TYPE_LONG_FRAME, "RES_TYPE_LONG_FRAME" },
115         { ResType::RES_TYPE_KEY_PERF_SCENE, "RES_TYPE_KEY_PERF_SCENE" },
116         { ResType::RES_TYPE_SUPER_LAUNCHER, "RES_TYPE_SUPER_LAUNCHER" },
117         { ResType::RES_TYPE_CAST_SCREEN, "RES_TYPE_CAST_SCREEN" },
118         { ResType::RES_TYPR_SCREEN_COLLABROATION, "RES_TYPR_SCREEN_COLLABROATION" },
119         { ResType::RES_TYPE_SA_CONTROL_APP_EVENT, "RES_TYPE_SA_CONTROL_APP_EVENT" },
120         { ResType::RES_TYPE_SYSTEM_CPU_LOAD, "RES_TYPE_SYSTEM_CPU_LOAD" },
121         { ResType::RES_TYPE_UPLOAD_DOWNLOAD, "RES_TYPE_UPLOAD_DOWNLOAD" },
122         { ResType::RES_TYPE_SPLIT_SCREEN, "RES_TYPE_SPLIT_SCREEN" },
123         { ResType::RES_TYPE_FLOATING_WINDOW, "RES_TYPE_FLOATING_WINDOW" },
124         { ResType::RES_TYPE_REPORT_DISTRIBUTE_TID, "RES_TYPE_REPORT_DISTRIBUTE_TID"},
125         { ResType::RES_TYPE_FRAME_RATE_REPORT, "RES_TYPE_FRAME_RATE_REPORT"},
126         { ResType::RES_TYPE_WEB_DRAG_RESIZE, "RES_TYPE_WEB_DRAG_RESIZE"},
127         { ResType::RES_TYPE_WEBVIEW_SCREEN_CAPTURE, "RES_TYPE_WEBVIEW_SCREEN_CAPTURE"},
128         { ResType::RES_TYPE_WEBVIEW_VIDEO_STATUS_CHANGE, "RES_TYPE_WEBVIEW_VIDEO_STATUS_CHANGE"},
129         { ResType::RES_TYPE_LOCATION_STATUS_CHANGE, "RES_TYPE_LOCATION_STATUS_CHANGE"},
130         { ResType::RES_TYPE_DEVICE_MODE_STATUS, "RES_TYPE_DEVICE_MODE_STATUS"},
131         { ResType::RES_TYPE_REPORT_DISTRIBUTE_COMPONENT_CHANGE, "RES_TYPE_REPORT_DISTRIBUTE_COMPONENT_CHANGE"},
132         { ResType::RES_TYPE_FORM_STATE_CHANGE_EVENT, "RES_TYPE_FORM_STATE_CHANGE_EVENT"},
133         { ResType::RES_TYPE_POWER_MODE_CHANGED, "RES_TYPE_POWER_MODE_CHANGED" },
134         { ResType::RES_TYPE_THERMAL_SCENARIO_REPORT, "RES_TYPE_THERMAL_SCENARIO_REPORT" },
135         { ResType::SYNC_RES_TYPE_SHOULD_FORCE_KILL_PROCESS, "SYNC_RES_TYPE_SHOULD_FORCE_KILL_PROCESS" },
136         { ResType::RES_TYPE_BOOT_COMPLETED, "RES_TYPE_BOOT_COMPLETED" },
137         { ResType::RES_TYPE_CONTINUOUS_STARTUP, "RES_TYPE_CONTINUOUS_STARTUP" },
138         { ResType::RES_TYPE_AUDIO_RENDERER_SILENT_PLAYBACK, "RES_TYPE_AUDIO_RENDERER_SILENT_PLAYBACK"},
139         { ResType::RES_TYPE_REPORT_GAME_SCHED, "RES_TYPE_REPORT_GAME_SCHED" },
140         { ResType::RES_TYPE_REPORT_VSYNC_TID, "RES_TYPE_REPORT_VSYNC_TID" },
141         { ResType::RES_TYPE_BT_SERVICE_EVENT, "RES_TYPE_BT_SERVICE_EVENT"},
142         { ResType::RES_TYPE_APP_FRAME_DROP, "RES_TYPE_APP_FRAME_DROP"},
143         { ResType::RES_TYPE_CLOUD_CONFIG_UPDATE, "RES_TYPE_CLOUD_CONFIG_UPDATE" },
144         { ResType::RES_TYPE_RSS_CLOUD_CONFIG_UPDATE, "RES_TYPE_RSS_CLOUD_CONFIG_UPDATE" },
145         { ResType::RES_TYPE_GAME_INFO_NOTIFY, "RES_TYPE_GAME_INFO_NOTIFY"},
146         { ResType::RES_TYPE_AUDIO_RENDERER_STANDBY, "RES_TYPE_AUDIO_RENDERER_STANDBY" },
147         { ResType::RES_TYPE_APP_GAME_BOOST_EVENT, "RES_TYPE_APP_GAME_BOOST_EVENT" },
148         { ResType::RES_TYPE_GESTURE_ANIMATION, "RES_TYPE_GESTURE_ANIMATION" },
149         { ResType::RES_TYPE_AXIS_EVENT, "RES_TYPE_AXIS_EVENT" },
150         { ResType::RES_TYPE_DISPLAY_MULTI_SCREEN, "RES_TYPE_DISPLAY_MULTI_SCREEN" },
151         { ResType::RES_TYPE_INTENT_CTRL_APP, "RES_TYPE_INTENT_CTRL_APP" },
152         { ResType::RES_TYPE_CROWN_ROTATION_STATUS, "RES_TYPE_CROWN_ROTATION_STATUS" },
153         { ResType::RES_TYPE_RAISE_WORKER_THREAD_PRIORITY, "RES_TYPE_RAISE_WORKER_THREAD_PRIORITY" },
154         { ResType::RES_TYPE_GET_GAME_SCENE_INFO, "RES_TYPE_GET_GAME_SCENE_INFO"},
155         { ResType::RES_TYPE_RED_ENVELOPE, "RES_TYPE_RED_ENVELOPE"},
156         { ResType::RES_TYPE_RECV_ABC_LOAD_COMPLETED, "RES_TYPE_RECV_ABC_LOAD_COMPLETED"},
157         { ResType::RES_TYPE_CHECK_APP_IS_IN_SCHEDULE_LIST, "RES_TYPE_CHECK_APP_IS_IN_SCHEDULE_LIST" },
158         { ResType::RES_TYPE_DYNAMICALLY_SET_SUSPEND_EXEMPT, "RES_TYPE_DYNAMICALLY_SET_SUSPEND_EXEMPT" },
159 #ifdef RESSCHED_RESOURCESCHEDULE_FILE_COPY_SOC_PERF_ENABLE
160         { ResType::RES_TYPE_FILE_COPY_STATUS, "RES_TYPE_FILE_COPY_STATUS" },
161 #endif
162         { ResType::RES_TYPE_PAGE_TRANSITION, "RES_TYPE_PAGE_TRANSITION" },
163     };
GetAppManagerInstance()164     OHOS::sptr<OHOS::AppExecFwk::IAppMgr> GetAppManagerInstance()
165     {
166         OHOS::sptr<OHOS::ISystemAbilityManager> systemAbilityManager =
167             OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
168         if (!systemAbilityManager) {
169             RESSCHED_LOGE("%{public}s : systemAbilityManager nullptr!", __func__);
170             return nullptr;
171         }
172         OHOS::sptr<OHOS::IRemoteObject> object = systemAbilityManager->GetSystemAbility(OHOS::APP_MGR_SERVICE_ID);
173         return OHOS::iface_cast<OHOS::AppExecFwk::IAppMgr>(object);
174     }
175 }
176 
177 IMPLEMENT_SINGLE_INSTANCE(ResSchedMgr);
178 
Init()179 void ResSchedMgr::Init()
180 {
181     PluginMgr::GetInstance().Init();
182     PluginMgr::GetInstance().SetResTypeStrMap(resTypeToStr);
183 
184     if (!killProcess_) {
185         killProcess_ = std::make_shared<KillProcess>();
186     }
187 
188     InitExecutorPlugin(true);
189 }
190 
Stop()191 void ResSchedMgr::Stop()
192 {
193     PluginMgr::GetInstance().Stop();
194 }
195 
ReportData(uint32_t resType,int64_t value,const nlohmann::json & payload)196 void ResSchedMgr::ReportData(uint32_t resType, int64_t value, const nlohmann::json& payload)
197 {
198     ReportDataInner(resType, value, payload);
199     SceneRecognizerMgr::GetInstance().DispatchResource(resType, value, payload);
200 }
201 
ReportDataInner(uint32_t resType,int64_t value,const nlohmann::json & payload)202 void ResSchedMgr::ReportDataInner(uint32_t resType, int64_t value, const nlohmann::json& payload)
203 {
204     RESSCHED_LOGD("%{public}s, receive resType = %{public}u, value = %{public}lld.", __func__,
205         resType, (long long)value);
206     std::string trace_str(__func__);
207     trace_str.append(",resType[").append(std::to_string(resType)).append("]");
208     trace_str.append(",value[").append(std::to_string(value)).append("]");
209     StartTrace(HITRACE_TAG_OHOS, trace_str, -1);
210     PluginMgr::GetInstance().DispatchResource(std::make_shared<ResData>(resType, value, payload));
211     FinishTrace(HITRACE_TAG_OHOS);
212 }
213 
KillProcessByClient(const nlohmann::json & payload)214 int32_t ResSchedMgr::KillProcessByClient(const nlohmann::json& payload)
215 {
216     return killProcess_->KillProcessByPidWithClient(payload);
217 }
218 
InitExecutorPlugin(bool isProcessInit)219 void ResSchedMgr::InitExecutorPlugin(bool isProcessInit)
220 {
221     std::vector<std::string> configStrs = PluginMgr::GetInstance().GetConfigReaderStr();
222     std::vector<std::string> switchStrs = PluginMgr::GetInstance().GetPluginSwitchStr();
223 
224     nlohmann::json payload;
225     nlohmann::json context;
226     payload["config"] = configStrs;
227     payload["switch"] = switchStrs;
228     RESSCHED_LOGI("ResSchedMgr start InitExecutorPlugin");
229     ResSchedExeClient::GetInstance().SendRequestSync(ResExeType::RES_TYPE_EXECUTOR_PLUGIN_INIT, 0, payload, context);
230 
231     if (isProcessInit) {
232         PluginMgr::GetInstance().ParseConfigReader(configStrs);
233         PluginMgr::GetInstance().ParsePluginSwitch(switchStrs);
234     }
235     ResSchedIpcThread::GetInstance().SetInitFlag(true);
236 }
237 
OnApplicationStateChange(int32_t state,int32_t pid)238 void ResSchedMgr::OnApplicationStateChange(int32_t state, int32_t pid)
239 {
240     RESSCHED_LOGD("OnApplicationStateChange called, state: %{public}d, pid : %{public}d .", state, pid);
241     std::lock_guard<std::mutex> autoLock(foregroundPidsMutex_);
242 
243     if (state == static_cast<int32_t>(ApplicationState::APP_STATE_FOREGROUND)) {
244         if (foregroundPids_.find(pid) == foregroundPids_.end()) {
245             foregroundPids_.emplace(pid);
246         }
247     }
248     if (state == static_cast<int32_t>(ApplicationState::APP_STATE_BACKGROUND)
249         || state == static_cast<int32_t>(ApplicationState::APP_STATE_TERMINATED)
250         || state == static_cast<int32_t>(ApplicationState::APP_STATE_END)) {
251         auto item = foregroundPids_.find(pid);
252         if (item != foregroundPids_.end()) {
253             foregroundPids_.erase(item);
254         }
255     }
256 }
257 
IsForegroundApp(int32_t pid)258 bool ResSchedMgr::IsForegroundApp(int32_t pid)
259 {
260     std::lock_guard<std::mutex> autoLock(foregroundPidsMutex_);
261     auto item = foregroundPids_.find(pid);
262     return item != foregroundPids_.end();
263 }
264 
InitForegroundAppInfo()265 void ResSchedMgr::InitForegroundAppInfo()
266 {
267     sptr<OHOS::AppExecFwk::IAppMgr> appManager = GetAppManagerInstance();
268     if (!appManager) {
269         RESSCHED_LOGE("%{public}s app manager nullptr!", __func__);
270         return;
271     }
272     std::vector<AppExecFwk::AppStateData> fgapplist;
273     int32_t err = appManager->GetForegroundApplications(fgapplist);
274     if (err != ERR_OK) {
275         RESSCHED_LOGE("%{public}s GetForegroundApplications failed. err:%{public}d", __func__, err);
276         return;
277     }
278     std::lock_guard<std::mutex> autoLock(foregroundPidsMutex_);
279     for (const auto& item : fgapplist) {
280         if (foregroundPids_.find(item.pid) == foregroundPids_.end()) {
281             foregroundPids_.emplace(item.pid);
282         }
283     }
284     RESSCHED_LOGI("%{public}s succeed", __func__);
285 }
286 
ReportDataInProcess(uint32_t resType,int64_t value,const nlohmann::json & payload)287 extern "C" void ReportDataInProcess(uint32_t resType, int64_t value, const nlohmann::json& payload)
288 {
289     ResSchedMgr::GetInstance().ReportData(resType, value, payload);
290 }
291 
ReportAppStateInProcess(int32_t state,int32_t pid)292 extern "C" void ReportAppStateInProcess(int32_t state, int32_t pid)
293 {
294     NotifierMgr::GetInstance().OnApplicationStateChange(state, pid);
295     ResSchedMgr::GetInstance().OnApplicationStateChange(state, pid);
296 }
297 
ReportProcessStateInProcess(int32_t state,int32_t pid)298 extern "C" void ReportProcessStateInProcess(int32_t state, int32_t pid)
299 {
300     ResSchedMgr::GetInstance().OnApplicationStateChange(state, pid);
301 }
302 
KillProcessInProcess(const nlohmann::json & payload)303 extern "C" int32_t KillProcessInProcess(const nlohmann::json& payload)
304 {
305     return ResSchedMgr::GetInstance().KillProcessByClient(payload);
306 }
307 } // namespace ResourceSchedule
308 } // namespace OHOS
309