From 2078d3499bca6cd6223ff76a5607eed7357aff22 Mon Sep 17 00:00:00 2001 From: Roshan Pius Date: Wed, 25 May 2016 09:32:17 -0700 Subject: [PATCH] BatteryStats: Allow for sample errors in wlan stats Add some leeway in the reported time because some inaccuracy is expected in these stats between samples. BUG: 28932100 Change-Id: Ia643fa666ca16c0c707d189ec2bc703fe1ef08a4 --- .../server/am/BatteryStatsService.java | 54 ++++++++++--------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index b4df10f51691b..def6828beabb9 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -88,6 +88,9 @@ public final class BatteryStatsService extends IBatteryStats.Stub */ private static final long EXTERNAL_STATS_SYNC_TIMEOUT_MILLIS = 2000; + // There is some accuracy error in wifi reports so allow some slop in the results. + private static final long MAX_WIFI_STATS_SAMPLE_ERROR_MILLIS = 750; + private static IBatteryStats sService; final BatteryStatsImpl mStats; @@ -1338,32 +1341,33 @@ public final class BatteryStatsService extends IBatteryStats.Stub } else { final long totalActiveTimeMs = txTimeMs + rxTimeMs; long maxExpectedIdleTimeMs; - // Active time can never be greater than the total time, the stats received seem - // to be corrupt. if (totalActiveTimeMs > timePeriodMs) { - maxExpectedIdleTimeMs = timePeriodMs; - StringBuilder sb = new StringBuilder(); - sb.append("Total Active time "); - TimeUtils.formatDuration(totalActiveTimeMs, sb); - sb.append(" is longer than sample period "); - TimeUtils.formatDuration(timePeriodMs, sb); - sb.append(".\n"); - sb.append("Previous WiFi snapshot: ").append("idle="); - TimeUtils.formatDuration(lastIdleMs, sb); - sb.append(" rx="); - TimeUtils.formatDuration(lastRxMs, sb); - sb.append(" tx="); - TimeUtils.formatDuration(lastTxMs, sb); - sb.append(" e=").append(lastEnergy); - sb.append("\n"); - sb.append("Current WiFi snapshot: ").append("idle="); - TimeUtils.formatDuration(latest.mControllerIdleTimeMs, sb); - sb.append(" rx="); - TimeUtils.formatDuration(latest.mControllerRxTimeMs, sb); - sb.append(" tx="); - TimeUtils.formatDuration(latest.mControllerTxTimeMs, sb); - sb.append(" e=").append(latest.mControllerEnergyUsed); - Slog.wtf(TAG, sb.toString()); + // Cap the max idle time at zero since the active time consumed the whole time + maxExpectedIdleTimeMs = 0; + if (totalActiveTimeMs > timePeriodMs + MAX_WIFI_STATS_SAMPLE_ERROR_MILLIS) { + StringBuilder sb = new StringBuilder(); + sb.append("Total Active time "); + TimeUtils.formatDuration(totalActiveTimeMs, sb); + sb.append(" is longer than sample period "); + TimeUtils.formatDuration(timePeriodMs, sb); + sb.append(".\n"); + sb.append("Previous WiFi snapshot: ").append("idle="); + TimeUtils.formatDuration(lastIdleMs, sb); + sb.append(" rx="); + TimeUtils.formatDuration(lastRxMs, sb); + sb.append(" tx="); + TimeUtils.formatDuration(lastTxMs, sb); + sb.append(" e=").append(lastEnergy); + sb.append("\n"); + sb.append("Current WiFi snapshot: ").append("idle="); + TimeUtils.formatDuration(latest.mControllerIdleTimeMs, sb); + sb.append(" rx="); + TimeUtils.formatDuration(latest.mControllerRxTimeMs, sb); + sb.append(" tx="); + TimeUtils.formatDuration(latest.mControllerTxTimeMs, sb); + sb.append(" e=").append(latest.mControllerEnergyUsed); + Slog.wtf(TAG, sb.toString()); + } } else { maxExpectedIdleTimeMs = timePeriodMs - totalActiveTimeMs; }