fix: 总量统计改为累加会话增量而非取计数器值
原 m_totalDownload = currentRxBytes 直接取活动接口计数器值,切换 网卡时跳变到新接口计数器,网卡重启时归零,语义有误导。 改为 m_totalDownload += rxDeltaClamped 累加会话增量,总计从 0 开始增长,切换网卡不再跳变。跨重启持久化属于后续 #18 的范畴。
This commit is contained in:
@@ -17,8 +17,9 @@
|
|||||||
~~网卡重启、`/proc/net/dev` 计数器溢出或接口重置时,`currentRxBytes - m_lastRxBytes` 可能为负。代码无任何兜底,QML 会显示负速度。~~
|
~~网卡重启、`/proc/net/dev` 计数器溢出或接口重置时,`currentRxBytes - m_lastRxBytes` 可能为负。代码无任何兜底,QML 会显示负速度。~~
|
||||||
已在 `calculateSpeed()` 中对 `rxDelta` / `txDelta` 钳制为 0,计数器回绕/接口重置/网卡重启时不再产生负速度。
|
已在 `calculateSpeed()` 中对 `rxDelta` / `txDelta` 钳制为 0,计数器回绕/接口重置/网卡重启时不再产生负速度。
|
||||||
|
|
||||||
**3. "总量统计"语义有误导**
|
**3. ~~"总量统计"语义有误导~~ ✅ 已修复**
|
||||||
`m_totalDownload = currentRxBytes` 只存储活动接口的当前计数器值,并非真正的累计流量。它会在以下场景跳变:切换网卡(跳到新接口计数器)、网卡重启(归零)、系统重启(归零)。README 宣称"累计上传/下载流量统计",但实际不是跨重启/跨接口的累计。
|
~~`m_totalDownload = currentRxBytes` 只存储活动接口的当前计数器值,并非真正的累计流量。~~
|
||||||
|
已改为累加会话增量 `m_totalDownload += rxDeltaClamped`,"总计"语义从"活动接口计数器值"变为"本次会话累计流量":从 0 开始增长,切换网卡不再跳变,网卡重启不归零。跨重启持久化属于 #18 的范畴。
|
||||||
|
|
||||||
**4. 独立窗口不支持深色模式**
|
**4. 独立窗口不支持深色模式**
|
||||||
`AboutWindow.qml`、`SettingsWindow.qml`、`TextColorPicker.qml`、`TrafficChartWindow.qml` 全部硬编码浅色(`#FFFFFF`、`#333333`、`#f5f5f5` 等),不随系统主题适配。而 `networkview.qml` 和 `NetworkPopup.qml` 正确地从 `DockPalette` 派生颜色。deepin 深色模式下这些窗口视觉割裂严重。
|
`AboutWindow.qml`、`SettingsWindow.qml`、`TextColorPicker.qml`、`TrafficChartWindow.qml` 全部硬编码浅色(`#FFFFFF`、`#333333`、`#f5f5f5` 等),不随系统主题适配。而 `networkview.qml` 和 `NetworkPopup.qml` 正确地从 `DockPalette` 派生颜色。deepin 深色模式下这些窗口视觉割裂严重。
|
||||||
|
|||||||
@@ -372,18 +372,20 @@ void NetworkMonitorApplet::calculateSpeed()
|
|||||||
// 改为除以真实间隔后,无论定时器抖动如何速度都准确。
|
// 改为除以真实间隔后,无论定时器抖动如何速度都准确。
|
||||||
const double elapsedSec = (nowMs - m_lastTimestampMs) / 1000.0;
|
const double elapsedSec = (nowMs - m_lastTimestampMs) / 1000.0;
|
||||||
|
|
||||||
// 更新总量
|
// 仅当间隔合法时计算速度并累加会话流量,避免除零;间隔为 0 时保持上次值
|
||||||
m_totalDownload = currentRxBytes;
|
|
||||||
m_totalUpload = currentTxBytes;
|
|
||||||
|
|
||||||
// 仅当间隔合法时计算速度,避免除零;间隔为 0 时保持上次速度值
|
|
||||||
if (elapsedSec > 0) {
|
if (elapsedSec > 0) {
|
||||||
// 计数器回绕/接口重置时差值可能为负,钳制为 0 避免显示负速度
|
// 计数器回绕/接口重置时差值可能为负,钳制为 0 避免显示负速度
|
||||||
// 触发场景:网卡重启、/proc/net/dev 计数器溢出、USB 网卡拔出重插
|
// 触发场景:网卡重启、/proc/net/dev 计数器溢出、USB 网卡拔出重插
|
||||||
const qint64 rxDelta = currentRxBytes - m_lastRxBytes;
|
const qint64 rxDelta = currentRxBytes - m_lastRxBytes;
|
||||||
const qint64 txDelta = currentTxBytes - m_lastTxBytes;
|
const qint64 txDelta = currentTxBytes - m_lastTxBytes;
|
||||||
m_downloadSpeed = (rxDelta > 0 ? rxDelta : 0) / elapsedSec;
|
const qint64 rxDeltaClamped = rxDelta > 0 ? rxDelta : 0;
|
||||||
m_uploadSpeed = (txDelta > 0 ? txDelta : 0) / elapsedSec;
|
const qint64 txDeltaClamped = txDelta > 0 ? txDelta : 0;
|
||||||
|
m_downloadSpeed = rxDeltaClamped / elapsedSec;
|
||||||
|
m_uploadSpeed = txDeltaClamped / elapsedSec;
|
||||||
|
// 累加会话总量:原实现直接取计数器值,切换网卡/网卡重启时总量跳变;
|
||||||
|
// 改为累加增量后,总量 = 本次会话期间所有活动接口的流量总和,不再跳变
|
||||||
|
m_totalDownload += rxDeltaClamped;
|
||||||
|
m_totalUpload += txDeltaClamped;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_lastRxBytes = currentRxBytes;
|
m_lastRxBytes = currentRxBytes;
|
||||||
|
|||||||
Reference in New Issue
Block a user