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