Fix sensor#1102
Conversation
There was a problem hiding this comment.
Sorry @fly602, your pull request is larger than the review limit of 150000 diff characters
robertkill
left a comment
There was a problem hiding this comment.
Code Review — 自动亮度功能
整体架构设计不错,卡尔曼滤波和亮度曲线实现质量较高。但有3个Critical问题需要修。
🔴 Critical(merge前必须修)
C1 display1/auto_brightness.go L1109/1205/1213 — 不安全类型断言会 PANIC
config.BrightnessChangeThreshold = val.Value().(float64) // D-Bus int64时crash
config.KalmanProcessNoise = val.Value().(float64) // 同上
config.KalmanMeasurementNoise = val.Value().(float64) // 同上同文件其他字段都用了 type switch(如L1078-1086),这三处漏了,DSettings返回int64时直接panic。建议统一用type switch处理。
C2 kalman_filter.go — 并发数据竞争
补偿定时器(150ms)调 GetEstimate() 只持有 RLock,传感器回调调 Update() 修改 xEst/PEst。两者并发 = data race。建议给 KalmanFilter1D 加独立 mutex,或确保 GetEstimate 也用写锁。
C3 auto_brightness.go Stop/Start 竞态
Stop() 中 stopCompensationTimer() 会 Unlock→Wait→Relock,窗口期内 Start() 可创建新 ticker。Stop() 之后设 running=false 会覆盖新状态,新 ticker 变孤儿泄漏。建议加 atomic stopping 标志或重构锁逻辑。
⚠️ Warnings
W1 brightness_transition.go L299 — task.ctx.(chan struct{}) 不安全断言,建议存为强类型或改用 context.Context
W2 runTransition goroutine 无 WaitGroup 追踪,Stop() 后可能仍在运行
W3 sessionActive 字段跨 goroutine 读写无同步保护
W4 getConfig 中类型断言风格不一致(部分 type switch,部分直接断言)
💡 Suggestions
- 多处 "faild" 拼写错误 → "failed"
- 补偿 ticker Info 日志 150ms/次太频繁,建议改 Debug
- 1024.0 硬编码 lux 上限,室外场景会超,建议可配置或对数映射
- claimLightWithRetry 在 auto_brightness.go 和 sensor_proxy.go 重复实现
- TransitionExecutor 建议用 context.Context 替代 chan struct{}
- saveConfig 非原子写入,crash会半写
✅ 亮点
- RWMutex 读路径优化合理
- 手动覆盖机制防止和用户操作冲突
- 卡尔曼滤波数学实现正确
- 亮度曲线插值边界处理完善
- 初始化逐步降级策略(config失败→默认,sensor失败→不支持)
Critical 问题具体位置C1 // 这三处会 panic,DSettings integer 返回 int64:
config.BrightnessChangeThreshold = val.Value().(float64) // L1109
config.KalmanProcessNoise = val.Value().(float64) // L1205
config.KalmanMeasurementNoise = val.Value().(float64) // L1213
// 应改用同文件 L1078 的 type switch 写法C2
C3
|
b605094 to
a486319
Compare
Code Review SummaryVerdict: Changes Requested (4 Critical, 7 Warnings, 7 Suggestions) 🔴 CriticalC1. C2. C3. Kalman Filter 双锁潜在死锁风险 C4. 🟡 WarningsW1. W2. W3. W4. W5. W6. W7. 硬编码最小亮度 10% 💡 Suggestions
✅ Looks Good
Reviewed by Hermes Agent |
f1f945e to
ac0e8f3
Compare
013a888 to
73d3418
Compare
新增AutoBrightnessManager自动亮度管理器,基于环境光传感器数据自动调节屏幕亮度 新增SensorProxyClient传感器客户端,通过net.hadess.SensorProxy D-Bus接口获取环境光数据 新增BrightnessTransition亮度渐变管理器,支持可配置的渐变时长和步进间隔 在Manager中集成自动亮度和渐变管理器,支持启停、暂停恢复、配置变更等状态管理 新增DSettings配置项,支持敏感度、变化阈值、轮询间隔、手动调节策略等参数 新增导出方法和D-Bus接口,支持外部控制自动亮度启停和属性查询 Log: 新增光感亮度调节功能
提供内置屏默认亮度曲线配置功能,重构CurveManager管理亮度曲线配置和计算。 包含对AI代码与设计的重构。 Change-Id: Icc3d68def8d6366f422c829703ac4ae1803a4d83
1. 添加自动亮度曲线配置支持,允许自定义环境光到亮度的映射关系 2. 引入卡尔曼滤波器处理环境光传感器数据,减少噪声干扰 3. 新增亮度变化阈值配置,避免微小亮度波动触发调节 4. 优化传感器数据处理流程,支持推送模式和缓存机制 5. 重构代码结构,分离滤波逻辑和亮度计算逻辑 Log: 自动亮度功能新增曲线映射和智能滤波,调节更平滑精准 Change-Id: I344f167fdb553e7cda137a78951bb6c764312aad
1. 调整卡尔曼滤波器参数:过程噪声0.01→0.8,测量噪声0.1→0.05,窗口大小10→3 2. 新增传感器数据补偿机制,在数据超时1秒时主动补偿卡尔曼滤波器 3. 添加补偿定时器管理逻辑,在自动亮度启停、暂停恢复等状态变更时同步管理 4. 新增重置历史状态方法,确保手动调节后能立即响应 5. 更新DSettings配置文件中的默认参数值 Log: 优化自动亮度调节的响应性和准确性 Change-Id: I19c1ece035dff6d91348b626466bffcec3c28733
1. 更新自动亮度设计文档,增加卡尔曼滤波器、亮度曲线管理和补偿机制等新功能 2. 更新自动亮度使用指南,补充新增配置参数和高级功能说明 3. 在 .gitignore 中添加 AGENTS.md 文件忽略规则 Change-Id: I946a1335a6b8d500e290581a950f483f999e446f
1. 移除了基于定时器的轮询机制,改为完全依赖传感器事件驱动 2. 删除了 pollInterval、stopChan、ticker、pollingWg 等轮询相关字段 3. 移除了 startPolling()、stopPolling()、pollLightLevel() 等轮询方法 4. 重构了补偿定时器逻辑,使其更简洁高效 5. 简化了状态管理,移除了 polling 状态字段 6. 优化了 adjustBrightnessOnce() 方法,直接从传感器获取当前光照值 7. manager.go 新增 isPowerSaving()、scheduleSystemAdjustingClear() 方法 Change-Id: I883ad02422f7aca35cd95374807350dae4635daa
1. 将补偿间隔从300毫秒缩短到150毫秒,提高亮度调节响应速度 2. 在resetHistoryState中增加卡尔曼滤波器重置和传感器数据时间重置 3. 移除resume方法中延迟1秒后执行adjustBrightnessOnce的逻辑 4. 将needCompensationWithClient中的GetCachedLightLevel改为GetLightLevel 5. 在RefreshBrightness方法中添加自动亮度启用时的跳过逻辑 6. 在SensorProxyClient中添加GetLightLevel方法,支持直接读取实时环境光强度 Change-Id: I00296ee3c0f0d776159566305909f35a23114b0f
1. Refactor SensorProxyClient to use go-dbus-factory generated proxy instead of raw D-Bus calls 2. Move BrightnessTransition to brightness package as unified TransitionManager with TransitionExecutor 3. Separate setBrightness and setBrightnessWithTransition methods for clearer API 4. Add setColorTemperature method for independent color temperature control 5. Fix potential deadlocks in AutoBrightnessManager.OnManualBrightnessChange by releasing mutex before async operations 6. Fix setColorTempOneShot to read brightness from system config instead of monitor cache 7. Add power mode change listener to properly handle auto brightness during power saving 8. Add backlight controller caching and curve inverse function for percentage calculation 9. Remove unused functions: gracefulDegradeService, recoverService, loadConfig 10. Update transition config from time-based to step-percent based approach 11. Change default values: auto brightness and transition both disabled by default Influence: 1. Test auto brightness enable/disable functionality 2. Verify light sensor data acquisition works correctly with new proxy 3. Test brightness transition effects with different step-percent configurations 4. Verify manual brightness adjustment properly pauses auto brightness 5. Test color temperature changes without affecting brightness 6. Verify no deadlocks occur during rapid brightness changes 7. Test power saving mode transition with auto brightness enabled 8. Verify system wake from sleep properly restores auto brightness state 9. Test monitor hot-plug scenarios with transition enabled 10. Verify backlight and gamma brightness types work correctly refactor: 优化光感接口 1. 重构 SensorProxyClient,使用 go-dbus-factory 生成的代理替代原始 D-Bus 调用 2. 将 BrightnessTransition 移至 brightness 包,重构为统一的 TransitionManager 和 TransitionExecutor 3. 分离 setBrightness 和 setBrightnessWithTransition 方法,使 API 更清晰 4. 新增 setColorTemperature 方法,实现独立的色温控制 5. 修复 AutoBrightnessManager.OnManualBrightnessChange 中的潜在死锁,在 异步操作前释放互斥锁 6. 修复 setColorTempOneShot 从系统配置读取亮度而非显示器缓存 7. 新增电源模式变化监听,正确处理节能模式下的自动亮度 8. 新增背光控制器缓存和曲线逆函数计算百分比 9. 移除未使用的函数:gracefulDegradeService、recoverService、loadConfig 10. 将过渡配置从基于时间改为基于步进百分比的方式 11. 更改默认值:自动亮度和过渡默认均关闭 Influence: 1. 测试自动亮度开启/关闭功能 2. 验证新代理下光感数据获取正常工作 3. 测试不同步进百分比配置下的亮度过渡效果 4. 验证手动调节亮度正确暂停自动亮度 5. 测试色温变化不影响亮度 6. 验证快速亮度调节时不发生死锁 7. 测试开启自动亮度时的节能模式切换 8. 验证系统从睡眠唤醒正确恢复自动亮度状态 9. 测试开启过渡时的显示器热插拔场景 10. 验证背光和 Gamma 亮度类型正常工作 PMS: BUG-358023 Change-Id: I610f8dc65f0558b4727275c7124a92ee3ae6f631
deepin pr auto review本次代码审查针对自动亮度调节、亮度渐变以及背光曲线等功能的提交进行了详细分析。整体来看,代码架构清晰,模块划分合理,状态机和锁机制设计较为完善。但在并发控制、代码质量、性能优化和安全性方面仍有一些需要改进的地方。 以下是详细的审查意见: 1. 语法与逻辑1.1 潜在的死锁风险
1.2 竞态条件
1.3 逻辑缺陷
2. 代码质量2.1 大量重复代码
2.2 未使用的变量与导入
2.3 魔法数字
3. 代码性能3.1 高频定时器与锁争用
3.2 字符串替换的性能开销
4. 代码安全4.1 资源泄漏
4.2 D-Bus 方法权限与输入校验
4.3 JSON 解析安全性
总结建议
|
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: fly602, mhduiy, robertkill The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
No description provided.