From 6782efa8053cc9df63705e52e6d2cd3a2117bfc8 Mon Sep 17 00:00:00 2001 From: ysicing Date: Sun, 4 Oct 2026 19:24:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A4=84=E7=90=86=20review=20=E5=8F=8D?= =?UTF-8?q?=E9=A6=88=E5=B9=B6=E6=B6=88=E9=99=A4=E5=8F=96=E6=B6=88=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=9A=84=E8=B0=83=E5=BA=A6=E6=8A=96=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 风扇曾报告状态键时,偶发读取失败沿用原起步窗口 - 显示器亮度百分比使用 locale 百分比格式 - 显示器行按连接身份区分,换屏后丢弃旧拖动草稿 - 取消测试在采样线程内记录返回时刻,排除 await 恢复延迟 --- Packages/XStatsKit/Sources/SMC/FanControl.swift | 7 +++++++ .../XStatsUI/Displays/DisplayDetails.swift | 5 +++-- .../Tests/MetricsTests/FanStartupTests.swift | 16 +++++++++++++++- .../Tests/MetricsTests/MetricsTests.swift | 8 +++++--- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/Packages/XStatsKit/Sources/SMC/FanControl.swift b/Packages/XStatsKit/Sources/SMC/FanControl.swift index 2d91651..50585ea 100644 --- a/Packages/XStatsKit/Sources/SMC/FanControl.swift +++ b/Packages/XStatsKit/Sources/SMC/FanControl.swift @@ -47,9 +47,15 @@ extension Array where Element == FanState { /// 超时后保留真实的 0 RPM,直到风扇转动或起步条件消失才允许开始新的窗口。 struct FanStartupTracker { private var startedAt: [Int: TimeInterval] = [:] + /// 曾读到状态键的风扇;之后读不到视为偶发失败,沿用原窗口而不是改用手动目标推断。 + private var reportsStatus: Set = [] mutating func update(id: Int, current: Double, target: Double, isManual: Bool, status: Double?, now: TimeInterval) -> Bool { + if status != nil { reportsStatus.insert(id) } + if current == 0, status == nil, reportsStatus.contains(id) { + return startedAt[id].map { now - $0 < 10 } ?? false + } let starting = status.map { $0 == 1 } ?? (isManual && target.isFinite && target > 0) guard current == 0, starting else { startedAt[id] = nil @@ -64,6 +70,7 @@ struct FanStartupTracker { // nil 是读取失败,不能当作确认无风扇,否则会重新开始已超时的提示。 guard let fanCount else { return } startedAt = startedAt.filter { (0..