diff --git a/interfaces/inner_api/app_manager/include/appmgr/ability_state_data.h b/interfaces/inner_api/app_manager/include/appmgr/ability_state_data.h index bb9b747a6c..6835b2428e 100644 --- a/interfaces/inner_api/app_manager/include/appmgr/ability_state_data.h +++ b/interfaces/inner_api/app_manager/include/appmgr/ability_state_data.h @@ -68,6 +68,7 @@ struct AbilityStateData : public Parcelable { std::string callerBundleName; std::string callerAbilityName; bool isInnerNotify = false; + int32_t preloadMode = -1 int32_t hostPid = 0; std::string hostBundleName; }; diff --git a/interfaces/inner_api/app_manager/include/appmgr/app_state_data.h b/interfaces/inner_api/app_manager/include/appmgr/app_state_data.h index 41a3cecf02..2e15af7f45 100644 --- a/interfaces/inner_api/app_manager/include/appmgr/app_state_data.h +++ b/interfaces/inner_api/app_manager/include/appmgr/app_state_data.h @@ -62,7 +62,6 @@ struct AppStateData : public Parcelable { bool isFloatingWindowMode = false; bool isSpecifyTokenId = false; bool isPreloadModule = false; - bool isPrelaunch = false; int32_t pid = -1; int32_t uid = 0; int32_t callerUid = -1; diff --git a/interfaces/inner_api/app_manager/include/appmgr/process_data.h b/interfaces/inner_api/app_manager/include/appmgr/process_data.h index ba74224f7d..7b67a2c50e 100644 --- a/interfaces/inner_api/app_manager/include/appmgr/process_data.h +++ b/interfaces/inner_api/app_manager/include/appmgr/process_data.h @@ -69,7 +69,6 @@ struct ProcessData : public Parcelable { int32_t childUid = -1; bool isPreload = false; bool isPreloadModule = false; - bool isPrelaunch = false; int32_t callerPid = -1; int32_t callerUid = -1; std::string killReason; diff --git a/interfaces/inner_api/app_manager/src/appmgr/ability_state_data.cpp b/interfaces/inner_api/app_manager/src/appmgr/ability_state_data.cpp index e9016fc0f8..da1b163e31 100644 --- a/interfaces/inner_api/app_manager/src/appmgr/ability_state_data.cpp +++ b/interfaces/inner_api/app_manager/src/appmgr/ability_state_data.cpp @@ -98,6 +98,9 @@ bool AbilityStateData::MarshallingOne(Parcel &parcel) const if (!parcel.WriteString(hostBundleName)) { return false; } + if (!parcel.WriteInt32(preloadMode)) { + return false; + } return true; } @@ -136,6 +139,7 @@ bool AbilityStateData::ReadFromParcel(Parcel &parcel) callerPid = parcel.ReadInt32(); hostPid = parcel.ReadInt32(); hostBundleName = parcel.ReadString(); + preloadMode = parcel.ReadInt32(); return true; } diff --git a/interfaces/inner_api/app_manager/src/appmgr/app_state_data.cpp b/interfaces/inner_api/app_manager/src/appmgr/app_state_data.cpp index 3b5b862bb8..3d6dc4715c 100644 --- a/interfaces/inner_api/app_manager/src/appmgr/app_state_data.cpp +++ b/interfaces/inner_api/app_manager/src/appmgr/app_state_data.cpp @@ -28,8 +28,7 @@ bool AppStateData::Marshalling(Parcel &parcel) const && parcel.WriteInt32(static_cast(extensionType)) && parcel.WriteInt32Vector(renderPids) && parcel.WriteString(callerBundleName) && parcel.WriteBool(isSplitScreenMode) && parcel.WriteInt32(callerUid) && parcel.WriteBool(isFloatingWindowMode) && parcel.WriteInt32(appIndex) && parcel.WriteBool(isPreloadModule) - && parcel.WriteBool(isPrelaunch) && parcel.WriteBool(isFromWindowFocusChanged) - && parcel.WriteInt32(preloadMode)); + && parcel.WriteBool(isFromWindowFocusChanged) && parcel.WriteInt32(preloadMode)); } bool AppStateData::ReadFromParcel(Parcel &parcel) @@ -48,10 +47,8 @@ bool AppStateData::ReadFromParcel(Parcel &parcel) isFloatingWindowMode = parcel.ReadBool(); appIndex = parcel.ReadInt32(); isPreloadModule = parcel.ReadBool(); - isPrelaunch = parcel.ReadBool(); isFromWindowFocusChanged = parcel.ReadBool(); preloadMode = parcel.ReadInt32(); - return true; } diff --git a/interfaces/inner_api/app_manager/src/appmgr/process_data.cpp b/interfaces/inner_api/app_manager/src/appmgr/process_data.cpp index 85503cdd24..f22f1c8baa 100644 --- a/interfaces/inner_api/app_manager/src/appmgr/process_data.cpp +++ b/interfaces/inner_api/app_manager/src/appmgr/process_data.cpp @@ -32,7 +32,7 @@ bool ProcessData::Marshalling(Parcel &parcel) const && parcel.WriteInt32(renderUid) && parcel.WriteUint32(accessTokenId) && parcel.WriteBool(isTestMode) && parcel.WriteInt32(exitReason) && parcel.WriteString16(Str8ToStr16(exitMsg)) && parcel.WriteInt32(childUid) && parcel.WriteBool(isPreload) && parcel.WriteBool(isPreloadModule) && - parcel.WriteBool(isPrelaunch) && parcel.WriteInt32(callerPid) && parcel.WriteInt32(callerUid) && + parcel.WriteInt32(callerPid) && parcel.WriteInt32(callerUid) && parcel.WriteString(killReason) && parcel.WriteBool(isFromWindowFocusChanged) && parcel.WriteInt32(preloadMode)); } @@ -61,7 +61,6 @@ bool ProcessData::ReadFromParcel(Parcel &parcel) childUid = parcel.ReadInt32(); isPreload = parcel.ReadBool(); isPreloadModule = parcel.ReadBool(); - isPrelaunch = parcel.ReadBool(); callerPid = parcel.ReadInt32(); callerUid = parcel.ReadInt32(); killReason = parcel.ReadString(); diff --git a/services/abilitymgr/src/ability_connect_manager.cpp b/services/abilitymgr/src/ability_connect_manager.cpp index aee58397c2..e25038f463 100644 --- a/services/abilitymgr/src/ability_connect_manager.cpp +++ b/services/abilitymgr/src/ability_connect_manager.cpp @@ -3791,15 +3791,17 @@ int32_t AbilityConnectManager::ReportAbilityStartInfoToRSS(const AppExecFwk::Abi } bool isColdStart = true; int32_t pid = 0; + int32_t preloadMode = -1; for (auto const &info : runningProcessInfos) { if (info.uid_ == abilityInfo.applicationInfo.uid) { isColdStart = false; pid = info.pid_; + preloadMode = static_cast(info.preloadMode_); break; } } TAG_LOGI(AAFwkTag::EXT, "ReportAbilityStartInfoToRSS, abilityName:%{public}s", abilityInfo.name.c_str()); - ResSchedUtil::GetInstance().ReportAbilityStartInfoToRSS(abilityInfo, pid, isColdStart, false); + ResSchedUtil::GetInstance().ReportAbilityStartInfoToRSS(abilityInfo, pid, isColdStart, false, preloadMode); return ERR_OK; } diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 8f9389d352..4c1cc91111 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -3497,6 +3497,7 @@ void AbilityManagerService::ReportAbilityStartInfoToRSS(const AppExecFwk::Abilit bool isColdStart = true; int32_t pid = 0; bool supportWarmSmartGC = false; + int32_t preloadMode = -1; for (auto const &info : runningProcessInfos) { if (info.uid_ == abilityInfo.applicationInfo.uid && info.processType_ == AppExecFwk::ProcessType::NORMAL && @@ -3504,17 +3505,17 @@ void AbilityManagerService::ReportAbilityStartInfoToRSS(const AppExecFwk::Abilit abilityInfo.applicationInfo.bundleName) != info.bundleNames.end()) { isColdStart = info.isExiting ? true : info.preloadMode_ == AppExecFwk::PreloadMode::PRESS_DOWN; pid = info.isExiting ? 0 : info.pid_; - AppExecFwk::PreloadMode mode = info.preloadMode_; + preloadMode = static_castinfo.preloadMode_; bool isSuggestCache = info.isCached; bool supportWarmSmartGC = (isSuggestCache || - mode == AppExecFwk::PreloadMode::PRE_MAKE || - mode == AppExecFwk::PreloadMode::PRELOAD_MODULE); + info.preloadMode_ == AppExecFwk::PreloadMode::PRE_MAKE || + info.preloadMode_ == AppExecFwk::PreloadMode::PRELOAD_MODULE); TAG_LOGI(AAFwkTag::ABILITYMGR, "SmartGC: Process %{public}d report to RSS, start type: %{public}d, isCached: %{public}d, supportWarmGC: %{public}d", - pid, static_cast(mode), static_cast(isSuggestCache), static_cast(supportWarmSmartGC)); + pid, preloadMode, static_cast(isSuggestCache), static_cast(supportWarmSmartGC)); break; } } - ResSchedUtil::GetInstance().ReportAbilityStartInfoToRSS(abilityInfo, pid, isColdStart, supportWarmSmartGC); + ResSchedUtil::GetInstance().ReportAbilityStartInfoToRSS(abilityInfo, pid, isColdStart, supportWarmSmartGC, preloadMode); } } diff --git a/services/appmgr/src/app_running_record.cpp b/services/appmgr/src/app_running_record.cpp index ce776471ca..e16fa89218 100644 --- a/services/appmgr/src/app_running_record.cpp +++ b/services/appmgr/src/app_running_record.cpp @@ -770,6 +770,7 @@ void AppRunningRecord::StateChangedNotifyObserver(const std::shared_ptr(processType_); + abilityStateData.preloadMode = static_cast(preloadMode_); BundleType bundleType = applicationInfo ? applicationInfo->bundleType : AppExecFwk::BundleType::APP; auto serviceInner = appMgrServiceInner_.lock(); if (serviceInner) { diff --git a/services/appmgr/src/app_state_observer_manager.cpp b/services/appmgr/src/app_state_observer_manager.cpp index cc4c6db795..0fca97e1c2 100644 --- a/services/appmgr/src/app_state_observer_manager.cpp +++ b/services/appmgr/src/app_state_observer_manager.cpp @@ -999,6 +999,7 @@ ProcessData AppStateObserverManager::WrapProcessData( processData.callerUid = appRecord->GetCallerUid(); processData.killReason = appRecord->GetKillReason(); processData.isFromWindowFocusChanged = isFromWindowFocusChanged; + processData.preloadMode = appRecord->GetPreloadMode(); return processData; } diff --git a/services/common/include/res_sched_util.h b/services/common/include/res_sched_util.h index 5ea28542ab..bd578fdb67 100644 --- a/services/common/include/res_sched_util.h +++ b/services/common/include/res_sched_util.h @@ -51,7 +51,7 @@ class ResSchedUtil final { public: static ResSchedUtil &GetInstance(); void ReportAbilityStartInfoToRSS(const AbilityInfo &abilityInfo, int32_t pid, bool isColdStart, - bool supportWarmSmartGC); + bool supportWarmSmartGC, int32_t preloadMode); void ReportPreloadApplicationToRSS(const std::shared_ptr& abilityInfo, int32_t preloadMode); void ReportAbilityAssociatedStartInfoToRSS( const AbilityInfo &abilityInfo, int64_t resSchedType, int32_t callerUid, int32_t callerPid); diff --git a/services/common/src/res_sched_util.cpp b/services/common/src/res_sched_util.cpp index dc6928af34..194e2db305 100644 --- a/services/common/src/res_sched_util.cpp +++ b/services/common/src/res_sched_util.cpp @@ -63,7 +63,7 @@ void ResSchedUtil::ReportSubHealtyPerfInfoToRSS() } void ResSchedUtil::ReportAbilityStartInfoToRSS(const AbilityInfo &abilityInfo, int32_t pid, bool isColdStart, - bool supportWarmSmartGC) + bool supportWarmSmartGC, int32_t preloadMode) { #ifdef RESOURCE_SCHEDULE_SERVICE_ENABLE uint32_t resType = ResourceSchedule::ResType::RES_TYPE_APP_ABILITY_START; @@ -73,7 +73,8 @@ void ResSchedUtil::ReportAbilityStartInfoToRSS(const AbilityInfo &abilityInfo, i { "bundleName", abilityInfo.applicationInfo.bundleName }, { "abilityName", abilityInfo.name }, { "pid", std::to_string(pid) }, - { "supportWarmSmartGC", supportWarmSmartGC ? "1": "0" } + { "supportWarmSmartGC", supportWarmSmartGC ? "1": "0" }, + { "preloadMode", std::to_string(preloadMode) } }; TAG_LOGD(AAFwkTag::DEFAULT, "call"); ResourceSchedule::ResSchedClient::GetInstance().ReportData(resType, isColdStart ? 1 : 0, eventParams); diff --git a/test/unittest/res_sched_util_test/res_sched_util_test.cpp b/test/unittest/res_sched_util_test/res_sched_util_test.cpp index 1de0235304..4f65c2ff05 100644 --- a/test/unittest/res_sched_util_test/res_sched_util_test.cpp +++ b/test/unittest/res_sched_util_test/res_sched_util_test.cpp @@ -58,7 +58,7 @@ HWTEST_F(ResSchedUtilTest, ResSchedUtilTest_0100, TestSize.Level2) TAG_LOGI(AAFwkTag::TEST, "ResSchedUtilTest_0100 called."); AbilityInfo abilityInfo; int64_t resSchedType = -1; - AAFwk::ResSchedUtil::GetInstance().ReportAbilityStartInfoToRSS(abilityInfo, -1, false, false); + AAFwk::ResSchedUtil::GetInstance().ReportAbilityStartInfoToRSS(abilityInfo, -1, false, false, -1); AAFwk::ResSchedUtil::GetInstance().ReportAbilityAssociatedStartInfoToRSS(abilityInfo, resSchedType, 0, 0); int64_t ret = AAFwk::ResSchedUtil::GetInstance().convertType(resSchedType); EXPECT_EQ(resSchedType, ret);