diff --git a/native_engine/impl/ark/ark_idle_monitor.cpp b/native_engine/impl/ark/ark_idle_monitor.cpp index ed714e26aebc495ca687fb8b5ee64118760a4b1f..75fb70ec14d073833f645c59eec77c2813fd71b9 100644 --- a/native_engine/impl/ark/ark_idle_monitor.cpp +++ b/native_engine/impl/ark/ark_idle_monitor.cpp @@ -36,8 +36,9 @@ namespace panda::ecmascript { #if defined(ENABLE_EVENT_HANDLER) -uint64_t ArkIdleMonitor::gIdleMonitoringInterval = - OHOS::system::GetIntParameter("const.arkui.idle_monitoring_interval", 1000); // ms +static constexpr uint64_t IDLE_GC_TIME_MIN = 1000; +static constexpr uint64_t IDLE_GC_TIME_MAX = 10000; +uint64_t ArkIdleMonitor::gIdleMonitoringInterval = ArkIdleMonitor::GetIdleMonitoringInterval(); bool ArkIdleMonitor::gEnableIdleGC = OHOS::system::GetBoolParameter("persist.ark.enableidlegc", true); #else @@ -349,6 +350,22 @@ void ArkIdleMonitor::UnregisterEnv(NativeEngine *engine) #endif } +uint64_t ArkIdleMonitor::GetIdleMonitoringInterval() +{ +#if defined(ENABLE_EVENT_HANDLER) + uint64_t value = OHOS::system::GetIntParameter("const.arkui.idle_monitoring_interval", 1000); // ms + if (value < IDLE_GC_TIME_MIN) { + value = IDLE_GC_TIME_MIN; + } + if (value > IDLE_GC_TIME_MAX) { + value = IDLE_GC_TIME_MAX; + } + return value; +#else + return gIdleMonitoringInterval; +#endif +} + void ArkIdleMonitor::NotifyChangeBackgroundState(bool inBackground) { inBackground_.store(inBackground, std::memory_order_relaxed); diff --git a/native_engine/impl/ark/ark_idle_monitor.h b/native_engine/impl/ark/ark_idle_monitor.h index 97a93877522964138c318ba43255c74993d945b4..403d71c936811c741de751415451ecc8cc93b014 100644 --- a/native_engine/impl/ark/ark_idle_monitor.h +++ b/native_engine/impl/ark/ark_idle_monitor.h @@ -205,6 +205,7 @@ private: void StopIdleMonitorTimerTaskAndPostSleepTask(); void CheckShortIdleTask(int64_t timestamp, int idleTime); void PostSwitchBackgroundGCTask(); + static uint64_t GetIdleMonitoringInterval(); static std::shared_ptr instance_;