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