Skip to content

Commit e6908b7

Browse files
mhduiyfly602
authored andcommitted
fix: handle idle state properly in power save plan
1. Added isIdle field to track system idle state in powerSavePlan struct 2. Modified Update() method to check if system is already idle before setting real delay 3. When system is idle, restart power delay tasks instead of setting new delays 4. Extracted idle task startup logic into separate startIdleTasksLocked() method 5. HandleIdleOn() now sets isIdle flag and calls startIdleTasksLocked() 6. HandleIdleOff() now resets isIdle flag to false The fix ensures that when the system is already in idle state and power settings are updated, the power delay tasks are properly restarted rather than attempting to set new delays. This prevents issues where screen saver and lock delays might not work correctly after system settings changes during idle state. fix: 正确处理电源节省计划中的空闲状态 1. 在powerSavePlan结构体中添加isIdle字段来跟踪系统空闲状态 2. 修改Update()方法,在设置实际延迟前检查系统是否已处于空闲状态 3. 当系统空闲时,重新启动电源延迟任务而不是设置新的延迟 4. 将空闲任务启动逻辑提取到单独的startIdleTasksLocked()方法中 5. HandleIdleOn()现在设置isIdle标志并调用startIdleTasksLocked() 6. HandleIdleOff()现在将isIdle标志重置为false 此修复确保当系统已处于空闲状态且电源设置更新时,正确重新启动电源延迟任 务,而不是尝试设置新的延迟。这防止了在空闲状态下更改系统设置后,屏幕保护 程序和锁定延迟可能无法正常工作的问题。 PMS: BUG-353947
1 parent 1a61726 commit e6908b7

1 file changed

Lines changed: 15 additions & 1 deletion

File tree

session/power1/power_save_plan.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ type powerSavePlan struct {
5858
psmPercentChangedTime time.Time
5959
modeBeforeIdle string
6060
allowScreenSaver bool
61+
isIdle bool
6162
}
6263

6364
func newPowerSavePlan(manager *Manager) (string, submodule, error) {
@@ -486,13 +487,19 @@ func (psp *powerSavePlan) Update(screenSaverStartDelay, lockDelay,
486487
}
487488

488489
min := tasks.min()
489-
tasks.setRealDelay(min)
490490
err := psp.setScreenSaverTimeout(min)
491491
if err != nil {
492492
logger.Warning("failed to set screen saver timeout:", err)
493493
}
494494

495495
psp.metaTasks = tasks
496+
497+
if psp.isIdle {
498+
logger.Info("System is already idle, restarting power delay tasks.")
499+
psp.startIdleTasksLocked()
500+
} else {
501+
psp.metaTasks.setRealDelay(min)
502+
}
496503
}
497504

498505
func (psp *powerSavePlan) setScreenSaverTimeout(seconds int32) error {
@@ -697,6 +704,11 @@ func (psp *powerSavePlan) HandleIdleOn() {
697704

698705
logger.Info("HandleIdleOn")
699706

707+
psp.isIdle = true
708+
psp.startIdleTasksLocked()
709+
}
710+
711+
func (psp *powerSavePlan) startIdleTasksLocked() {
700712
// check window, only x11 is supported, not apply to wayland
701713
if !psp.manager.UseWayland {
702714
preventIdle, err := psp.shouldPreventIdle()
@@ -766,6 +778,8 @@ func (psp *powerSavePlan) handleIdleOff() {
766778
psp.mu.Lock()
767779
defer psp.mu.Unlock()
768780

781+
psp.isIdle = false
782+
769783
if psp.manager.shouldIgnoreIdleOff() {
770784
psp.manager.setPrepareSuspend(suspendStateFinish)
771785
logger.Info("HandleIdleOff : IGNORE =========")

0 commit comments

Comments
 (0)