• 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_DUMP_IPC_START):
147             return HandleScheduleDumpIpcStart(data, reply);
148         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_DUMP_IPC_STOP):
149             return HandleScheduleDumpIpcStop(data, reply);
150         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_DUMP_IPC_STAT):
151             return HandleScheduleDumpIpcStat(data, reply);
152         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_DUMP_FFRT):
153             return HandleScheduleDumpFfrt(data, reply);
154         case static_cast<uint32_t>(IAppScheduler::Message::SCHEDULE_CACHE_PROCESS):
155             return HandleScheduleCacheProcess(data, reply);
156         case static_cast<uint32_t>(IAppScheduler::Message::WATCHDOG_BACKGROUND_STATUS_TRANSACTION):
157             return HandleSetWatchdogBackgroundStatus(data, reply);
158     }
159     return INVALID_FD;
160 }
161 
HandleScheduleForegroundApplication(MessageParcel & data,MessageParcel & reply)162 int32_t AppSchedulerHost::HandleScheduleForegroundApplication(MessageParcel &data, MessageParcel &reply)
163 {
164     HITRACE_METER(HITRACE_TAG_APP);
165     ScheduleForegroundApplication();
166     return NO_ERROR;
167 }
168 
HandleScheduleBackgroundApplication(MessageParcel & data,MessageParcel & reply)169 int32_t AppSchedulerHost::HandleScheduleBackgroundApplication(MessageParcel &data, MessageParcel &reply)
170 {
171     HITRACE_METER(HITRACE_TAG_APP);
172     ScheduleBackgroundApplication();
173     return NO_ERROR;
174 }
175 
HandleScheduleTerminateApplication(MessageParcel & data,MessageParcel & reply)176 int32_t AppSchedulerHost::HandleScheduleTerminateApplication(MessageParcel &data, MessageParcel &reply)
177 {
178     HITRACE_METER(HITRACE_TAG_APP);
179     auto isLastProcess = data.ReadBool();
180     ScheduleTerminateApplication(isLastProcess);
181     return NO_ERROR;
182 }
183 
HandleScheduleLowMemory(MessageParcel & data,MessageParcel & reply)184 int32_t AppSchedulerHost::HandleScheduleLowMemory(MessageParcel &data, MessageParcel &reply)
185 {
186     HITRACE_METER(HITRACE_TAG_APP);
187     ScheduleLowMemory();
188     return NO_ERROR;
189 }
190 
HandleScheduleShrinkMemory(MessageParcel & data,MessageParcel & reply)191 int32_t AppSchedulerHost::HandleScheduleShrinkMemory(MessageParcel &data, MessageParcel &reply)
192 {
193     HITRACE_METER(HITRACE_TAG_APP);
194     ScheduleShrinkMemory(data.ReadInt32());
195     return NO_ERROR;
196 }
197 
HandleScheduleMemoryLevel(MessageParcel & data,MessageParcel & reply)198 int32_t AppSchedulerHost::HandleScheduleMemoryLevel(MessageParcel &data, MessageParcel &reply)
199 {
200     HITRACE_METER(HITRACE_TAG_APP);
201     ScheduleMemoryLevel(data.ReadInt32());
202     return NO_ERROR;
203 }
204 
HandleScheduleHeapMemory(MessageParcel & data,MessageParcel & reply)205 int32_t AppSchedulerHost::HandleScheduleHeapMemory(MessageParcel &data, MessageParcel &reply)
206 {
207     int32_t pid = data.ReadInt32();
208     struct OHOS::AppExecFwk::MallocInfo mallocInfo;
209     ScheduleHeapMemory(pid, mallocInfo);
210     reply.WriteParcelable(&mallocInfo);
211     return NO_ERROR;
212 }
213 
HandleScheduleJsHeapMemory(MessageParcel & data,MessageParcel & reply)214 int32_t AppSchedulerHost::HandleScheduleJsHeapMemory(MessageParcel &data, MessageParcel &reply)
215 {
216     HITRACE_METER(HITRACE_TAG_APP);
217     std::unique_ptr<JsHeapDumpInfo> info(data.ReadParcelable<JsHeapDumpInfo>());
218     if (!info) {
219         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<JsHeapDumpInfo> failed");
220         return ERR_APPEXECFWK_PARCEL_ERROR;
221     }
222     ScheduleJsHeapMemory(*info);
223     return NO_ERROR;
224 }
225 
HandleScheduleLaunchAbility(MessageParcel & data,MessageParcel & reply)226 int32_t AppSchedulerHost::HandleScheduleLaunchAbility(MessageParcel &data, MessageParcel &reply)
227 {
228     HITRACE_METER(HITRACE_TAG_APP);
229     std::unique_ptr<AbilityInfo> abilityInfo(data.ReadParcelable<AbilityInfo>());
230     if (!abilityInfo) {
231         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<AbilityInfo> failed");
232         return ERR_APPEXECFWK_PARCEL_ERROR;
233     }
234 
235     sptr<IRemoteObject> token = nullptr;
236     if (data.ReadBool()) {
237         token = data.ReadRemoteObject();
238     }
239 
240     std::shared_ptr<AAFwk::Want> want(data.ReadParcelable<AAFwk::Want>());
241     auto abilityRecordId = data.ReadInt32();
242     ScheduleLaunchAbility(*abilityInfo, token, want, abilityRecordId);
243     return NO_ERROR;
244 }
245 
HandleScheduleCleanAbility(MessageParcel & data,MessageParcel & reply)246 int32_t AppSchedulerHost::HandleScheduleCleanAbility(MessageParcel &data, MessageParcel &reply)
247 {
248     HITRACE_METER(HITRACE_TAG_APP);
249     sptr<IRemoteObject> token = data.ReadRemoteObject();
250     bool isCacheProcess = data.ReadBool();
251     ScheduleCleanAbility(token, isCacheProcess);
252     return NO_ERROR;
253 }
254 
HandleScheduleLaunchApplication(MessageParcel & data,MessageParcel & reply)255 int32_t AppSchedulerHost::HandleScheduleLaunchApplication(MessageParcel &data, MessageParcel &reply)
256 {
257     HITRACE_METER(HITRACE_TAG_APP);
258     std::unique_ptr<AppLaunchData> launchData(data.ReadParcelable<AppLaunchData>());
259     std::unique_ptr<Configuration> config(data.ReadParcelable<Configuration>());
260     if (!launchData) {
261         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<launchData> failed");
262         return ERR_APPEXECFWK_PARCEL_ERROR;
263     }
264     if (!config) {
265         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<Configuration> failed");
266         return ERR_APPEXECFWK_PARCEL_ERROR;
267     }
268 
269     ScheduleLaunchApplication(*launchData, *config);
270     return NO_ERROR;
271 }
272 
HandleScheduleUpdateApplicationInfoInstalled(MessageParcel & data,MessageParcel & reply)273 int32_t AppSchedulerHost::HandleScheduleUpdateApplicationInfoInstalled(MessageParcel &data, MessageParcel &reply)
274 {
275     HITRACE_METER(HITRACE_TAG_APP);
276     std::unique_ptr<ApplicationInfo> appInfo(data.ReadParcelable<ApplicationInfo>());
277     auto moduleName = data.ReadString();
278     if (!appInfo) {
279         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<ApplicationInfo> failed");
280         return ERR_APPEXECFWK_PARCEL_ERROR;
281     }
282 
283     ScheduleUpdateApplicationInfoInstalled(*appInfo, moduleName);
284     return NO_ERROR;
285 }
286 
HandleScheduleAbilityStage(MessageParcel & data,MessageParcel & reply)287 int32_t AppSchedulerHost::HandleScheduleAbilityStage(MessageParcel &data, MessageParcel &reply)
288 {
289     HITRACE_METER(HITRACE_TAG_APP);
290     std::unique_ptr<HapModuleInfo> abilityStage(data.ReadParcelable<HapModuleInfo>());
291     if (!abilityStage) {
292         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<launchData> failed");
293         return ERR_APPEXECFWK_PARCEL_ERROR;
294     }
295 
296     ScheduleAbilityStage(*abilityStage);
297     return NO_ERROR;
298 }
299 
HandleScheduleProfileChanged(MessageParcel & data,MessageParcel & reply)300 int32_t AppSchedulerHost::HandleScheduleProfileChanged(MessageParcel &data, MessageParcel &reply)
301 {
302     HITRACE_METER(HITRACE_TAG_APP);
303     std::unique_ptr<Profile> profile(data.ReadParcelable<Profile>());
304     if (!profile) {
305         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<Profile> failed");
306         return ERR_APPEXECFWK_PARCEL_ERROR;
307     }
308 
309     ScheduleProfileChanged(*profile);
310     return NO_ERROR;
311 }
312 
HandleScheduleConfigurationUpdated(MessageParcel & data,MessageParcel & reply)313 int32_t AppSchedulerHost::HandleScheduleConfigurationUpdated(MessageParcel &data, MessageParcel &reply)
314 {
315     HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
316     HITRACE_METER(HITRACE_TAG_APP);
317     std::unique_ptr<Configuration> configuration(data.ReadParcelable<Configuration>());
318     if (!configuration) {
319         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<Configuration> failed");
320         return ERR_APPEXECFWK_PARCEL_ERROR;
321     }
322 
323     ScheduleConfigurationUpdated(*configuration);
324     return NO_ERROR;
325 }
326 
HandleScheduleProcessSecurityExit(MessageParcel & data,MessageParcel & reply)327 int32_t AppSchedulerHost::HandleScheduleProcessSecurityExit(MessageParcel &data, MessageParcel &reply)
328 {
329     HITRACE_METER(HITRACE_TAG_APP);
330     ScheduleProcessSecurityExit();
331     return NO_ERROR;
332 }
333 
HandleScheduleClearPageStack(MessageParcel & data,MessageParcel & reply)334 int32_t AppSchedulerHost::HandleScheduleClearPageStack(MessageParcel &data, MessageParcel &reply)
335 {
336     HITRACE_METER(HITRACE_TAG_APP);
337     ScheduleClearPageStack();
338     return NO_ERROR;
339 }
340 
HandleScheduleAcceptWant(MessageParcel & data,MessageParcel & reply)341 int32_t AppSchedulerHost::HandleScheduleAcceptWant(MessageParcel &data, MessageParcel &reply)
342 {
343     HITRACE_METER(HITRACE_TAG_APP);
344     auto want = std::shared_ptr<AAFwk::Want>(data.ReadParcelable<AAFwk::Want>());
345     if (want == nullptr) {
346         TAG_LOGE(AAFwkTag::APPMGR, "want is nullptr");
347         return ERR_INVALID_VALUE;
348     }
349     auto moduleName = data.ReadString();
350     ScheduleAcceptWant(*want, moduleName);
351     return NO_ERROR;
352 }
353 
HandleSchedulePrepareTerminate(MessageParcel & data,MessageParcel & reply)354 int32_t AppSchedulerHost::HandleSchedulePrepareTerminate(MessageParcel &data, MessageParcel &reply)
355 {
356     HITRACE_METER(HITRACE_TAG_APP);
357     auto moduleName = data.ReadString();
358     SchedulePrepareTerminate(moduleName);
359     return NO_ERROR;
360 }
361 
HandleScheduleNewProcessRequest(MessageParcel & data,MessageParcel & reply)362 int32_t AppSchedulerHost::HandleScheduleNewProcessRequest(MessageParcel &data, MessageParcel &reply)
363 {
364     TAG_LOGD(AAFwkTag::APPMGR, "call.");
365     HITRACE_METER(HITRACE_TAG_APP);
366     auto want = std::shared_ptr<AAFwk::Want>(data.ReadParcelable<AAFwk::Want>());
367     if (want == nullptr) {
368         TAG_LOGE(AAFwkTag::APPMGR, "want is nullptr");
369         return ERR_INVALID_VALUE;
370     }
371     auto moduleName = data.ReadString();
372     ScheduleNewProcessRequest(*want, moduleName);
373     return NO_ERROR;
374 }
375 
HandleNotifyLoadRepairPatch(MessageParcel & data,MessageParcel & reply)376 int32_t AppSchedulerHost::HandleNotifyLoadRepairPatch(MessageParcel &data, MessageParcel &reply)
377 {
378     HITRACE_METER(HITRACE_TAG_APP);
379     std::string bundleName = data.ReadString();
380     auto callback = iface_cast<IQuickFixCallback>(data.ReadRemoteObject());
381     if (callback == nullptr) {
382         TAG_LOGE(AAFwkTag::APPMGR, "Callback is null.");
383         return ERR_INVALID_VALUE;
384     }
385     auto recordId = data.ReadInt32();
386     ScheduleNotifyLoadRepairPatch(bundleName, callback, recordId);
387     return NO_ERROR;
388 }
389 
HandleNotifyHotReloadPage(MessageParcel & data,MessageParcel & reply)390 int32_t AppSchedulerHost::HandleNotifyHotReloadPage(MessageParcel &data, MessageParcel &reply)
391 {
392     HITRACE_METER(HITRACE_TAG_APP);
393     auto callback = iface_cast<IQuickFixCallback>(data.ReadRemoteObject());
394     if (callback == nullptr) {
395         TAG_LOGE(AAFwkTag::APPMGR, "Callback is null.");
396         return ERR_INVALID_VALUE;
397     }
398     auto recordId = data.ReadInt32();
399     ScheduleNotifyHotReloadPage(callback, recordId);
400     return NO_ERROR;
401 }
402 
HandleNotifyUnLoadRepairPatch(MessageParcel & data,MessageParcel & reply)403 int32_t AppSchedulerHost::HandleNotifyUnLoadRepairPatch(MessageParcel &data, MessageParcel &reply)
404 {
405     HITRACE_METER(HITRACE_TAG_APP);
406     std::string bundleName = data.ReadString();
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     ScheduleNotifyUnLoadRepairPatch(bundleName, callback, recordId);
414     return NO_ERROR;
415 }
416 
HandleNotifyAppFault(MessageParcel & data,MessageParcel & reply)417 int32_t AppSchedulerHost::HandleNotifyAppFault(MessageParcel &data, MessageParcel &reply)
418 {
419     std::unique_ptr<FaultData> faultData(data.ReadParcelable<FaultData>());
420     if (faultData == nullptr) {
421         TAG_LOGE(AAFwkTag::APPMGR, "ReadParcelable<FaultData> failed");
422         return ERR_INVALID_VALUE;
423     }
424 
425     int32_t result = ScheduleNotifyAppFault(*faultData);
426     if (!reply.WriteInt32(result)) {
427         TAG_LOGE(AAFwkTag::APPMGR, "reply write failed.");
428         return ERR_INVALID_VALUE;
429     }
430     return NO_ERROR;
431 }
432 
HandleScheduleChangeAppGcState(MessageParcel & data,MessageParcel & reply)433 int32_t AppSchedulerHost::HandleScheduleChangeAppGcState(MessageParcel &data, MessageParcel &reply)
434 {
435     int32_t state = data.ReadInt32();
436     int32_t result = ScheduleChangeAppGcState(state);
437     if (!reply.WriteInt32(result)) {
438         TAG_LOGE(AAFwkTag::APPMGR, "reply write failed.");
439         return ERR_INVALID_VALUE;
440     }
441     return NO_ERROR;
442 }
443 
HandleAttachAppDebug(MessageParcel & data,MessageParcel & reply)444 int32_t AppSchedulerHost::HandleAttachAppDebug(MessageParcel &data, MessageParcel &reply)
445 {
446     HITRACE_METER(HITRACE_TAG_APP);
447     auto isDebugFromLocal = data.ReadBool();
448     AttachAppDebug(isDebugFromLocal);
449     return NO_ERROR;
450 }
451 
HandleDetachAppDebug(MessageParcel & data,MessageParcel & reply)452 int32_t AppSchedulerHost::HandleDetachAppDebug(MessageParcel &data, MessageParcel &reply)
453 {
454     HITRACE_METER(HITRACE_TAG_APP);
455     DetachAppDebug();
456     return NO_ERROR;
457 }
458 
HandleScheduleDumpIpcStart(MessageParcel & data,MessageParcel & reply)459 int32_t AppSchedulerHost::HandleScheduleDumpIpcStart(MessageParcel &data, MessageParcel &reply)
460 {
461     HITRACE_METER(HITRACE_TAG_APP);
462     std::string result;
463     ScheduleDumpIpcStart(result);
464     if (!reply.WriteString(result)) {
465         TAG_LOGE(AAFwkTag::APPMGR, "Fail to write string of ScheduleDumpIpcStart result");
466         return ERR_INVALID_VALUE;
467     }
468     return NO_ERROR;
469 }
470 
HandleScheduleDumpIpcStop(MessageParcel & data,MessageParcel & reply)471 int32_t AppSchedulerHost::HandleScheduleDumpIpcStop(MessageParcel &data, MessageParcel &reply)
472 {
473     HITRACE_METER(HITRACE_TAG_APP);
474     std::string result;
475     ScheduleDumpIpcStop(result);
476     if (!reply.WriteString(result)) {
477         TAG_LOGE(AAFwkTag::APPMGR, "Fail to write string of ScheduleDumpIpcStop result");
478         return ERR_INVALID_VALUE;
479     }
480     return NO_ERROR;
481 }
482 
HandleScheduleDumpIpcStat(MessageParcel & data,MessageParcel & reply)483 int32_t AppSchedulerHost::HandleScheduleDumpIpcStat(MessageParcel &data, MessageParcel &reply)
484 {
485     HITRACE_METER(HITRACE_TAG_APP);
486     std::string result;
487     ScheduleDumpIpcStat(result);
488     if (!reply.WriteString(result)) {
489         TAG_LOGE(AAFwkTag::APPMGR, "Fail to write string of ScheduleDumpIpcStat result");
490         return ERR_INVALID_VALUE;
491     }
492     return NO_ERROR;
493 }
494 
HandleScheduleCacheProcess(MessageParcel & data,MessageParcel & reply)495 int32_t AppSchedulerHost::HandleScheduleCacheProcess(MessageParcel &data, MessageParcel &reply)
496 {
497     HITRACE_METER(HITRACE_TAG_APP);
498     ScheduleCacheProcess();
499     return NO_ERROR;
500 }
501 
HandleScheduleDumpFfrt(MessageParcel & data,MessageParcel & reply)502 int32_t AppSchedulerHost::HandleScheduleDumpFfrt(MessageParcel &data, MessageParcel &reply)
503 {
504     HITRACE_METER(HITRACE_TAG_APP);
505     std::string result;
506     ScheduleDumpFfrt(result);
507     if (!reply.WriteString(result)) {
508         TAG_LOGE(AAFwkTag::APPMGR, "Fail to write string of ScheduleDumpFfrt result");
509         return ERR_INVALID_VALUE;
510     }
511     return NO_ERROR;
512 }
513 
HandleSetWatchdogBackgroundStatus(MessageParcel & data,MessageParcel & reply)514 int32_t AppSchedulerHost::HandleSetWatchdogBackgroundStatus(MessageParcel &data, MessageParcel &reply)
515 {
516     HITRACE_METER(HITRACE_TAG_APP);
517     bool status = data.ReadBool();
518     SetWatchdogBackgroundStatus(status);
519     return NO_ERROR;
520 }
521 }  // namespace AppExecFwk
522 }  // namespace OHOS
523