From eece03a4bdd268c1902b3fa36686fffc9daa7e39 Mon Sep 17 00:00:00 2001 From: li-tiangang4 Date: Wed, 2 Jul 2025 13:45:16 +0800 Subject: [PATCH] =?UTF-8?q?dhardware=E6=8E=A5=E5=85=A5=E6=9C=80=E5=B0=8F?= =?UTF-8?q?=E5=AD=90=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: li-tiangang4 --- sa_profile/4801.json | 8 ++++++++ .../include/distributed_hardware_manager_factory.h | 3 +++ .../include/distributed_hardware_service.h | 1 + .../src/distributed_hardware_manager_factory.cpp | 12 ++++++++++++ .../src/distributed_hardware_service.cpp | 11 +++++++++++ 5 files changed, 35 insertions(+) diff --git a/sa_profile/4801.json b/sa_profile/4801.json index 8651af70..ee14333b 100644 --- a/sa_profile/4801.json +++ b/sa_profile/4801.json @@ -13,6 +13,14 @@ "name":"usual.event.BOOT_COMPLETED" } ] + }, + "stop-on-demand": { + "param": [ + { + "name": "resourceschedule.memmgr.low.memory.prepare", + "value": "true" + } + ] } } ] diff --git a/services/distributedhardwarefwkservice/include/distributed_hardware_manager_factory.h b/services/distributedhardwarefwkservice/include/distributed_hardware_manager_factory.h index f8215111..3eb55577 100644 --- a/services/distributedhardwarefwkservice/include/distributed_hardware_manager_factory.h +++ b/services/distributedhardwarefwkservice/include/distributed_hardware_manager_factory.h @@ -42,6 +42,8 @@ public: int Dump(const std::vector &argsStr, std::string &result); void UnInit(); bool GetUnInitFlag(); + void SetSAProcessState(bool saState); + bool GetSAProcessState(); private: bool Init(); void CheckExitSAOrNot(); @@ -52,6 +54,7 @@ private: std::atomic flagUnInit_ = false; std::atomic releaseStatus_ = false; std::mutex releaseProcessMutex_; + std::atomic isIdle_ = false; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/distributedhardwarefwkservice/include/distributed_hardware_service.h b/services/distributedhardwarefwkservice/include/distributed_hardware_service.h index 840a09fe..72521d74 100644 --- a/services/distributedhardwarefwkservice/include/distributed_hardware_service.h +++ b/services/distributedhardwarefwkservice/include/distributed_hardware_service.h @@ -68,6 +68,7 @@ public: protected: void OnStart() override; void OnStop() override; + int32_t OnIdle(const SystemAbilityOnDemandReason& idleReason) override; private: bool Init(); diff --git a/services/distributedhardwarefwkservice/src/distributed_hardware_manager_factory.cpp b/services/distributedhardwarefwkservice/src/distributed_hardware_manager_factory.cpp index cf45d722..ae1f57c3 100644 --- a/services/distributedhardwarefwkservice/src/distributed_hardware_manager_factory.cpp +++ b/services/distributedhardwarefwkservice/src/distributed_hardware_manager_factory.cpp @@ -115,6 +115,7 @@ void DistributedHardwareManagerFactory::UnInit() void DistributedHardwareManagerFactory::ExitDHFWK() { DHLOGI("No device online or deviceList is over size, exit sa process"); + SetSAProcessState(true); HiSysEventWriteMsg(DHFWK_EXIT_END, OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR, "dhfwk sa exit end."); auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); @@ -267,5 +268,16 @@ void DistributedHardwareManagerFactory::ClearRemoteDeviceLocalInfoData(const std { LocalCapabilityInfoManager::GetInstance()->ClearRemoteDeviceLocalInfoData(peeruuid); } + +void DistributedHardwareManagerFactory::SetSAProcessState(bool saState) +{ + DHLOGI("Set SA process state: %{public}d", saState); + isIdle_.store(saState); +} + +bool DistributedHardwareManagerFactory::GetSAProcessState() +{ + return isIdle_.load(); +} } // namespace DistributedHardware } // namespace OHOS diff --git a/services/distributedhardwarefwkservice/src/distributed_hardware_service.cpp b/services/distributedhardwarefwkservice/src/distributed_hardware_service.cpp index bba3c278..0781ac12 100644 --- a/services/distributedhardwarefwkservice/src/distributed_hardware_service.cpp +++ b/services/distributedhardwarefwkservice/src/distributed_hardware_service.cpp @@ -51,6 +51,8 @@ namespace DistributedHardware { #define DH_LOG_TAG "DistributedHardwareService" REGISTER_SYSTEM_ABILITY_BY_ID(DistributedHardwareService, DISTRIBUTED_HARDWARE_SA_ID, true); namespace { + constexpr int32_t SA_READY_TO_UNLOAD = 0; + constexpr int32_t SA_REFUSE_TO_UNLOAD = -1; constexpr int32_t INIT_BUSINESS_DELAY_TIME_MS = 5 * 100; const std::string INIT_TASK_ID = "CheckAndInitDH"; const std::string LOCAL_NETWORKID_ALIAS = "local"; @@ -76,6 +78,7 @@ void DistributedHardwareService::OnStart() return; } state_ = ServiceRunningState::STATE_RUNNING; + DistributedHardwareManagerFactory::GetInstance().SetSAProcessState(false); DHLOGI("DistributedHardwareService::OnStart start service success."); } @@ -164,6 +167,14 @@ void DistributedHardwareService::OnStop() registerToService_ = false; } +int32_t DistributedHardwareService::OnIdle(const SystemAbilityOnDemandReason& idleReason) +{ + bool saState = DistributedHardwareManagerFactory::GetInstance().GetSAProcessState(); + DHLOGI("OnIdle, idleReason name: %{public}s, id: %{public}d, value: %{public}s, sa process state: %{public}d", + idleReason.GetName().c_str(), idleReason.GetId(), idleReason.GetValue().c_str(), saState); + return saState ? SA_READY_TO_UNLOAD : SA_REFUSE_TO_UNLOAD; +} + int32_t DistributedHardwareService::RegisterPublisherListener(const DHTopic topic, const sptr listener) { -- Gitee