Skip to content

fix: 解决低电量进入系统后, 系统触发的节能模式, 电量没有变化的问题#1039

Merged
fly602 merged 1 commit intolinuxdeepin:masterfrom
fly602:master
Mar 3, 2026
Merged

fix: 解决低电量进入系统后, 系统触发的节能模式, 电量没有变化的问题#1039
fly602 merged 1 commit intolinuxdeepin:masterfrom
fly602:master

Conversation

@fly602
Copy link
Contributor

@fly602 fly602 commented Mar 2, 2026

曾经一笔修改, 添加了一个启动时的状态标记, 在这个状态下,不会设置亮度, 因此不会触发亮度变化
回退该修改, 它原本解决问题已不存在, 电源管理f方案已变更. 启动时不在会有模式变更. 因此除了初始化就不会再有亮度跳变的问题.

Log: 解决电源管理亮度变化问题
PMS: BUG-345885
Influence: 电源管理亮度变化

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @fly602, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

曾经一笔修改, 添加了一个启动时的状态标记, 在这个状态下,不会设置亮度, 因此不会触发亮度变化
回退该修改, 它原本解决问题已不存在, 电源管理f方案已变更. 启动时不在会有模式变更. 因此除了初始化就不会再有亮度跳变的问题.

Log: 解决电源管理亮度变化问题
PMS: BUG-345885
Influence: 电源管理亮度变化
@deepin-ci-robot
Copy link

deepin pr auto review

这份代码变更主要涉及移除 IsInBootTime(启动阶段状态)相关的逻辑,并引入了互斥锁 dspcMu 来保护 setDSPCState 函数。以下是对该变更的详细审查意见:

1. 语法逻辑

  • 版权年份更新:所有文件中的 SPDX-FileCopyrightText2018 - 2022 更新到了 2018 - 2026。这是合法的,但通常建议只更新到当前年份(2023或2024),除非有特定规划。更新到2026年显得过于长远。
  • 移除 IsInBootTime 逻辑
    • power_save_plan.go 中,handlePowerSavingModeChanged 函数移除了检查 IsInBootTime 的代码块。
    • daemon.go 中,移除了 d.manager.IsInBootTime = false 的赋值。
    • manager.go 中,移除了 IsInBootTime 结构体字段及其在 doSetModeenablePerformanceInBoot 中的赋值。
    • power_dbusutil.go 中,移除了 setPropIsInBootTimeemitPropChangedIsInBootTime 方法。
    • 审查意见:这些移除操作在语法上是正确的。逻辑上,这意味着系统不再区分"启动阶段"来阻止亮度调节。这可能是产品需求的变化,允许在启动阶段也能响应节能模式的变化。需要确认这是否符合产品预期,因为旧注释提到"启动阶段不允许调节亮度"。
  • 新增互斥锁
    • manager.go 中新增了 dspcMu sync.Mutex
    • manager_powersave.gosetDSPCState 函数中添加了 m.dspcMu.Lock()defer m.dspcMu.Unlock()
    • 审查意见:语法正确。这是一个好的改进,因为 setDSPCState 涉及 DBus 调用,如果被并发调用可能会导致竞争条件。

2. 代码质量

  • 并发安全性提升:为 setDSPCState 添加互斥锁显著提高了代码的并发安全性,防止了潜在的竞态条件。这是本次变更中最有价值的代码质量改进。
  • 代码简化:移除 IsInBootTime 相关的检查、属性和 DBus 信号发射,简化了代码逻辑,减少了维护成本。
  • 注释一致性:在 manager.go 中,移除了 IsInBootTime 字段,但移除的字段上方有一行注释 // 是否在启动阶段,启动阶段不允许调节亮度; 若在启动阶段切换模式后(切节能模式降低亮度),可以调节亮度.。既然逻辑已移除,该注释也应一并删除,以保持代码整洁。

3. 代码性能

  • 锁的开销:引入 dspcMu 会带来轻微的锁开销,但考虑到 setDSPCState 包含 DBus 调用(这是一个相对昂贵的 I/O 操作),锁的开销可以忽略不计。
  • 移除检查:移除 handlePowerSavingModeChanged 中的 IsInBootTime 检查,减少了函数调用和条件判断,对性能有微小的正面影响。

4. 代码安全

  • 资源竞争:引入 dspcMu 解决了 setDSPCState 可能存在的资源竞争问题,提高了系统的稳定性。
  • DBus 调用setDSPCState 中的 DBus 调用没有设置超时。虽然这不是本次变更引入的问题,但建议在实际生产环境中为 DBus 调用添加超时机制,防止因系统总线无响应导致 goroutine 永久阻塞。

改进建议总结

  1. 清理注释:建议删除 manager.go 中关于 IsInBootTime 的过时注释。
  2. 版权年份:建议将版权年份更新为当前年份或保持原状,除非有特殊原因需要设置为2026。
  3. DBus 超时:虽然不在本次变更范围内,但建议后续审查 setDSPCState 中的 DBus 调用,考虑添加超时控制。

修改后的代码片段示例 (针对注释清理)

// system/power1/manager.go

type Manager struct {
	// 当前模式
	Mode string

	// 上次非低电量时的模式
	lastMode string

	displayManager DisplayManager.DisplayManager

	isLowBatteryMode bool

	dspcMu sync.Mutex
	// ... 其他字段
}

总体而言,本次代码变更通过引入互斥锁提高了并发安全性,并通过移除过时的启动检查逻辑简化了代码。只要移除启动检查符合产品需求,这是一次积极的代码重构。

@deepin-ci-robot
Copy link

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: fly602, mhduiy

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@fly602 fly602 merged commit 0565318 into linuxdeepin:master Mar 3, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants