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