• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-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 #include "app_scheduler_host.h"
17 #include "ability_info.h"
18 #include "ability_manager_errors.h"
19 #include "appexecfwk_errors.h"
20 #include "hitrace_meter.h"
21 #include "hilog_tag_wrapper.h"
22 #include "ipc_types.h"
23 
24 namespace OHOS {
25 namespace AppExecFwk {
AppSchedulerHost()26 AppSchedulerHost::AppSchedulerHost()
27 {
28     InitMemberFuncMap();
29 }
30 
InitMemberFuncMap()31 void AppSchedulerHost::InitMemberFuncMap() {}
32 
~AppSchedulerHost()33 AppSchedulerHost::~AppSchedulerHost()
34 {
35     TAG_LOGI(AAFwkTag::APPMGR, "AppSchedulerHost destruction");
36 }
37 
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)38 int AppSchedulerHost::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)
39 {
40     TAG_LOGD(AAFwkTag::APPMGR, "AppSchedulerHost::OnReceived, code = %{public}u, flags= %{public}d.", code,
41         option.GetFlags());
42     HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
43     std::u16string descriptor = AppSchedulerHost::GetDescriptor();
44     std::u16string remoteDescriptor = data.ReadInterfaceToken();
45     if (descriptor != remoteDescriptor) {
46         TAG_LOGE(AAFwkTag::APPMGR, "local descriptor is not equal to remote");
47         return ERR_INVALID_STATE;
48     }
49     return OnRemoteRequestInner(code, data, reply, option);
50 }
51 
OnRemoteRequestInner(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)52 int32_t AppSchedulerHost::OnRemoteRequestInner(uint32_t code, MessageParcel &data,
53     MessageParcel &reply, MessageOption &option)
54 {
55     int retCode = ERR_OK;
56     retCode = OnRemoteRequestInnerFirst(code, data, reply, option);
57     if (retCode != INVALID_FD) {
58         return retCode;
59     }
60     retCode = OnRemoteRequestInnerSecond(code, data, reply, option);
61     if (retCode != INVALID_FD) {
62         return retCode;
63     }
64     retCode = OnRemoteRequestInnerThird(code, data, reply, option);
65     if (retCode != INVALID_FD) {
66         return retCode;
67     }
68     TAG_LOGD(AAFwkTag::APPMGR, "AppSchedulerHost::OnRemoteRequest end");
69     return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
70 }
71 
OnRemoteRequestInnerFirst(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)72 int32_t AppSchedulerHost::OnRemoteRequestInnerFirst(uint32_t code, MessageParcel &data,
73     MessageParcel &reply, MessageOption &option)
74 {
75     switch (static_cast<uint32_t>(code)) {
76         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_FOREGROUND_APPLICATION_TRANSACTION):
77             return HandleScheduleForegroundApplication(data, reply);
78         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_BACKGROUND_APPLICATION_TRANSACTION):
79             return HandleScheduleBackgroundApplication(data, reply);
80         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_TERMINATE_APPLICATION_TRANSACTION):
81             return HandleScheduleTerminateApplication(data, reply);
82         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_LOWMEMORY_APPLICATION_TRANSACTION):
83             return HandleScheduleLowMemory(data, reply);
84         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_SHRINK_MEMORY_APPLICATION_TRANSACTION):
85             return HandleScheduleShrinkMemory(data, reply);
86         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_MEMORYLEVEL_APPLICATION_TRANSACTION):
87             return HandleScheduleMemoryLevel(data, reply);
88         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_LAUNCH_ABILITY_TRANSACTION):
89             return HandleScheduleLaunchAbility(data, reply);
90         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_CLEAN_ABILITY_TRANSACTION):
91             return HandleScheduleCleanAbility(data, reply);
92         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_LAUNCH_APPLICATION_TRANSACTION):
93             return HandleScheduleLaunchApplication(data, reply);
94         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_PROFILE_CHANGED_TRANSACTION):
95             return HandleScheduleProfileChanged(data, reply);
96         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_CONFIGURATION_UPDATED):
97             return HandleScheduleConfigurationUpdated(data, reply);
98     }
99     return INVALID_FD;
100 }
101 
OnRemoteRequestInnerSecond(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)102 int32_t AppSchedulerHost::OnRemoteRequestInnerSecond(uint32_t code, MessageParcel &data,
103     MessageParcel &reply, MessageOption &option)
104 {
105     switch (static_cast<uint32_t>(code)) {
106         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_PROCESS_SECURITY_EXIT_TRANSACTION):
107             return HandleScheduleProcessSecurityExit(data, reply);
108         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_ABILITY_STAGE_INFO):
109             return HandleScheduleAbilityStage(data, reply);
110         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_CLEAR_PAGE_STACK):
111             return HandleScheduleClearPageStack(data, reply);
112         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_ACCEPT_WANT):
113             return HandleScheduleAcceptWant(data, reply);
114         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_PREPARE_TERMINATE):
115             return HandleSchedulePrepareTerminate(data, reply);
116         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_NEW_PROCESS_REQUEST):
117             return HandleScheduleNewProcessRequest(data, reply);
118         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_NOTIFY_LOAD_REPAIR_PATCH):
119             return HandleNotifyLoadRepairPatch(data, reply);
120         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_NOTIFY_HOT_RELOAD_PAGE):
121             return HandleNotifyHotReloadPage(data, reply);
122         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_NOTIFY_UNLOAD_REPAIR_PATCH):
123             return HandleNotifyUnLoadRepairPatch(data, reply);
124         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_UPDATE_APPLICATION_INFO_INSTALLED):
125             return HandleScheduleUpdateApplicationInfoInstalled(data, reply);
126         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_HEAPMEMORY_APPLICATION_TRANSACTION):
127             return HandleScheduleHeapMemory(data, reply);
128         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_NOTIFY_FAULT):
129             return HandleNotifyAppFault(data, reply);
130     }
131     return INVALID_FD;
132 }
133 
OnRemoteRequestInnerThird(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)134 int32_t AppSchedulerHost::OnRemoteRequestInnerThird(uint32_t code, MessageParcel &data,
135     MessageParcel &reply, MessageOption &option)
136 {
137     switch (static_cast<uint32_t>(code)) {
138         case static_cast<uint32_t>(IAppScheduler::Message::APP_GC_STATE_CHANGE):
139             return HandleScheduleChangeAppGcState(data, reply);
140         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_ATTACH_APP_DEBUG):
141             return HandleAttachAppDebug(data, reply);
142         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_DETACH_APP_DEBUG):
143             return HandleDetachAppDebug(data, reply);
144         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_JSHEAP_MEMORY_APPLICATION_TRANSACTION):
145             return HandleScheduleJsHeapMemory(data, reply);
146         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_CJHEAP_MEMORY_APPLICATION_TRANSACTION):
147             return HandleScheduleCjHeapMemory(data, reply);
148         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_DUMP_IPC_START):
149             return HandleScheduleDumpIpcStart(data, reply);
150         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_DUMP_IPC_STOP):
151             return HandleScheduleDumpIpcStop(data, reply);
152         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_DUMP_IPC_STAT):
153             return HandleScheduleDumpIpcStat(data, reply);
154         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_DUMP_FFRT):
155             return HandleScheduleDumpFfrt(data, reply);
156         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_CACHE_PROCESS):
157             return HandleScheduleCacheProcess(data, reply);
158         case static_cast<uint32_t>(IAppScheduler::Message::WATCHDOG_BACKGROUND_STATUS_TRANSACTION):
159             return HandleSetWatchdogBackgroundStatus(data, reply);
160     }
161     return INVALID_FD;
162 }
163 
HandleScheduleForegroundApplication(MessageParcel & data,MessageParcel & reply)164 int32_t AppSchedulerHost::HandleScheduleForegroundApplication(MessageParcel &data, MessageParcel &reply)
165 {
166     HITRACE_METER(HITRACE_TAG_APP);
167     ScheduleForegroundApplication();
168     return NO_ERROR;
169 }
170 
HandleScheduleBackgroundApplication(MessageParcel & data,MessageParcel & reply)171 int32_t AppSchedulerHost::HandleScheduleBackgroundApplication(MessageParcel &data, MessageParcel &reply)
172 {
173     HITRACE_METER(HITRACE_TAG_APP);
174     ScheduleBackgroundApplication();
175     return NO_ERROR;
176 }
177 
HandleScheduleTerminateApplication(MessageParcel & data,MessageParcel & reply)178 int32_t AppSchedulerHost::HandleScheduleTerminateApplication(MessageParcel &data, MessageParcel &reply)
179 {
180     HITRACE_METER(HITRACE_TAG_APP);
181     auto isLastProcess = data.ReadBool();
182     ScheduleTerminateApplication(isLastProcess);
183     return NO_ERROR;
184 }
185 
HandleScheduleLowMemory(MessageParcel & data,MessageParcel & reply)186 int32_t AppSchedulerHost::HandleScheduleLowMemory(MessageParcel &data, MessageParcel &reply)
187 {
188     HITRACE_METER(HITRACE_TAG_APP);
189     ScheduleLowMemory();
190     return NO_ERROR;
191 }
192 
HandleScheduleShrinkMemory(MessageParcel & data,MessageParcel & reply)193 int32_t AppSchedulerHost::HandleScheduleShrinkMemory(MessageParcel &data, MessageParcel &reply)
194 {
195     HITRACE_METER(HITRACE_TAG_APP);
196     ScheduleShrinkMemory(data.ReadInt32());
197     return NO_ERROR;
198 }
199 
HandleScheduleMemoryLevel(MessageParcel & data,MessageParcel & reply)200 int32_t AppSchedulerHost::HandleScheduleMemoryLevel(MessageParcel &data, MessageParcel &reply)
201 {
202     HITRACE_METER(HITRACE_TAG_APP);
203     ScheduleMemoryLevel(data.ReadInt32());
204     return NO_ERROR;
205 }
206 
HandleScheduleHeapMemory(MessageParcel & data,MessageParcel & reply)207 int32_t AppSchedulerHost::HandleScheduleHeapMemory(MessageParcel &data, MessageParcel &reply)
208 {
209     int32_t pid = data.ReadInt32();
210     struct OHOS::AppExecFwk::MallocInfo mallocInfo;
211     ScheduleHeapMemory(pid, mallocInfo);
212     reply.WriteParcelable(&mallocInfo);
213     return NO_ERROR;
214 }
215 
HandleScheduleJsHeapMemory(MessageParcel & data,MessageParcel & reply)216 int32_t AppSchedulerHost::HandleScheduleJsHeapMemory(MessageParcel &data, MessageParcel &reply)
217 {
218     HITRACE_METER(HITRACE_TAG_APP);
219     std::unique_ptr<JsHeapDumpInfo> info(data.ReadParcelable<JsHeapDumpInfo>());
220     if (!info) {
221         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<JsHeapDumpInfo> failed");
222         return ERR_APPEXECFWK_PARCEL_ERROR;
223     }
224     ScheduleJsHeapMemory(*info);
225     return NO_ERROR;
226 }
227 
HandleScheduleCjHeapMemory(MessageParcel & data,MessageParcel & reply)228 int32_t AppSchedulerHost::HandleScheduleCjHeapMemory(MessageParcel &data, MessageParcel &reply)
229 {
230     HITRACE_METER(HITRACE_TAG_APP);
231     std::unique_ptr<CjHeapDumpInfo> info(data.ReadParcelable<CjHeapDumpInfo>());
232     if (!info) {
233         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<CjHeapDumpInfo> failed");
234         return ERR_APPEXECFWK_PARCEL_ERROR;
235     }
236     ScheduleCjHeapMemory(*info);
237     return NO_ERROR;
238 }
239 
HandleScheduleLaunchAbility(MessageParcel & data,MessageParcel & reply)240 int32_t AppSchedulerHost::HandleScheduleLaunchAbility(MessageParcel &data, MessageParcel &reply)
241 {
242     HITRACE_METER(HITRACE_TAG_APP);
243     std::unique_ptr<AbilityInfo> abilityInfo(data.ReadParcelable<AbilityInfo>());
244     if (!abilityInfo) {
245         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<AbilityInfo> failed");
246         return ERR_APPEXECFWK_PARCEL_ERROR;
247     }
248 
249     sptr<IRemoteObject> token = nullptr;
250     if (data.ReadBool()) {
251         token = data.ReadRemoteObject();
252     }
253 
254     std::shared_ptr<AAFwk::Want> want(data.ReadParcelable<AAFwk::Want>());
255     auto abilityRecordId = data.ReadInt32();
256     ScheduleLaunchAbility(*abilityInfo, token, want, abilityRecordId);
257     return NO_ERROR;
258 }
259 
HandleScheduleCleanAbility(MessageParcel & data,MessageParcel & reply)260 int32_t AppSchedulerHost::HandleScheduleCleanAbility(MessageParcel &data, MessageParcel &reply)
261 {
262     HITRACE_METER(HITRACE_TAG_APP);
263     sptr<IRemoteObject> token = data.ReadRemoteObject();
264     bool isCacheProcess = data.ReadBool();
265     ScheduleCleanAbility(token, isCacheProcess);
266     return NO_ERROR;
267 }
268 
HandleScheduleLaunchApplication(MessageParcel & data,MessageParcel & reply)269 int32_t AppSchedulerHost::HandleScheduleLaunchApplication(MessageParcel &data, MessageParcel &reply)
270 {
271     HITRACE_METER(HITRACE_TAG_APP);
272     std::unique_ptr<AppLaunchData> launchData(data.ReadParcelable<AppLaunchData>());
273     std::unique_ptr<Configuration> config(data.ReadParcelable<Configuration>());
274     if (!launchData) {
275         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<launchData> failed");
276         return ERR_APPEXECFWK_PARCEL_ERROR;
277     }
278     if (!config) {
279         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<Configuration> failed");
280         return ERR_APPEXECFWK_PARCEL_ERROR;
281     }
282 
283     ScheduleLaunchApplication(*launchData, *config);
284     return NO_ERROR;
285 }
286 
HandleScheduleUpdateApplicationInfoInstalled(MessageParcel & data,MessageParcel & reply)287 int32_t AppSchedulerHost::HandleScheduleUpdateApplicationInfoInstalled(MessageParcel &data, MessageParcel &reply)
288 {
289     HITRACE_METER(HITRACE_TAG_APP);
290     std::unique_ptr<ApplicationInfo> appInfo(data.ReadParcelable<ApplicationInfo>());
291     auto moduleName = data.ReadString();
292     if (!appInfo) {
293         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<ApplicationInfo> failed");
294         return ERR_APPEXECFWK_PARCEL_ERROR;
295     }
296 
297     ScheduleUpdateApplicationInfoInstalled(*appInfo, moduleName);
298     return NO_ERROR;
299 }
300 
HandleScheduleAbilityStage(MessageParcel & data,MessageParcel & reply)301 int32_t AppSchedulerHost::HandleScheduleAbilityStage(MessageParcel &data, MessageParcel &reply)
302 {
303     HITRACE_METER(HITRACE_TAG_APP);
304     std::unique_ptr<HapModuleInfo> abilityStage(data.ReadParcelable<HapModuleInfo>());
305     if (!abilityStage) {
306         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<launchData> failed");
307         return ERR_APPEXECFWK_PARCEL_ERROR;
308     }
309 
310     ScheduleAbilityStage(*abilityStage);
311     return NO_ERROR;
312 }
313 
HandleScheduleProfileChanged(MessageParcel & data,MessageParcel & reply)314 int32_t AppSchedulerHost::HandleScheduleProfileChanged(MessageParcel &data, MessageParcel &reply)
315 {
316     HITRACE_METER(HITRACE_TAG_APP);
317     std::unique_ptr<Profile> profile(data.ReadParcelable<Profile>());
318     if (!profile) {
319         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<Profile> failed");
320         return ERR_APPEXECFWK_PARCEL_ERROR;
321     }
322 
323     ScheduleProfileChanged(*profile);
324     return NO_ERROR;
325 }
326 
HandleScheduleConfigurationUpdated(MessageParcel & data,MessageParcel & reply)327 int32_t AppSchedulerHost::HandleScheduleConfigurationUpdated(MessageParcel &data, MessageParcel &reply)
328 {
329     HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
330     HITRACE_METER(HITRACE_TAG_APP);
331     std::unique_ptr<Configuration> configuration(data.ReadParcelable<Configuration>());
332     if (!configuration) {
333         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<Configuration> failed");
334         return ERR_APPEXECFWK_PARCEL_ERROR;
335     }
336 
337     ScheduleConfigurationUpdated(*configuration);
338     return NO_ERROR;
339 }
340 
HandleScheduleProcessSecurityExit(MessageParcel & data,MessageParcel & reply)341 int32_t AppSchedulerHost::HandleScheduleProcessSecurityExit(MessageParcel &data, MessageParcel &reply)
342 {
343     HITRACE_METER(HITRACE_TAG_APP);
344     ScheduleProcessSecurityExit();
345     return NO_ERROR;
346 }
347 
HandleScheduleClearPageStack(MessageParcel & data,MessageParcel & reply)348 int32_t AppSchedulerHost::HandleScheduleClearPageStack(MessageParcel &data, MessageParcel &reply)
349 {
350     HITRACE_METER(HITRACE_TAG_APP);
351     ScheduleClearPageStack();
352     return NO_ERROR;
353 }
354 
HandleScheduleAcceptWant(MessageParcel & data,MessageParcel & reply)355 int32_t AppSchedulerHost::HandleScheduleAcceptWant(MessageParcel &data, MessageParcel &reply)
356 {
357     HITRACE_METER(HITRACE_TAG_APP);
358     auto want = std::shared_ptr<AAFwk::Want>(data.ReadParcelable<AAFwk::Want>());
359     if (want == nullptr) {
360         TAG_LOGE(AAFwkTag::APPMGR, "want is nullptr");
361         return ERR_INVALID_VALUE;
362     }
363     auto moduleName = data.ReadString();
364     ScheduleAcceptWant(*want, moduleName);
365     return NO_ERROR;
366 }
367 
HandleSchedulePrepareTerminate(MessageParcel & data,MessageParcel & reply)368 int32_t AppSchedulerHost::HandleSchedulePrepareTerminate(MessageParcel &data, MessageParcel &reply)
369 {
370     HITRACE_METER(HITRACE_TAG_APP);
371     auto moduleName = data.ReadString();
372     SchedulePrepareTerminate(moduleName);
373     return NO_ERROR;
374 }
375 
HandleScheduleNewProcessRequest(MessageParcel & data,MessageParcel & reply)376 int32_t AppSchedulerHost::HandleScheduleNewProcessRequest(MessageParcel &data, MessageParcel &reply)
377 {
378     TAG_LOGD(AAFwkTag::APPMGR, "call.");
379     HITRACE_METER(HITRACE_TAG_APP);
380     auto want = std::shared_ptr<AAFwk::Want>(data.ReadParcelable<AAFwk::Want>());
381     if (want == nullptr) {
382         TAG_LOGE(AAFwkTag::APPMGR, "want is nullptr");
383         return ERR_INVALID_VALUE;
384     }
385     auto moduleName = data.ReadString();
386     ScheduleNewProcessRequest(*want, moduleName);
387     return NO_ERROR;
388 }
389 
HandleNotifyLoadRepairPatch(MessageParcel & data,MessageParcel & reply)390 int32_t AppSchedulerHost::HandleNotifyLoadRepairPatch(MessageParcel &data, MessageParcel &reply)
391 {
392     HITRACE_METER(HITRACE_TAG_APP);
393     std::string bundleName = data.ReadString();
394     auto callback = iface_cast<IQuickFixCallback>(data.ReadRemoteObject());
395     if (callback == nullptr) {
396         TAG_LOGE(AAFwkTag::APPMGR, "Callback is null.");
397         return ERR_INVALID_VALUE;
398     }
399     auto recordId = data.ReadInt32();
400     ScheduleNotifyLoadRepairPatch(bundleName, callback, recordId);
401     return NO_ERROR;
402 }
403 
HandleNotifyHotReloadPage(MessageParcel & data,MessageParcel & reply)404 int32_t AppSchedulerHost::HandleNotifyHotReloadPage(MessageParcel &data, MessageParcel &reply)
405 {
406     HITRACE_METER(HITRACE_TAG_APP);
407     auto callback = iface_cast<IQuickFixCallback>(data.ReadRemoteObject());
408     if (callback == nullptr) {
409         TAG_LOGE(AAFwkTag::APPMGR, "Callback is null.");
410         return ERR_INVALID_VALUE;
411     }
412     auto recordId = data.ReadInt32();
413     ScheduleNotifyHotReloadPage(callback, recordId);
414     return NO_ERROR;
415 }
416 
HandleNotifyUnLoadRepairPatch(MessageParcel & data,MessageParcel & reply)417 int32_t AppSchedulerHost::HandleNotifyUnLoadRepairPatch(MessageParcel &data, MessageParcel &reply)
418 {
419     HITRACE_METER(HITRACE_TAG_APP);
420     std::string bundleName = data.ReadString();
421     auto callback = iface_cast<IQuickFixCallback>(data.ReadRemoteObject());
422     if (callback == nullptr) {
423         TAG_LOGE(AAFwkTag::APPMGR, "Callback is null.");
424         return ERR_INVALID_VALUE;
425     }
426     auto recordId = data.ReadInt32();
427     ScheduleNotifyUnLoadRepairPatch(bundleName, callback, recordId);
428     return NO_ERROR;
429 }
430 
HandleNotifyAppFault(MessageParcel & data,MessageParcel & reply)431 int32_t AppSchedulerHost::HandleNotifyAppFault(MessageParcel &data, MessageParcel &reply)
432 {
433     std::unique_ptr<FaultData> faultData(data.ReadParcelable<FaultData>());
434     if (faultData == nullptr) {
435         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<FaultData> failed");
436         return ERR_INVALID_VALUE;
437     }
438 
439     int32_t result = ScheduleNotifyAppFault(*faultData);
440     if (!reply.WriteInt32(result)) {
441         TAG_LOGE(AAFwkTag::APPMGR, "reply write failed.");
442         return ERR_INVALID_VALUE;
443     }
444     return NO_ERROR;
445 }
446 
HandleScheduleChangeAppGcState(MessageParcel & data,MessageParcel & reply)447 int32_t AppSchedulerHost::HandleScheduleChangeAppGcState(MessageParcel &data, MessageParcel &reply)
448 {
449     int32_t state = data.ReadInt32();
450     uint64_t tid = data.ReadUint64();
451     int32_t result = ScheduleChangeAppGcState(state, tid);
452     if (!reply.WriteInt32(result)) {
453         TAG_LOGE(AAFwkTag::APPMGR, "reply write failed.");
454         return ERR_INVALID_VALUE;
455     }
456     return NO_ERROR;
457 }
458 
HandleAttachAppDebug(MessageParcel & data,MessageParcel & reply)459 int32_t AppSchedulerHost::HandleAttachAppDebug(MessageParcel &data, MessageParcel &reply)
460 {
461     HITRACE_METER(HITRACE_TAG_APP);
462     auto isDebugFromLocal = data.ReadBool();
463     AttachAppDebug(isDebugFromLocal);
464     return NO_ERROR;
465 }
466 
HandleDetachAppDebug(MessageParcel & data,MessageParcel & reply)467 int32_t AppSchedulerHost::HandleDetachAppDebug(MessageParcel &data, MessageParcel &reply)
468 {
469     HITRACE_METER(HITRACE_TAG_APP);
470     DetachAppDebug();
471     return NO_ERROR;
472 }
473 
HandleScheduleDumpIpcStart(MessageParcel & data,MessageParcel & reply)474 int32_t AppSchedulerHost::HandleScheduleDumpIpcStart(MessageParcel &data, MessageParcel &reply)
475 {
476     HITRACE_METER(HITRACE_TAG_APP);
477     std::string result;
478     ScheduleDumpIpcStart(result);
479     if (!reply.WriteString(result)) {
480         TAG_LOGE(AAFwkTag::APPMGR, "Fail to write string of ScheduleDumpIpcStart result");
481         return ERR_INVALID_VALUE;
482     }
483     return NO_ERROR;
484 }
485 
HandleScheduleDumpIpcStop(MessageParcel & data,MessageParcel & reply)486 int32_t AppSchedulerHost::HandleScheduleDumpIpcStop(MessageParcel &data, MessageParcel &reply)
487 {
488     HITRACE_METER(HITRACE_TAG_APP);
489     std::string result;
490     ScheduleDumpIpcStop(result);
491     if (!reply.WriteString(result)) {
492         TAG_LOGE(AAFwkTag::APPMGR, "Fail to write string of ScheduleDumpIpcStop result");
493         return ERR_INVALID_VALUE;
494     }
495     return NO_ERROR;
496 }
497 
HandleScheduleDumpIpcStat(MessageParcel & data,MessageParcel & reply)498 int32_t AppSchedulerHost::HandleScheduleDumpIpcStat(MessageParcel &data, MessageParcel &reply)
499 {
500     HITRACE_METER(HITRACE_TAG_APP);
501     std::string result;
502     ScheduleDumpIpcStat(result);
503     if (!reply.WriteString(result)) {
504         TAG_LOGE(AAFwkTag::APPMGR, "Fail to write string of ScheduleDumpIpcStat result");
505         return ERR_INVALID_VALUE;
506     }
507     return NO_ERROR;
508 }
509 
HandleScheduleCacheProcess(MessageParcel & data,MessageParcel & reply)510 int32_t AppSchedulerHost::HandleScheduleCacheProcess(MessageParcel &data, MessageParcel &reply)
511 {
512     HITRACE_METER(HITRACE_TAG_APP);
513     ScheduleCacheProcess();
514     return NO_ERROR;
515 }
516 
HandleScheduleDumpFfrt(MessageParcel & data,MessageParcel & reply)517 int32_t AppSchedulerHost::HandleScheduleDumpFfrt(MessageParcel &data, MessageParcel &reply)
518 {
519     HITRACE_METER(HITRACE_TAG_APP);
520     std::string result;
521     ScheduleDumpFfrt(result);
522     if (!reply.WriteString(result)) {
523         TAG_LOGE(AAFwkTag::APPMGR, "Fail to write string of ScheduleDumpFfrt result");
524         return ERR_INVALID_VALUE;
525     }
526     return NO_ERROR;
527 }
528 
HandleSetWatchdogBackgroundStatus(MessageParcel & data,MessageParcel & reply)529 int32_t AppSchedulerHost::HandleSetWatchdogBackgroundStatus(MessageParcel &data, MessageParcel &reply)
530 {
531     HITRACE_METER(HITRACE_TAG_APP);
532     bool status = data.ReadBool();
533     SetWatchdogBackgroundStatus(status);
534     return NO_ERROR;
535 }
536 }  // namespace AppExecFwk
537 }  // namespace OHOS
538