Loading core/java/com/android/internal/os/BatteryStatsHelper.java +3 −4 Original line number Diff line number Diff line Loading @@ -409,10 +409,9 @@ public class BatteryStatsHelper { } mBluetoothPowerCalculator.reset(); if (mSensorPowerCalculator == null) { mSensorPowerCalculator = new SensorPowerCalculator(mPowerProfile, (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE)); } (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE), mStats, rawRealtimeUs, statsType); mSensorPowerCalculator.reset(); if (mCameraPowerCalculator == null) { Loading core/java/com/android/internal/os/SensorPowerCalculator.java +31 −5 Original line number Diff line number Diff line Loading @@ -20,15 +20,18 @@ import android.hardware.SensorManager; import android.os.BatteryStats; import android.util.SparseArray; import com.android.internal.location.gnssmetrics.GnssMetrics; import java.util.List; public class SensorPowerCalculator extends PowerCalculator { private final List<Sensor> mSensors; private final double mGpsPowerOn; private final double mGpsPower; public SensorPowerCalculator(PowerProfile profile, SensorManager sensorManager) { public SensorPowerCalculator(PowerProfile profile, SensorManager sensorManager, BatteryStats stats, long rawRealtimeUs, int statsType) { mSensors = sensorManager.getSensorList(Sensor.TYPE_ALL); mGpsPowerOn = profile.getAveragePower(PowerProfile.POWER_GPS_ON); mGpsPower = getAverageGpsPower(profile, stats, rawRealtimeUs, statsType); } @Override Loading @@ -42,10 +45,11 @@ public class SensorPowerCalculator extends PowerCalculator { final int sensorHandle = sensorStats.keyAt(ise); final BatteryStats.Timer timer = sensor.getSensorTime(); final long sensorTime = timer.getTotalTimeLocked(rawRealtimeUs, statsType) / 1000; switch (sensorHandle) { case BatteryStats.Uid.Sensor.GPS: app.gpsTimeMs = sensorTime; app.gpsPowerMah = (app.gpsTimeMs * mGpsPowerOn) / (1000*60*60); app.gpsPowerMah = (app.gpsTimeMs * mGpsPower) / (1000*60*60); break; default: final int sensorsCount = mSensors.size(); Loading @@ -60,4 +64,26 @@ public class SensorPowerCalculator extends PowerCalculator { } } } private double getAverageGpsPower(PowerProfile profile, BatteryStats stats, long rawRealtimeUs, int statsType) { double averagePower = profile.getAveragePowerOrDefault(PowerProfile.POWER_GPS_ON, -1); if (averagePower != -1) { return averagePower; } averagePower = 0; long totalTime = 0; double totalPower = 0; for (int i = 0; i < GnssMetrics.NUM_GPS_SIGNAL_QUALITY_LEVELS; i++) { long timePerLevel = stats.getGpsSignalQualityTime(i, rawRealtimeUs, statsType); totalTime += timePerLevel; totalPower += profile.getAveragePower(PowerProfile.POWER_GPS_SIGNAL_QUALITY_BASED, i) * timePerLevel; } if (totalTime != 0) { averagePower = totalPower / totalTime; } return averagePower; } } Loading
core/java/com/android/internal/os/BatteryStatsHelper.java +3 −4 Original line number Diff line number Diff line Loading @@ -409,10 +409,9 @@ public class BatteryStatsHelper { } mBluetoothPowerCalculator.reset(); if (mSensorPowerCalculator == null) { mSensorPowerCalculator = new SensorPowerCalculator(mPowerProfile, (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE)); } (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE), mStats, rawRealtimeUs, statsType); mSensorPowerCalculator.reset(); if (mCameraPowerCalculator == null) { Loading
core/java/com/android/internal/os/SensorPowerCalculator.java +31 −5 Original line number Diff line number Diff line Loading @@ -20,15 +20,18 @@ import android.hardware.SensorManager; import android.os.BatteryStats; import android.util.SparseArray; import com.android.internal.location.gnssmetrics.GnssMetrics; import java.util.List; public class SensorPowerCalculator extends PowerCalculator { private final List<Sensor> mSensors; private final double mGpsPowerOn; private final double mGpsPower; public SensorPowerCalculator(PowerProfile profile, SensorManager sensorManager) { public SensorPowerCalculator(PowerProfile profile, SensorManager sensorManager, BatteryStats stats, long rawRealtimeUs, int statsType) { mSensors = sensorManager.getSensorList(Sensor.TYPE_ALL); mGpsPowerOn = profile.getAveragePower(PowerProfile.POWER_GPS_ON); mGpsPower = getAverageGpsPower(profile, stats, rawRealtimeUs, statsType); } @Override Loading @@ -42,10 +45,11 @@ public class SensorPowerCalculator extends PowerCalculator { final int sensorHandle = sensorStats.keyAt(ise); final BatteryStats.Timer timer = sensor.getSensorTime(); final long sensorTime = timer.getTotalTimeLocked(rawRealtimeUs, statsType) / 1000; switch (sensorHandle) { case BatteryStats.Uid.Sensor.GPS: app.gpsTimeMs = sensorTime; app.gpsPowerMah = (app.gpsTimeMs * mGpsPowerOn) / (1000*60*60); app.gpsPowerMah = (app.gpsTimeMs * mGpsPower) / (1000*60*60); break; default: final int sensorsCount = mSensors.size(); Loading @@ -60,4 +64,26 @@ public class SensorPowerCalculator extends PowerCalculator { } } } private double getAverageGpsPower(PowerProfile profile, BatteryStats stats, long rawRealtimeUs, int statsType) { double averagePower = profile.getAveragePowerOrDefault(PowerProfile.POWER_GPS_ON, -1); if (averagePower != -1) { return averagePower; } averagePower = 0; long totalTime = 0; double totalPower = 0; for (int i = 0; i < GnssMetrics.NUM_GPS_SIGNAL_QUALITY_LEVELS; i++) { long timePerLevel = stats.getGpsSignalQualityTime(i, rawRealtimeUs, statsType); totalTime += timePerLevel; totalPower += profile.getAveragePower(PowerProfile.POWER_GPS_SIGNAL_QUALITY_BASED, i) * timePerLevel; } if (totalTime != 0) { averagePower = totalPower / totalTime; } return averagePower; } }