Fix in Wifi activity updates
When Wifi firmware resets link layer stats, it sometimes returns a value for On time which is much larger than the duration of the report. On time = Idle time + Rx time + Tx time. This change prevents those errors from affecting Wifi power metrics. BUG:110325882 Test: adb shell dumpsys batterystats WiFi Scan time: 12s 302ms WiFi Idle time: 5m 48s 634ms WiFi Rx time: 24s 232ms WiFi Tx time: 10s 510ms Change-Id: I7b69fc728b275f89154dd0c1d7382576ebfadc29
This commit is contained in:
@@ -543,14 +543,25 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync {
|
||||
final long idleTimeMs = latest.mControllerIdleTimeMs - lastIdleMs;
|
||||
final long scanTimeMs = latest.mControllerScanTimeMs - lastScanMs;
|
||||
|
||||
if (txTimeMs < 0 || rxTimeMs < 0 || scanTimeMs < 0) {
|
||||
if (txTimeMs < 0 || rxTimeMs < 0 || scanTimeMs < 0 || idleTimeMs < 0) {
|
||||
// The stats were reset by the WiFi system (which is why our delta is negative).
|
||||
// Returns the unaltered stats.
|
||||
delta.mControllerEnergyUsed = latest.mControllerEnergyUsed;
|
||||
delta.mControllerRxTimeMs = latest.mControllerRxTimeMs;
|
||||
delta.mControllerTxTimeMs = latest.mControllerTxTimeMs;
|
||||
delta.mControllerIdleTimeMs = latest.mControllerIdleTimeMs;
|
||||
delta.mControllerScanTimeMs = latest.mControllerScanTimeMs;
|
||||
// Returns the unaltered stats. The total on time should not exceed the time
|
||||
// duartion between reports.
|
||||
final long totalOnTimeMs = latest.mControllerTxTimeMs + latest.mControllerRxTimeMs
|
||||
+ latest.mControllerIdleTimeMs;
|
||||
if (totalOnTimeMs <= timePeriodMs + MAX_WIFI_STATS_SAMPLE_ERROR_MILLIS) {
|
||||
delta.mControllerEnergyUsed = latest.mControllerEnergyUsed;
|
||||
delta.mControllerRxTimeMs = latest.mControllerRxTimeMs;
|
||||
delta.mControllerTxTimeMs = latest.mControllerTxTimeMs;
|
||||
delta.mControllerIdleTimeMs = latest.mControllerIdleTimeMs;
|
||||
delta.mControllerScanTimeMs = latest.mControllerScanTimeMs;
|
||||
} else {
|
||||
delta.mControllerEnergyUsed = 0;
|
||||
delta.mControllerRxTimeMs = 0;
|
||||
delta.mControllerTxTimeMs = 0;
|
||||
delta.mControllerIdleTimeMs = 0;
|
||||
delta.mControllerScanTimeMs = 0;
|
||||
}
|
||||
Slog.v(TAG, "WiFi energy data was reset, new WiFi energy data is " + delta);
|
||||
} else {
|
||||
final long totalActiveTimeMs = txTimeMs + rxTimeMs;
|
||||
|
||||
Reference in New Issue
Block a user