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