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