diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index b5fb6e0399..ce2521ea75 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -1947,7 +1947,7 @@ private: void ReportAbilitAssociatedStartInfoToRSS(const AppExecFwk::AbilityInfo &abilityInfo, int64_t type, const sptr &callerToken); - void ReportEventToRSS(const AppExecFwk::AbilityInfo &abilityInfo); + void ReportEventToRSS(const AppExecFwk::AbilityInfo &abilityInfo, sptr callerToken); void ReportAppRecoverResult(const int32_t appId, const AppExecFwk::ApplicationInfo &appInfo, const std::string& abilityName, const std::string& result); diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index ef821fcb45..91b217f798 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -1179,7 +1179,7 @@ int AbilityManagerService::StartAbilityInner(const Want &want, const sptr(want)); return connectManager->StartAbility(abilityRequest); } @@ -1198,7 +1198,7 @@ int AbilityManagerService::StartAbilityInner(const Want &want, const sptrStartAbility(abilityRequest); } @@ -1897,7 +1897,7 @@ int32_t AbilityManagerService::RequestDialogServiceInner(const Want &want, const } TAG_LOGD(AAFwkTag::ABILITYMGR, "request dialog service, start service extension,name is %{public}s.", abilityInfo.name.c_str()); - ReportEventToRSS(abilityInfo); + ReportEventToRSS(abilityInfo, callerToken); return connectManager->StartAbility(abilityRequest); } @@ -2368,15 +2368,27 @@ void AbilityManagerService::ReportAbilitAssociatedStartInfoToRSS( ResSchedUtil::GetInstance().ReportAbilitAssociatedStartInfoToRSS(abilityInfo, type, callerUid, callerPid); } -void AbilityManagerService::ReportEventToRSS(const AppExecFwk::AbilityInfo &abilityInfo) +void AbilityManagerService::ReportEventToRSS(const AppExecFwk::AbilityInfo &abilityInfo, + sptr callerToken) { CHECK_POINTER_LOG(taskHandler_, "taskhandler null"); - std::string reason = (abilityInfo.type == AppExecFwk::AbilityType::PAGE) ? - "THAW_BY_START_PAGE_ABILITY" : "THAW_BY_START_NOT_PAGE_ABILITY"; + std::string reason; + if (abilityInfo.type == AppExecFwk::AbilityType::PAGE) { + reason = "THAW_BY_START_PAGE_ABILITY"; + } else if (abilityInfo.type == AppExecFwk::AbilityType::EXTENSION && + abilityInfo.extensionAbilityType == AppExecFwk::ExtensionAbilityType::SERVICE) { + reason = "THAW_BY_START_SERVICE_EXTENSION"; + } else { + reason = "THAW_BY_START_NOT_PAGE_ABILITY"; + } const auto uid = abilityInfo.applicationInfo.uid; const auto bundleName = abilityInfo.applicationInfo.bundleName; - taskHandler_->SubmitTask([reason, uid, bundleName]() { - ResSchedUtil::GetInstance().ReportEventToRSS(uid, bundleName, reason); + auto callerAbility = Token::GetAbilityRecordByToken(callerToken); + const int32_t callerPid = (callerAbility != nullptr) ? callerAbility->GetPid() : IPCSkeleton::GetCallingPid(); + TAG_LOGD(AAFwkTag::ABILITYMGR, "%{public}d_%{public}s reason=%{public}s callerPid=%{public}d", uid, + bundleName.c_str(), reason.c_str(), callerPid); + taskHandler_->SubmitTask([reason, uid, bundleName, callerPid]() { + ResSchedUtil::GetInstance().ReportEventToRSS(uid, bundleName, reason, callerPid); }); } @@ -3818,7 +3830,7 @@ int AbilityManagerService::ConnectLocalAbility(const Want &want, const int32_t u return ERR_INVALID_VALUE; } - ReportEventToRSS(abilityInfo); + ReportEventToRSS(abilityInfo, callerToken); return connectManager->ConnectAbilityLocked(abilityRequest, connect, callerToken, sessionInfo, connectInfo); } @@ -4691,7 +4703,7 @@ sptr AbilityManagerService::AcquireDataAbility( std::shared_ptr dataAbilityManager = GetDataAbilityManagerByUserId(userId); CHECK_POINTER_AND_RETURN(dataAbilityManager, nullptr); - ReportEventToRSS(abilityRequest.abilityInfo); + ReportEventToRSS(abilityRequest.abilityInfo, callerToken); bool isNotHap = isSaCall || isShellCall; UpdateCallerInfo(abilityRequest.want, callerToken); return dataAbilityManager->Acquire(abilityRequest, tryBind, callerToken, isNotHap); @@ -6740,7 +6752,7 @@ int AbilityManagerService::StartAbilityByCall(const Want &want, const sptrDoProcess(afterCheckParam); if (Rosen::SceneBoardJudgement::IsSceneBoardEnabled()) { - ReportEventToRSS(abilityRequest.abilityInfo); + ReportEventToRSS(abilityRequest.abilityInfo, callerToken); abilityRequest.want.SetParam(IS_CALL_BY_SCB, false); auto uiAbilityManager = GetUIAbilityManagerByUserId(oriValidUserId); CHECK_POINTER_AND_RETURN(uiAbilityManager, ERR_INVALID_VALUE); @@ -6752,7 +6764,7 @@ int AbilityManagerService::StartAbilityByCall(const Want &want, const sptrResolveLocked(abilityRequest); @@ -6779,7 +6791,7 @@ int AbilityManagerService::StartAbilityJust(AbilityRequest &abilityRequest, int3 TAG_LOGE(AAFwkTag::ABILITYMGR, "missionListMgr is Null. Designated User Id=%{public}d", validUserId); return ERR_INVALID_VALUE; } - ReportEventToRSS(abilityRequest.abilityInfo); + ReportEventToRSS(abilityRequest.abilityInfo, abilityRequest.callerToken); return missionListMgr->ResolveLocked(abilityRequest); } diff --git a/services/common/include/res_sched_util.h b/services/common/include/res_sched_util.h index 918a10f65d..8639366731 100644 --- a/services/common/include/res_sched_util.h +++ b/services/common/include/res_sched_util.h @@ -35,7 +35,8 @@ public: void ReportAbilitStartInfoToRSS(const AbilityInfo &abilityInfo, int32_t pid, bool isColdStart); void ReportAbilitAssociatedStartInfoToRSS( const AbilityInfo &abilityInfo, int64_t resSchedType, int32_t callerUid, int32_t callerPid); - void ReportEventToRSS(int32_t uid, std::string bundleName, std::string name); + void ReportEventToRSS(const int32_t uid, const std::string &bundleName, const std::string &reason, + const int32_t callerPid = -1); void GetAllFrozenPidsFromRSS(std::unordered_set &frozenPids); private: ResSchedUtil() = default; diff --git a/services/common/src/res_sched_util.cpp b/services/common/src/res_sched_util.cpp index 861b90b403..1d1a5704cc 100644 --- a/services/common/src/res_sched_util.cpp +++ b/services/common/src/res_sched_util.cpp @@ -83,7 +83,8 @@ void ResSchedUtil::ReportAbilitAssociatedStartInfoToRSS( #endif } -void ResSchedUtil::ReportEventToRSS(int32_t uid, std::string bundleName, std::string reason) +void ResSchedUtil::ReportEventToRSS(const int32_t uid, const std::string &bundleName, const std::string &reason, + const int32_t callerPid) { #ifdef RESOURCE_SCHEDULE_SERVICE_ENABLE uint32_t resType = ResourceSchedule::ResType::SYNC_RES_TYPE_THAW_ONE_APP; @@ -92,6 +93,7 @@ void ResSchedUtil::ReportEventToRSS(int32_t uid, std::string bundleName, std::st payload.emplace("pid", -1); payload.emplace("bundleName", bundleName); payload.emplace("reason", reason); + payload.emplace("callerPid", callerPid); nlohmann::json reply; TAG_LOGD(AAFwkTag::DEFAULT, "call"); ResourceSchedule::ResSchedClient::GetInstance().ReportSyncEvent(resType, 0, payload, reply); diff --git a/test/fuzztest/abilitymanagerservicefirst_fuzzer/abilitymanagerservicefirst_fuzzer.cpp b/test/fuzztest/abilitymanagerservicefirst_fuzzer/abilitymanagerservicefirst_fuzzer.cpp index 296d59c318..b3120b5832 100755 --- a/test/fuzztest/abilitymanagerservicefirst_fuzzer/abilitymanagerservicefirst_fuzzer.cpp +++ b/test/fuzztest/abilitymanagerservicefirst_fuzzer/abilitymanagerservicefirst_fuzzer.cpp @@ -96,7 +96,7 @@ void DoSomethingInterestingWithMyAPI1(AbilityManagerService &abilityms, Want& wa abilityms.CheckOptExtensionAbility(want, abilityRequest, int32Param, extensionType); AppExecFwk::AbilityInfo abilityInfo; abilityms.ReportAbilitStartInfoToRSS(abilityInfo); - abilityms.ReportEventToRSS(abilityInfo); + abilityms.ReportEventToRSS(abilityInfo, token); abilityms.StartExtensionAbility(want, token, int32Param, extensionType); abilityms.StopExtensionAbility(want, token, int32Param, extensionType); abilityms.TerminateAbility(token, intParam, &want);